mirror of
				https://github.com/nitnelave/lldap.git
				synced 2023-04-12 14:25:13 +00:00 
			
		
		
		
	configuration: Add smtp config values.
This commit is contained in:
		
							parent
							
								
									24790ea8ca
								
							
						
					
					
						commit
						2d7e85d746
					
				
							
								
								
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -1718,6 +1718,7 @@ dependencies = [
 | 
				
			|||||||
 "quoted_printable",
 | 
					 "quoted_printable",
 | 
				
			||||||
 "r2d2",
 | 
					 "r2d2",
 | 
				
			||||||
 "regex",
 | 
					 "regex",
 | 
				
			||||||
 | 
					 "serde",
 | 
				
			||||||
 "tokio",
 | 
					 "tokio",
 | 
				
			||||||
 "tokio-native-tls",
 | 
					 "tokio-native-tls",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
				
			|||||||
@ -66,3 +66,25 @@ database_url = "sqlite:///data/users.db?mode=rwc"
 | 
				
			|||||||
## each password.
 | 
					## each password.
 | 
				
			||||||
## Randomly generated on first run if it doesn't exist.
 | 
					## Randomly generated on first run if it doesn't exist.
 | 
				
			||||||
key_file = "/data/private_key"
 | 
					key_file = "/data/private_key"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Options to configure SMTP parameters, to send password reset emails.
 | 
				
			||||||
 | 
					## To set these options from environment variables, use the following format
 | 
				
			||||||
 | 
					## (example with "password"): LLDAP_SMTP_OPTIONS__PASSWORD
 | 
				
			||||||
 | 
					#[smtp_options]
 | 
				
			||||||
 | 
					## Whether to enabled password reset via email, from LLDAP.
 | 
				
			||||||
 | 
					#enable_password_reset=true
 | 
				
			||||||
 | 
					## The SMTP server.
 | 
				
			||||||
 | 
					#server="smtp.gmail.com"
 | 
				
			||||||
 | 
					## The SMTP port.
 | 
				
			||||||
 | 
					#port=587
 | 
				
			||||||
 | 
					## Whether to connect with TLS.
 | 
				
			||||||
 | 
					#tls_required=true
 | 
				
			||||||
 | 
					## The SMTP user, usually your email address.
 | 
				
			||||||
 | 
					#user="sender@gmail.com"
 | 
				
			||||||
 | 
					## The SMTP password.
 | 
				
			||||||
 | 
					#password="password"
 | 
				
			||||||
 | 
					## The header field, optional: how the sender appears in the email. The first
 | 
				
			||||||
 | 
					## is a free-form name, followed by an email between <>.
 | 
				
			||||||
 | 
					#from="LLDAP Admin <sender@gmail.com>"
 | 
				
			||||||
 | 
					## Same for reply-to, optional.
 | 
				
			||||||
 | 
					#reply_to="Do not reply <noreply@localhost>"
 | 
				
			||||||
 | 
				
			|||||||
@ -57,6 +57,7 @@ rev = "eb59676a940b15f77871aefe1e46d7b5bf85f40a"
 | 
				
			|||||||
version = "0.10.0-rc.3"
 | 
					version = "0.10.0-rc.3"
 | 
				
			||||||
features = [
 | 
					features = [
 | 
				
			||||||
  "builder",
 | 
					  "builder",
 | 
				
			||||||
 | 
					  "serde",
 | 
				
			||||||
  "smtp-transport",
 | 
					  "smtp-transport",
 | 
				
			||||||
  "tokio1-native-tls",
 | 
					  "tokio1-native-tls",
 | 
				
			||||||
  "tokio1",
 | 
					  "tokio1",
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ pub enum Command {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Clap, Clone)]
 | 
					#[derive(Debug, Clap, Clone)]
 | 
				
			||||||
pub struct RunOpts {
 | 
					pub struct RunOpts {
 | 
				
			||||||
    /// Change config file name
 | 
					    /// Change config file name.
 | 
				
			||||||
    #[clap(short, long, default_value = "lldap_config.toml")]
 | 
					    #[clap(short, long, default_value = "lldap_config.toml")]
 | 
				
			||||||
    pub config_file: String,
 | 
					    pub config_file: String,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,7 +33,11 @@ pub struct RunOpts {
 | 
				
			|||||||
    #[clap(long)]
 | 
					    #[clap(long)]
 | 
				
			||||||
    pub ldaps_port: Option<u16>,
 | 
					    pub ldaps_port: Option<u16>,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Set verbose logging
 | 
					    /// Change HTTP API port. Default: 17170
 | 
				
			||||||
 | 
					    #[clap(long)]
 | 
				
			||||||
 | 
					    pub http_port: Option<u16>,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Set verbose logging.
 | 
				
			||||||
    #[clap(short, long)]
 | 
					    #[clap(short, long)]
 | 
				
			||||||
    pub verbose: bool,
 | 
					    pub verbose: bool,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,39 @@
 | 
				
			|||||||
 | 
					use crate::infra::cli::RunOpts;
 | 
				
			||||||
use anyhow::{Context, Result};
 | 
					use anyhow::{Context, Result};
 | 
				
			||||||
use figment::{
 | 
					use figment::{
 | 
				
			||||||
    providers::{Env, Format, Serialized, Toml},
 | 
					    providers::{Env, Format, Serialized, Toml},
 | 
				
			||||||
    Figment,
 | 
					    Figment,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					use lettre::message::Mailbox;
 | 
				
			||||||
use lldap_auth::opaque::{server::ServerSetup, KeyPair};
 | 
					use lldap_auth::opaque::{server::ServerSetup, KeyPair};
 | 
				
			||||||
use log::*;
 | 
					 | 
				
			||||||
use serde::{Deserialize, Serialize};
 | 
					use serde::{Deserialize, Serialize};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::infra::cli::RunOpts;
 | 
					#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
 | 
				
			||||||
 | 
					#[builder(pattern = "owned")]
 | 
				
			||||||
 | 
					pub struct MailOptions {
 | 
				
			||||||
 | 
					    #[builder(default = "false")]
 | 
				
			||||||
 | 
					    pub enable_password_reset: bool,
 | 
				
			||||||
 | 
					    #[builder(default = "None")]
 | 
				
			||||||
 | 
					    pub from: Option<Mailbox>,
 | 
				
			||||||
 | 
					    #[builder(default = "None")]
 | 
				
			||||||
 | 
					    pub reply_to: Option<Mailbox>,
 | 
				
			||||||
 | 
					    #[builder(default = r#""localhost".to_string()"#)]
 | 
				
			||||||
 | 
					    pub server: String,
 | 
				
			||||||
 | 
					    #[builder(default = "587")]
 | 
				
			||||||
 | 
					    pub port: u16,
 | 
				
			||||||
 | 
					    #[builder(default = r#""admin".to_string()"#)]
 | 
				
			||||||
 | 
					    pub user: String,
 | 
				
			||||||
 | 
					    #[builder(default = r#""".to_string()"#)]
 | 
				
			||||||
 | 
					    pub password: String,
 | 
				
			||||||
 | 
					    #[builder(default = "true")]
 | 
				
			||||||
 | 
					    pub tls_required: bool,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl std::default::Default for MailOptions {
 | 
				
			||||||
 | 
					    fn default() -> Self {
 | 
				
			||||||
 | 
					        MailOptionsBuilder::default().build().unwrap()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
 | 
					#[derive(Clone, Debug, Deserialize, Serialize, derive_builder::Builder)]
 | 
				
			||||||
#[builder(
 | 
					#[builder(
 | 
				
			||||||
@ -35,11 +61,19 @@ pub struct Configuration {
 | 
				
			|||||||
    pub verbose: bool,
 | 
					    pub verbose: bool,
 | 
				
			||||||
    #[builder(default = r#"String::from("server_key")"#)]
 | 
					    #[builder(default = r#"String::from("server_key")"#)]
 | 
				
			||||||
    pub key_file: String,
 | 
					    pub key_file: String,
 | 
				
			||||||
 | 
					    #[builder(default)]
 | 
				
			||||||
 | 
					    pub smtp_options: MailOptions,
 | 
				
			||||||
    #[serde(skip)]
 | 
					    #[serde(skip)]
 | 
				
			||||||
    #[builder(field(private), setter(strip_option))]
 | 
					    #[builder(field(private), setter(strip_option))]
 | 
				
			||||||
    server_setup: Option<ServerSetup>,
 | 
					    server_setup: Option<ServerSetup>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl std::default::Default for Configuration {
 | 
				
			||||||
 | 
					    fn default() -> Self {
 | 
				
			||||||
 | 
					        ConfigurationBuilder::default().build().unwrap()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl ConfigurationBuilder {
 | 
					impl ConfigurationBuilder {
 | 
				
			||||||
    pub fn build(self) -> Result<Configuration> {
 | 
					    pub fn build(self) -> Result<Configuration> {
 | 
				
			||||||
        let server_setup = get_server_setup(self.key_file.as_deref().unwrap_or("server_key"))?;
 | 
					        let server_setup = get_server_setup(self.key_file.as_deref().unwrap_or("server_key"))?;
 | 
				
			||||||
@ -77,6 +111,10 @@ impl Configuration {
 | 
				
			|||||||
            self.ldaps_port = port;
 | 
					            self.ldaps_port = port;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if let Some(port) = cli_opts.http_port {
 | 
				
			||||||
 | 
					            self.http_port = port;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self
 | 
					        self
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -108,7 +146,7 @@ pub fn init(cli_opts: RunOpts) -> Result<Configuration> {
 | 
				
			|||||||
        ConfigurationBuilder::default().build().unwrap(),
 | 
					        ConfigurationBuilder::default().build().unwrap(),
 | 
				
			||||||
    ))
 | 
					    ))
 | 
				
			||||||
    .merge(Toml::file(config_file))
 | 
					    .merge(Toml::file(config_file))
 | 
				
			||||||
    .merge(Env::prefixed("LLDAP_"))
 | 
					    .merge(Env::prefixed("LLDAP_").split("__"))
 | 
				
			||||||
    .extract()?;
 | 
					    .extract()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut config = config.merge_with_cli(cli_opts);
 | 
					    let mut config = config.merge_with_cli(cli_opts);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user