myc_http_tools/models/
auth_config.rs

1use super::{
2    external_providers_config::ExternalProviderConfig,
3    internal_auth_config::InternalOauthConfig,
4};
5use crate::providers::{
6    azure_config::AzureOauthConfig, google_config::GoogleOauthConfig,
7};
8
9use myc_config::{load_config_from_file, optional_config::OptionalConfig};
10use mycelium_base::utils::errors::{creation_err, MappedErrors};
11use serde::{Deserialize, Serialize};
12use std::path::PathBuf;
13
14#[derive(Debug, Clone, Deserialize, Serialize)]
15#[serde(rename_all = "camelCase")]
16pub struct AuthConfig {
17    pub internal: OptionalConfig<InternalOauthConfig>,
18    pub external: OptionalConfig<Vec<ExternalProviderConfig>>,
19    pub google: OptionalConfig<GoogleOauthConfig>,
20    pub azure: OptionalConfig<AzureOauthConfig>,
21}
22
23#[derive(Clone, Debug, Deserialize)]
24#[serde(rename_all = "camelCase")]
25struct TmpConfig {
26    auth: AuthConfig,
27}
28
29impl AuthConfig {
30    pub fn from_default_config_file(
31        file: PathBuf,
32    ) -> Result<Self, MappedErrors> {
33        if !file.exists() {
34            return creation_err(format!(
35                "Could not find config file: {}",
36                file.to_str().unwrap()
37            ))
38            .as_error();
39        }
40
41        match load_config_from_file::<TmpConfig>(file) {
42            Ok(config) => Ok(config.auth),
43            Err(err) => Err(err),
44        }
45    }
46}