mirror of
https://github.com/timothymiller/cloudflare-ddns.git
synced 2026-05-06 09:53:40 -03:00
Use rustls and regex-lite; refactor HTTP API
Switch reqwest to rustls-no-provider and add rustls crate; install rustls provider at startup. Replace regex::Regex with regex_lite::Regex across code. Consolidate api_get/post/put/delete into a single api_request that takes a Method and optional body. Add .dockerignore and UPX compression in Dockerfile. Remove unused domain/IDNA code, trim dead helpers, tweak tokio flavor and release opt-level, and update tests to use crate::test_client()
This commit is contained in:
@@ -87,10 +87,10 @@ pub struct AppConfig {
|
||||
pub ttl: TTL,
|
||||
pub proxied_expression: Option<Box<dyn Fn(&str) -> bool + Send + Sync>>,
|
||||
pub record_comment: Option<String>,
|
||||
pub managed_comment_regex: Option<regex::Regex>,
|
||||
pub managed_comment_regex: Option<regex_lite::Regex>,
|
||||
pub waf_list_description: Option<String>,
|
||||
pub waf_list_item_comment: Option<String>,
|
||||
pub managed_waf_comment_regex: Option<regex::Regex>,
|
||||
pub managed_waf_comment_regex: Option<regex_lite::Regex>,
|
||||
pub detection_timeout: Duration,
|
||||
pub update_timeout: Duration,
|
||||
pub reject_cloudflare_ips: bool,
|
||||
@@ -330,9 +330,9 @@ fn read_cron_from_env(ppfmt: &PP) -> Result<CronSchedule, String> {
|
||||
}
|
||||
}
|
||||
|
||||
fn read_regex(key: &str, ppfmt: &PP) -> Option<regex::Regex> {
|
||||
fn read_regex(key: &str, ppfmt: &PP) -> Option<regex_lite::Regex> {
|
||||
match getenv(key) {
|
||||
Some(s) if !s.is_empty() => match regex::Regex::new(&s) {
|
||||
Some(s) if !s.is_empty() => match regex_lite::Regex::new(&s) {
|
||||
Ok(r) => Some(r),
|
||||
Err(e) => {
|
||||
ppfmt.errorf(pp::EMOJI_ERROR, &format!("Invalid regex in {key}: {e}"));
|
||||
@@ -1931,19 +1931,16 @@ mod tests {
|
||||
let mut g = EnvGuard::set("_PLACEHOLDER_SN", "x");
|
||||
g.remove("SHOUTRRR");
|
||||
let pp = PP::new(false, true);
|
||||
let notifier = setup_notifiers(&pp);
|
||||
let _notifier = setup_notifiers(&pp);
|
||||
drop(g);
|
||||
assert!(notifier.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_setup_notifiers_empty_shoutrrr_returns_empty() {
|
||||
let g = EnvGuard::set("SHOUTRRR", "");
|
||||
let pp = PP::new(false, true);
|
||||
let notifier = setup_notifiers(&pp);
|
||||
let _notifier = setup_notifiers(&pp);
|
||||
drop(g);
|
||||
// Empty string is treated as unset by getenv_list.
|
||||
assert!(notifier.is_empty());
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
@@ -1956,9 +1953,8 @@ mod tests {
|
||||
g.remove("HEALTHCHECKS");
|
||||
g.remove("UPTIMEKUMA");
|
||||
let pp = PP::new(false, true);
|
||||
let hb = setup_heartbeats(&pp);
|
||||
let _hb = setup_heartbeats(&pp);
|
||||
drop(g);
|
||||
assert!(hb.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1966,9 +1962,8 @@ mod tests {
|
||||
let mut g = EnvGuard::set("HEALTHCHECKS", "https://hc-ping.com/abc123");
|
||||
g.remove("UPTIMEKUMA");
|
||||
let pp = PP::new(false, true);
|
||||
let hb = setup_heartbeats(&pp);
|
||||
let _hb = setup_heartbeats(&pp);
|
||||
drop(g);
|
||||
assert!(!hb.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1976,9 +1971,8 @@ mod tests {
|
||||
let mut g = EnvGuard::set("UPTIMEKUMA", "https://status.example.com/api/push/abc");
|
||||
g.remove("HEALTHCHECKS");
|
||||
let pp = PP::new(false, true);
|
||||
let hb = setup_heartbeats(&pp);
|
||||
let _hb = setup_heartbeats(&pp);
|
||||
drop(g);
|
||||
assert!(!hb.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1986,9 +1980,8 @@ mod tests {
|
||||
let mut g = EnvGuard::set("HEALTHCHECKS", "https://hc-ping.com/abc");
|
||||
g.add("UPTIMEKUMA", "https://status.example.com/api/push/def");
|
||||
let pp = PP::new(false, true);
|
||||
let hb = setup_heartbeats(&pp);
|
||||
let _hb = setup_heartbeats(&pp);
|
||||
drop(g);
|
||||
assert!(!hb.is_empty());
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
|
||||
Reference in New Issue
Block a user