use std::sync::Arc;
use acme_proxy_core::config;
use acme_proxy_core::routes;
use acme_proxy_jobs::notify::NotifyDispatcher;
use acme_proxy_net::challenge::ChallengeRegistry;
use acme_proxy_policy::filter::FilterPolicy;
use acme_proxy_signer::SignerInfo;
pub struct Profile {
pub name: String,
pub path: String,
pub base_url: String,
pub signer_info: Arc<dyn SignerInfo>,
pub filter: Arc<FilterPolicy>,
pub challenges: Arc<ChallengeRegistry>,
pub order: config::OrderConfig,
pub eab: config::EabConfig,
pub meta: config::MetaConfig,
pub notify: Arc<NotifyDispatcher>,
}
pub struct ProfileParts {
pub signer_info: Arc<dyn SignerInfo>,
pub filter: Arc<FilterPolicy>,
pub challenges: Arc<ChallengeRegistry>,
pub order: config::OrderConfig,
pub eab: config::EabConfig,
pub meta: config::MetaConfig,
pub notify: Arc<NotifyDispatcher>,
}
impl Profile {
pub fn new(name: &str, base_url: &str, parts: ProfileParts) -> Self {
Self {
name: name.to_string(),
base_url: routes::profile_base_url(base_url, name),
path: routes::profile_path(name),
signer_info: parts.signer_info,
filter: parts.filter,
challenges: parts.challenges,
order: parts.order,
eab: parts.eab,
meta: parts.meta,
notify: parts.notify,
}
}
#[must_use]
pub fn directory_url(&self) -> String {
format!("{}{}", self.base_url, routes::DIRECTORY)
}
}