use std::sync::LazyLock;
use crate::oauth2::provider::{GOOGLE_PROVIDER, ProviderInfo, ProviderKind, provider_for};
pub(crate) static OAUTH2_CSRF_COOKIE_NAME: LazyLock<String> = LazyLock::new(|| {
std::env::var("OAUTH2_CSRF_COOKIE_NAME")
.ok()
.unwrap_or("__Host-CsrfId".to_string())
});
pub(super) static OAUTH2_CSRF_COOKIE_MAX_AGE: LazyLock<u64> =
LazyLock::new(|| match std::env::var("OAUTH2_CSRF_COOKIE_MAX_AGE") {
Ok(val) => val.parse().unwrap_or_else(|e| {
panic!("OAUTH2_CSRF_COOKIE_MAX_AGE='{val}' is not a valid u64: {e}")
}),
Err(_) => 60,
});
pub fn get_google_client_id() -> &'static str {
&GOOGLE_PROVIDER.client_id
}
pub fn is_provider_enabled(name: &str) -> bool {
ProviderKind::from_provider_name(name)
.and_then(provider_for)
.is_some()
}
pub fn provider_info(name: &str) -> Option<ProviderInfo> {
ProviderKind::from_provider_name(name)
.and_then(provider_for)
.map(|cfg| ProviderInfo {
provider_name: cfg.provider_name,
display_name: cfg.display_name,
button_class: cfg.button_class,
icon_slug: cfg.icon_slug,
button_color: cfg.button_color,
button_hover_color: cfg.button_hover_color,
css_var_suffix: cfg.css_var_suffix,
})
}
pub fn enabled_providers() -> Vec<ProviderInfo> {
ProviderKind::ALL
.iter()
.filter_map(|&kind| {
provider_for(kind).map(|cfg| ProviderInfo {
provider_name: cfg.provider_name,
display_name: cfg.display_name,
button_class: cfg.button_class,
icon_slug: cfg.icon_slug,
button_color: cfg.button_color,
button_hover_color: cfg.button_hover_color,
css_var_suffix: cfg.css_var_suffix,
})
})
.collect()
}
#[cfg(test)]
mod tests;