myc_http_tools/models/
auth_config.rs

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