mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	config: Prevent loading the wrong server_key
This commit is contained in:
		
							parent
							
								
									5b5395103a
								
							
						
					
					
						commit
						3ebca01180
					
				@ -45,6 +45,11 @@ pub struct RunOpts {
 | 
			
		||||
    #[clap(flatten)]
 | 
			
		||||
    pub general_config: GeneralConfigOpts,
 | 
			
		||||
 | 
			
		||||
    /// Path to the file that contains the private server key.
 | 
			
		||||
    /// It will be created if it doesn't exist.
 | 
			
		||||
    #[clap(long, env = "LLDAP_SERVER_KEY_FILE")]
 | 
			
		||||
    pub server_key_file: Option<String>,
 | 
			
		||||
 | 
			
		||||
    /// Change ldap port. Default: 3890
 | 
			
		||||
    #[clap(long, env = "LLDAP_LDAP_PORT")]
 | 
			
		||||
    pub ldap_port: Option<u16>,
 | 
			
		||||
 | 
			
		||||
@ -37,10 +37,7 @@ impl std::default::Default for MailOptions {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
 | 
			
		||||
#[builder(
 | 
			
		||||
    pattern = "owned",
 | 
			
		||||
    build_fn(name = "private_build", validate = "Self::validate")
 | 
			
		||||
)]
 | 
			
		||||
#[builder(pattern = "owned", build_fn(name = "private_build"))]
 | 
			
		||||
pub struct Configuration {
 | 
			
		||||
    #[builder(default = "3890")]
 | 
			
		||||
    pub ldap_port: u16,
 | 
			
		||||
@ -67,7 +64,7 @@ pub struct Configuration {
 | 
			
		||||
    #[builder(default = r#"String::from("http://localhost")"#)]
 | 
			
		||||
    pub http_url: String,
 | 
			
		||||
    #[serde(skip)]
 | 
			
		||||
    #[builder(field(private), setter(strip_option))]
 | 
			
		||||
    #[builder(field(private), default = "None")]
 | 
			
		||||
    server_setup: Option<ServerSetup>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -80,15 +77,7 @@ impl std::default::Default for Configuration {
 | 
			
		||||
impl ConfigurationBuilder {
 | 
			
		||||
    pub fn build(self) -> Result<Configuration> {
 | 
			
		||||
        let server_setup = get_server_setup(self.key_file.as_deref().unwrap_or("server_key"))?;
 | 
			
		||||
        Ok(self.server_setup(server_setup).private_build()?)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn validate(&self) -> Result<(), String> {
 | 
			
		||||
        if self.server_setup.is_none() {
 | 
			
		||||
            Err("Don't use `private_build`, use `build` instead".to_string())
 | 
			
		||||
        } else {
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
        Ok(self.server_setup(Some(server_setup)).private_build()?)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -143,6 +132,11 @@ impl TopLevelCommandOpts for TestEmailOpts {
 | 
			
		||||
impl ConfigOverrider for RunOpts {
 | 
			
		||||
    fn override_config(&self, config: &mut Configuration) {
 | 
			
		||||
        self.general_config.override_config(config);
 | 
			
		||||
 | 
			
		||||
        if let Some(path) = self.server_key_file.as_ref() {
 | 
			
		||||
            config.key_file = path.to_string();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if let Some(port) = self.ldap_port {
 | 
			
		||||
            config.ldap_port = port;
 | 
			
		||||
        }
 | 
			
		||||
@ -215,7 +209,7 @@ where
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    let mut config: Configuration = Figment::from(Serialized::defaults(
 | 
			
		||||
        ConfigurationBuilder::default().build().unwrap(),
 | 
			
		||||
        ConfigurationBuilder::default().private_build().unwrap(),
 | 
			
		||||
    ))
 | 
			
		||||
    .merge(Toml::file(config_file))
 | 
			
		||||
    .merge(Env::prefixed("LLDAP_").split("__"))
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user