From f5d0f725de60583bdc109d452a8cca4d0c71ff2b Mon Sep 17 00:00:00 2001 From: mdecimus Date: Wed, 16 Jul 2025 17:06:01 +0200 Subject: [PATCH] ACME support for DigitalOcean (closes #1667) --- Cargo.lock | 4 ++-- crates/common/Cargo.toml | 2 +- crates/common/src/config/server/tls.rs | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b05aed7d..caef5e24 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2051,9 +2051,9 @@ dependencies = [ [[package]] name = "dns-update" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b0a9ca156a0285b2768b7fcb368b231e7736d3c13eef604c5c4203057bed33" +checksum = "12c278a5523000f9ccab46e4ef779a4354129f762884b36fb1b1b5ed58830d20" dependencies = [ "hickory-client", "reqwest 0.12.15", diff --git a/crates/common/Cargo.toml b/crates/common/Cargo.toml index 89999c70..8d65345d 100644 --- a/crates/common/Cargo.toml +++ b/crates/common/Cargo.toml @@ -19,7 +19,7 @@ mail-builder = { version = "0.4" } mail-auth = { version = "0.7.1" } mail-send = { version = "0.5", default-features = false, features = ["cram-md5", "ring", "tls12"] } smtp-proto = { version = "0.1", features = ["rkyv"] } -dns-update = { version = "0.1" } +dns-update = { version = "0.1.3" } calcard = { version = "0.1.3", features = ["rkyv"] } ahash = { version = "0.8.2", features = ["serde"] } parking_lot = "0.12.1" diff --git a/crates/common/src/config/server/tls.rs b/crates/common/src/config/server/tls.rs index e7cb1bee..ff796560 100644 --- a/crates/common/src/config/server/tls.rs +++ b/crates/common/src/config/server/tls.rs @@ -252,6 +252,26 @@ fn build_dns_updater(config: &mut Config, acme_id: &str) -> Option { }) .ok() } + "digitalocean" => { + let timeout = config + .property_or_default(("acme", acme_id, "timeout"), "30s") + .unwrap_or_else(|| Duration::from_secs(30)); + + DnsUpdater::new_digitalocean( + config + .value_require(("acme", acme_id, "secret"))? + .trim() + .to_string(), + timeout.into(), + ) + .map_err(|err| { + config.new_build_error( + ("acme", acme_id, "provider"), + format!("Failed to create DigitalOcean DNS updater: {err}"), + ) + }) + .ok() + } _ => { config.new_parse_error(("acme", acme_id, "provider"), "Unsupported provider"); None