use std::path::PathBuf;
use std::sync::Arc;
use super::super::oauth::ProviderConfig;
use super::super::{Principal, ops};
use crate::server::http::Request;
#[derive(Debug, Clone)]
pub enum Notice {
PasswordReset {
email: String,
token: String,
link: Option<String>,
},
}
pub type Notifier = Arc<dyn Fn(&Notice) -> Result<(), String> + Send + Sync>;
pub type SuperadminFn =
Arc<dyn Fn(&Request) -> Option<Arc<super::super::Superadmin>> + Send + Sync>;
pub type AgentFn = Arc<dyn Fn(&Request) -> Option<Principal> + Send + Sync>;
#[derive(Clone, Default)]
pub struct ApiConfig {
pub agent: Option<AgentFn>,
pub agent_ways: super::super::agent_identities::AgentWays,
pub public_url: Option<String>,
pub notifier: Option<Notifier>,
pub setup_token_file: Option<PathBuf>,
pub edge: Option<super::super::edge::EdgeFn>,
pub providers: Vec<ProviderConfig>,
pub open_signup: bool,
pub audit: Option<Arc<crate::audit::AuditLog>>,
pub superadmin: Option<SuperadminFn>,
pub orgs: Option<ops::OrgsFn>,
}
impl std::fmt::Debug for ApiConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ApiConfig")
.field("public_url", &self.public_url)
.field("notifier", &self.notifier.is_some())
.field("setup_token_file", &self.setup_token_file)
.field("providers", &self.providers)
.field("open_signup", &self.open_signup)
.field("audit", &self.audit.is_some())
.field("superadmin", &self.superadmin.is_some())
.field("agent", &self.agent.is_some())
.field("edge", &self.edge.is_some())
.field("orgs", &self.orgs.is_some())
.finish()
}
}