(
self,
request: CreateDnsCredentialRequest,
)
| 320 | } |
| 321 | |
| 322 | async fn create_dns_credential( |
| 323 | self, |
| 324 | request: CreateDnsCredentialRequest, |
| 325 | ) -> Result<DnsCredentialInfo> { |
| 326 | let kv_store = self.state.kv_store(); |
| 327 | |
| 328 | // Validate provider type |
| 329 | let provider = match request.provider_type.as_str() { |
| 330 | "cloudflare" => DnsProvider::Cloudflare { |
| 331 | api_token: request.cf_api_token, |
| 332 | api_url: request.cf_api_url, |
| 333 | }, |
| 334 | _ => bail!("unsupported provider type: {}", request.provider_type), |
| 335 | }; |
| 336 | |
| 337 | let now = now_secs(); |
| 338 | let id = generate_cred_id(); |
| 339 | let dns_txt_ttl = request.dns_txt_ttl.unwrap_or(60); |
| 340 | let max_dns_wait = Duration::from_secs(request.max_dns_wait.unwrap_or(60 * 5).into()); |
| 341 | let cred = DnsCredential { |
| 342 | id: id.clone(), |
| 343 | name: request.name, |
| 344 | provider, |
| 345 | created_at: now, |
| 346 | updated_at: now, |
| 347 | dns_txt_ttl, |
| 348 | max_dns_wait, |
| 349 | }; |
| 350 | |
| 351 | kv_store.save_dns_credential(&cred)?; |
| 352 | info!("Created DNS credential: {} ({})", cred.name, cred.id); |
| 353 | |
| 354 | // Set as default if requested |
| 355 | if request.set_as_default { |
| 356 | kv_store.set_default_dns_credential_id(&id)?; |
| 357 | info!("Set DNS credential {} as default", id); |
| 358 | } |
| 359 | |
| 360 | Ok(dns_cred_to_proto(cred)) |
| 361 | } |
| 362 | |
| 363 | async fn update_dns_credential( |
| 364 | self, |
nothing calls this directly
no test coverage detected