#![recursion_limit = "1024"] use std::env::args; use std::fs; use crate::config::{ListgenConfig, ListgenConfigServerOwnership}; use typed_html::{html, text}; use typed_html::dom::DOMTree; pub mod config; fn main() { let config_file; if args().len() != 1 { println!("[e3t-listgen] no config file provided, defaulting to listing.yaml"); config_file = "listing.yaml".to_string(); } else { let args = args().collect::>(); config_file = args[0].clone(); } println!("[e3t-listgen] loading config from {}", config_file); let config_str = match fs::read_to_string(config_file) { Ok(s) => s, Err(e) => { eprintln!("[e3t-listgen] unable to load config: {}", e); std::process::exit(1); } }; println!("[e3t-listgen] parsing configuration"); let config: ListgenConfig = match serde_yaml::from_str(&config_str) { Ok(s) => s, Err(e) => { eprintln!("[e3t-listgen] unable to parse config: {}", e); std::process::exit(1); } }; println!("[e3t-listgen] building servers.html"); let servers_html_text = generate_servershtml(&config); println!("[e3t-listgen] building services.html"); let services_html_text = generate_serviceslist(&config); println!("[e3t-listgen] writing servers.html"); match fs::write("servers.html", servers_html_text) { Ok(s) => s, Err(e) => { eprintln!("[e3t-listgen] unable to write servers.html: {}", e); std::process::exit(1); } } println!("[e3t-listgen] writing services.html"); match fs::write("services.html", services_html_text) { Ok(s) => s, Err(e) => { eprintln!("[e3t-listgen] unable to write services.html: {}", e); std::process::exit(1); } } } fn generate_servershtml(config: &ListgenConfig) -> String { let html: DOMTree = html!( "e3team Servers"

"e3team-owned servers"

"e3team owns and controls several servers around the globe. Following is a list of them all:"

{ config.servers.iter().map(|u| { html! ( ) })}
"Hostname" "Public?" "Public IP" "Edge?" "Domain Name" "Ownership" "Country" "Region" "Primary Admin(s)"
{ text!("{}", u.hostname) } { text!("{}", if u.public { "Yes" } else { "No" }) } { text!("{}", if let Some(ips) = &u.public_ips { ips.iter().map(|u| u.to_string()).collect::>().join(", ") } else { "N/A".into() } ) } { text!("{}", if u.edge { "Yes" } else { "No" }) } { text!("{}", if let Some(domain) = &u.domain { domain.as_str() } else { "N/A" }) } { text!("{}", if matches!(u.ownership, ListgenConfigServerOwnership::Rented) { "Rented" } else { "Owned" }) } { text!("{}", u.country ) } { text!("{}", u.region ) } { text!("{}", u.admins.join(", ")) }

"Generated automatically by e3t-listgen from ""listing.yaml""."

"View our services list"
); html.to_string() } fn generate_serviceslist(config: &ListgenConfig) -> String { let html: DOMTree = html!( "e3team Services"

"e3team-hosted servers"

"e3team hosts many services on it's servers around the globe. Many are public. Following is a list of them all:"

{ config.services.iter().map(|u| { html! ( ) })}
"Name" "Software" "Public?" "Public URL" "Hosted On" "Backed Up" "Primary Admin(s)"
{ text!("{}", u.name) } { text!("{}", u.software) } { text!("{}", if u.public { "Yes" } else { "No" }) } { text!("{}", u.url ) } { text!("{}", u.host) } { text!("{}", u.backups ) } { text!("{}", u.admins.join(", ")) }

"Generated automatically by e3t-listgen from ""listing.yaml""."

"View our server list"
); html.to_string() }