1use super::{container::*, error::*};
2
3use {
4 bytestring::*,
5 rustls_acme::{caches::*, *},
6 std::{io, path::*},
7};
8
9pub use acme::{LETS_ENCRYPT_PRODUCTION_DIRECTORY, LETS_ENCRYPT_STAGING_DIRECTORY};
14
15impl TlsContainer {
16 pub fn add_resolver_from_acme(&mut self, acme: ACME) -> Result<(), TlsContainerError> {
18 let hosts = acme.hosts.clone();
19 let state = acme.into_config().state();
20 let resolver = state.resolver();
21 for host in hosts {
22 self.add_delegate(host.clone(), resolver.clone())?;
23 }
24 Ok(())
25 }
26}
27
28#[derive(Debug, Default)]
34pub struct ACME {
35 pub hosts: Vec<ByteString>,
37
38 pub directory: ByteString,
40
41 pub contacts: Vec<ByteString>,
43
44 pub cache: PathBuf,
46}
47
48impl ACME {
49 pub fn into_config(self) -> AcmeConfig<io::Error> {
51 let mut acme_config = AcmeConfig::new(self.hosts).directory(self.directory).cache(DirCache::new(self.cache));
52 for contact in self.contacts {
53 acme_config = acme_config.contact_push(String::from("mailto:") + &contact);
54 }
55 acme_config
56 }
57}