This commit is contained in:
parent
307cb96b4b
commit
6a592f179a
3 changed files with 25 additions and 12 deletions
|
@ -2,7 +2,7 @@ use serde::Deserialize;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
#[derive(Deserialize, Clone, Default)]
|
#[derive(Deserialize, Clone, Default)]
|
||||||
pub struct Config {
|
pub struct FileConfig {
|
||||||
pub scheme: Option<String>,
|
pub scheme: Option<String>,
|
||||||
pub port: Option<u16>,
|
pub port: Option<u16>,
|
||||||
pub mail: Option<String>,
|
pub mail: Option<String>,
|
||||||
|
@ -10,18 +10,23 @@ pub struct Config {
|
||||||
pub onion: Option<String>,
|
pub onion: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
#[derive(Clone)]
|
||||||
|
pub struct Config {
|
||||||
|
pub fc: FileConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FileConfig {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
scheme: Some("http".to_string()),
|
scheme: Some("http".to_string()),
|
||||||
port: Some(8080),
|
port: Some(8080),
|
||||||
..Config::default()
|
..FileConfig::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn complete(a: Self) -> Self {
|
fn complete(a: Self) -> Self {
|
||||||
// Default config
|
// Default config
|
||||||
let d = Config::new();
|
let d = FileConfig::new();
|
||||||
|
|
||||||
/// Return the default value if nothing is value is none
|
/// Return the default value if nothing is value is none
|
||||||
fn test<T>(val: Option<T>, default: Option<T>) -> Option<T> {
|
fn test<T>(val: Option<T>, default: Option<T>) -> Option<T> {
|
||||||
|
@ -42,10 +47,10 @@ impl Config {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_config(file_path: &str) -> Config {
|
fn get_file_config(file_path: &str) -> FileConfig {
|
||||||
match fs::read_to_string(file_path) {
|
match fs::read_to_string(file_path) {
|
||||||
Ok(file) => match toml::from_str(&file) {
|
Ok(file) => match toml::from_str(&file) {
|
||||||
Ok(stored_config) => Config::complete(stored_config),
|
Ok(stored_config) => FileConfig::complete(stored_config),
|
||||||
Err(file_error) => {
|
Err(file_error) => {
|
||||||
panic!("Error in config file: {file_error}");
|
panic!("Error in config file: {file_error}");
|
||||||
}
|
}
|
||||||
|
@ -53,7 +58,15 @@ pub fn get_config(file_path: &str) -> Config {
|
||||||
Err(_) =>
|
Err(_) =>
|
||||||
// No config file
|
// No config file
|
||||||
{
|
{
|
||||||
Config::new()
|
FileConfig::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_config(file_path: &str) -> Config {
|
||||||
|
let internal_config = get_file_config(file_path);
|
||||||
|
|
||||||
|
Config {
|
||||||
|
fc: internal_config,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -33,11 +33,11 @@ mod contrib;
|
||||||
async fn main() -> io::Result<()> {
|
async fn main() -> io::Result<()> {
|
||||||
let config = config::get_config("./config/config.toml");
|
let config = config::get_config("./config/config.toml");
|
||||||
|
|
||||||
let addr = ("0.0.0.0", config.port.unwrap());
|
let addr = ("0.0.0.0", config.fc.port.unwrap());
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
"Listening to {}://{}:{}",
|
"Listening to {}://{}:{}",
|
||||||
config.clone().scheme.unwrap(),
|
config.clone().fc.scheme.unwrap(),
|
||||||
addr.0,
|
addr.0,
|
||||||
addr.1
|
addr.1
|
||||||
);
|
);
|
||||||
|
@ -93,7 +93,7 @@ async fn main() -> io::Result<()> {
|
||||||
.app_data(web::Data::new(config.clone()))
|
.app_data(web::Data::new(config.clone()))
|
||||||
.wrap(DefaultHeaders::new().add((
|
.wrap(DefaultHeaders::new().add((
|
||||||
"Onion-Location",
|
"Onion-Location",
|
||||||
config.onion.as_deref().unwrap_or_default(),
|
config.fc.onion.as_deref().unwrap_or_default(),
|
||||||
)))
|
)))
|
||||||
.service(index::page)
|
.service(index::page)
|
||||||
.service(agreements::security)
|
.service(agreements::security)
|
||||||
|
|
|
@ -23,8 +23,8 @@ struct SecurityTemplate {
|
||||||
|
|
||||||
fn get_security(config: Config, info: ConnectionInfo) -> String {
|
fn get_security(config: Config, info: ConnectionInfo) -> String {
|
||||||
let data = SecurityTemplate {
|
let data = SecurityTemplate {
|
||||||
contact: config.mail.unwrap_or_default(),
|
contact: config.fc.mail.unwrap_or_default(),
|
||||||
pref_lang: config.lang.unwrap_or_default(),
|
pref_lang: config.fc.lang.unwrap_or_default(),
|
||||||
url: format!(
|
url: format!(
|
||||||
"{}://{}/.well-known/security.txt",
|
"{}://{}/.well-known/security.txt",
|
||||||
info.scheme(),
|
info.scheme(),
|
||||||
|
|
Loading…
Reference in a new issue