mirror of
https://codeberg.org/slatian/service.echoip-slatecave.git
synced 2025-07-17 06:23:29 +02:00
Made template loading logic reuseable
This commit is contained in:
75
src/main.rs
75
src/main.rs
@ -19,7 +19,6 @@ use clap::Parser;
|
||||
use lazy_static::lazy_static;
|
||||
use regex::Regex;
|
||||
use serde::{Deserialize,Serialize};
|
||||
use tera::Tera;
|
||||
use tower::ServiceBuilder;
|
||||
use tower_http::services::ServeDir;
|
||||
use trust_dns_resolver::Name;
|
||||
@ -32,7 +31,6 @@ use tokio::signal::unix::{
|
||||
use tokio::task;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fs;
|
||||
use std::net::IpAddr;
|
||||
use std::sync::Arc;
|
||||
|
||||
@ -54,6 +52,8 @@ use crate::geoip::{
|
||||
};
|
||||
use crate::idna::IdnaName;
|
||||
use crate::mycelium::MycEngine;
|
||||
use crate::mycelium::TemplateEngineLoader;
|
||||
use crate::mycelium::read_toml_from_file;
|
||||
use crate::simple_dns::DnsLookupResult;
|
||||
use crate::settings::*;
|
||||
use crate::view::View;
|
||||
@ -137,23 +137,6 @@ fn match_domain_hidden_list(domain: &String, hidden_list: &Vec<String>) -> bool
|
||||
return false;
|
||||
}
|
||||
|
||||
fn read_toml_from_file<T: for<'de> serde::Deserialize<'de>>(path: &String) -> Option<T> {
|
||||
let text = match fs::read_to_string(path) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
println!("Error while reading file '{path}': {e}");
|
||||
return None;
|
||||
}
|
||||
};
|
||||
match toml::from_str(&text) {
|
||||
Ok(t) => Some(t),
|
||||
Err(e) => {
|
||||
println!("Unable to parse file '{path}':\n{e}");
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// Parse Command line arguments
|
||||
@ -163,9 +146,11 @@ async fn main() {
|
||||
let config: config::EchoIpServiceConfig = match cli_args.config {
|
||||
Some(config_path) => {
|
||||
match read_toml_from_file::<config::EchoIpServiceConfig>(&config_path) {
|
||||
Some(c) => c,
|
||||
None => {
|
||||
println!("Could not read confuration file, exiting.");
|
||||
Ok(c) => c,
|
||||
Err(e) => {
|
||||
println!("Could not read confuration file!");
|
||||
println!("{e}");
|
||||
println!("Exiting ...");
|
||||
::std::process::exit(1);
|
||||
}
|
||||
}
|
||||
@ -174,47 +159,25 @@ async fn main() {
|
||||
};
|
||||
|
||||
// Initalize Tera templates
|
||||
let mut template_base_dir = match cli_args.template_location {
|
||||
Some(template_base_dir) => template_base_dir,
|
||||
None => (&config.template.template_location).to_owned(),
|
||||
};
|
||||
if !template_base_dir.ends_with("/") {
|
||||
template_base_dir = template_base_dir + "/";
|
||||
}
|
||||
let template_extra_config = match &cli_args.extra_config {
|
||||
Some(path) => read_toml_from_file(path),
|
||||
None => match &config.template.extra_config {
|
||||
Some(path) => read_toml_from_file(path),
|
||||
None => {
|
||||
println!("Trying to read default template configuration ...");
|
||||
println!("(If this fails that may be ok, depending on your template)");
|
||||
read_toml_from_file(&(template_base_dir.clone()+"extra.toml"))
|
||||
},
|
||||
},
|
||||
};
|
||||
let template_glob = template_base_dir.clone()+"*";
|
||||
println!("Parsing Templates from '{}' ...", &template_glob);
|
||||
let res = Tera::new((template_glob).as_str());
|
||||
let tera = match res {
|
||||
Ok(t) => t,
|
||||
let template_loader = TemplateEngineLoader::new(
|
||||
config.template.template_location.clone(),
|
||||
config.template.extra_config.clone()
|
||||
)
|
||||
.cli_template_location(cli_args.template_location)
|
||||
.cli_extra_config_location(cli_args.extra_config);
|
||||
|
||||
|
||||
let templating_engine = match template_loader.load_templates() {
|
||||
Ok(t) => t.into(),
|
||||
Err(e) => {
|
||||
println!("Template parsing error(s): {}", e);
|
||||
println!("{e}");
|
||||
::std::process::exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
let templating_engine = TemplatingEngine::new(
|
||||
tera,
|
||||
template_extra_config,
|
||||
);
|
||||
|
||||
// Static file directory
|
||||
|
||||
let static_file_directory = cli_args.static_location.unwrap_or(
|
||||
config.server.static_location.clone().unwrap_or(
|
||||
template_base_dir+"/static"
|
||||
)
|
||||
);
|
||||
let static_file_directory = template_loader.base_dir()+"/static";
|
||||
|
||||
println!("Static files will be served from: {static_file_directory}");
|
||||
|
||||
|
Reference in New Issue
Block a user