openauth_core/options/
root.rs1use std::fmt;
2use std::sync::Arc;
3
4use openauth_oauth::oauth2::SocialOAuthProvider;
5
6use crate::crypto::SecretEntry;
7use crate::plugin::AuthPlugin;
8
9use super::account::AccountOptions;
10use super::advanced::AdvancedOptions;
11use super::email_verification::EmailVerificationOptions;
12use super::origins::TrustedOriginOptions;
13use super::password::PasswordOptions;
14use super::rate_limit::RateLimitOptions;
15use super::session::SessionOptions;
16use super::user::UserOptions;
17
18#[derive(Debug, Clone, PartialEq, Eq, Default)]
20pub struct TelemetryOptions {
21 pub enabled: Option<bool>,
23 pub debug: bool,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Default)]
28pub struct ExperimentalOptions {
29 pub joins: bool,
30}
31
32#[derive(Clone, Default)]
34pub struct OpenAuthOptions {
35 pub base_url: Option<String>,
36 pub base_path: Option<String>,
37 pub secret: Option<String>,
38 pub secrets: Vec<SecretEntry>,
39 pub trusted_origins: TrustedOriginOptions,
40 pub disabled_paths: Vec<String>,
41 pub session: SessionOptions,
42 pub user: UserOptions,
43 pub email_verification: EmailVerificationOptions,
44 pub password: PasswordOptions,
45 pub account: AccountOptions,
46 pub advanced: AdvancedOptions,
47 pub rate_limit: RateLimitOptions,
48 pub plugins: Vec<AuthPlugin>,
49 pub social_providers: Vec<Arc<dyn SocialOAuthProvider>>,
50 pub production: bool,
51 pub telemetry: TelemetryOptions,
52 pub experimental: ExperimentalOptions,
53}
54
55impl fmt::Debug for OpenAuthOptions {
56 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
57 formatter
58 .debug_struct("OpenAuthOptions")
59 .field("base_url", &self.base_url)
60 .field("base_path", &self.base_path)
61 .field("secret", &self.secret.as_ref().map(|_| "<redacted>"))
62 .field(
63 "secrets",
64 &format_args!("{} secret(s) redacted", self.secrets.len()),
65 )
66 .field("trusted_origins", &self.trusted_origins)
67 .field("disabled_paths", &self.disabled_paths)
68 .field("session", &self.session)
69 .field("user", &self.user)
70 .field("email_verification", &self.email_verification)
71 .field("password", &self.password)
72 .field("account", &self.account)
73 .field("advanced", &self.advanced)
74 .field("rate_limit", &self.rate_limit)
75 .field("plugins", &self.plugins)
76 .field(
77 "social_providers",
78 &self
79 .social_providers
80 .iter()
81 .map(|provider| provider.id())
82 .collect::<Vec<_>>(),
83 )
84 .field("production", &self.production)
85 .field("telemetry", &self.telemetry)
86 .field("experimental", &self.experimental)
87 .finish()
88 }
89}