Dessalines 2020-04-11 14:06:04 -04:00
parent bb287cbd07
commit 61815bce2e
5 changed files with 26 additions and 18 deletions

View file

@ -253,7 +253,7 @@ impl Perform<LoginResponse> for Oper<Register> {
// Register the new user // Register the new user
let user_form = UserForm { let user_form = UserForm {
name: data.username.to_owned(), name: data.username.to_owned(),
fedi_name: Settings::get().hostname.to_owned(), fedi_name: Settings::get().hostname,
email: data.email.to_owned(), email: data.email.to_owned(),
matrix_user_id: None, matrix_user_id: None,
avatar: None, avatar: None,

View file

@ -112,7 +112,7 @@ pub fn send_email(
to_username: &str, to_username: &str,
html: &str, html: &str,
) -> Result<(), String> { ) -> Result<(), String> {
let email_config = Settings::get().email.as_ref().ok_or("no_email_setup")?; let email_config = Settings::get().email.ok_or("no_email_setup")?;
let email = Email::builder() let email = Email::builder()
.to((to_email, to_username)) .to((to_email, to_username))
@ -127,7 +127,7 @@ pub fn send_email(
} else { } else {
SmtpClient::new(&email_config.smtp_server, ClientSecurity::None).unwrap() SmtpClient::new(&email_config.smtp_server, ClientSecurity::None).unwrap()
} }
.hello_name(ClientId::Domain(Settings::get().hostname.to_owned())) .hello_name(ClientId::Domain(Settings::get().hostname))
.smtp_utf8(true) .smtp_utf8(true)
.authentication_mechanism(Mechanism::Plain) .authentication_mechanism(Mechanism::Plain)
.connection_reuse(ConnectionReuseParameters::ReuseUnlimited); .connection_reuse(ConnectionReuseParameters::ReuseUnlimited);

View file

@ -39,6 +39,7 @@ async fn main() -> io::Result<()> {
// Create Http server with websocket support // Create Http server with websocket support
HttpServer::new(move || { HttpServer::new(move || {
let settings = Settings::get();
App::new() App::new()
.wrap(middleware::Logger::default()) .wrap(middleware::Logger::default())
.data(pool.clone()) .data(pool.clone())

View file

@ -45,6 +45,6 @@ pub fn config(cfg: &mut web::ServiceConfig) {
async fn index() -> Result<NamedFile, actix_web::error::Error> { async fn index() -> Result<NamedFile, actix_web::error::Error> {
Ok(NamedFile::open( Ok(NamedFile::open(
Settings::get().front_end_dir.to_owned() + "/index.html", Settings::get().front_end_dir + "/index.html",
)?) )?)
} }

View file

@ -4,11 +4,12 @@ use serde::Deserialize;
use std::env; use std::env;
use std::fs; use std::fs;
use std::net::IpAddr; use std::net::IpAddr;
use std::sync::RwLock;
static CONFIG_FILE_DEFAULTS: &str = "config/defaults.hjson"; static CONFIG_FILE_DEFAULTS: &str = "config/defaults.hjson";
static CONFIG_FILE: &str = "config/config.hjson"; static CONFIG_FILE: &str = "config/config.hjson";
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize, Clone)]
pub struct Settings { pub struct Settings {
pub setup: Option<Setup>, pub setup: Option<Setup>,
pub database: Database, pub database: Database,
@ -22,7 +23,7 @@ pub struct Settings {
pub federation_enabled: bool, pub federation_enabled: bool,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize, Clone)]
pub struct Setup { pub struct Setup {
pub admin_username: String, pub admin_username: String,
pub admin_password: String, pub admin_password: String,
@ -30,7 +31,7 @@ pub struct Setup {
pub site_name: String, pub site_name: String,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize, Clone)]
pub struct RateLimitConfig { pub struct RateLimitConfig {
pub message: i32, pub message: i32,
pub message_per_second: i32, pub message_per_second: i32,
@ -40,7 +41,7 @@ pub struct RateLimitConfig {
pub register_per_second: i32, pub register_per_second: i32,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize, Clone)]
pub struct EmailConfig { pub struct EmailConfig {
pub smtp_server: String, pub smtp_server: String,
pub smtp_login: Option<String>, pub smtp_login: Option<String>,
@ -49,7 +50,7 @@ pub struct EmailConfig {
pub use_tls: bool, pub use_tls: bool,
} }
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize, Clone)]
pub struct Database { pub struct Database {
pub user: String, pub user: String,
pub password: String, pub password: String,
@ -60,12 +61,10 @@ pub struct Database {
} }
lazy_static! { lazy_static! {
static ref SETTINGS: Settings = { static ref SETTINGS: RwLock<Settings> = RwLock::new(match Settings::init() {
match Settings::init() {
Ok(c) => c, Ok(c) => c,
Err(e) => panic!("{}", e), Err(e) => panic!("{}", e),
} });
};
} }
impl Settings { impl Settings {
@ -91,8 +90,8 @@ impl Settings {
} }
/// Returns the config as a struct. /// Returns the config as a struct.
pub fn get() -> &'static Self { pub fn get() -> Self {
&SETTINGS SETTINGS.read().unwrap().to_owned()
} }
/// Returns the postgres connection url. If LEMMY_DATABASE_URL is set, that is used, /// Returns the postgres connection url. If LEMMY_DATABASE_URL is set, that is used,
@ -121,7 +120,15 @@ impl Settings {
pub fn save_config_file(data: &str) -> Result<String, Error> { pub fn save_config_file(data: &str) -> Result<String, Error> {
fs::write(CONFIG_FILE, data)?; fs::write(CONFIG_FILE, data)?;
Self::init()?;
// Reload the new settings
// From https://stackoverflow.com/questions/29654927/how-do-i-assign-a-string-to-a-mutable-static-variable/47181804#47181804
let mut new_settings = SETTINGS.write().unwrap();
*new_settings = match Settings::init() {
Ok(c) => c,
Err(e) => panic!("{}", e),
};
Self::read_config_file() Self::read_config_file()
} }
} }