use actix_web::{dev::ConnectionInfo, get, routes, web, HttpRequest, HttpResponse, Responder}; use askama::Template; use crate::config::Config; #[routes] #[get("/.well-known/security.txt")] #[get("/security.txt")] pub async fn security(req: HttpRequest, config: web::Data) -> impl Responder { HttpResponse::Ok().body(get_security( config.get_ref().clone(), req.connection_info().to_owned(), )) } #[derive(Template)] #[template(path = "security.txt")] struct SecurityTemplate { contact: String, pref_lang: String, url: String, } fn get_security(config: Config, info: ConnectionInfo) -> String { let data = SecurityTemplate { contact: config.fc.mail.unwrap_or_default(), pref_lang: config.fc.lang.unwrap_or_default(), url: format!( "{}://{}/.well-known/security.txt", info.scheme(), info.host() ), }; data.render().unwrap() } #[get("/humans.txt")] pub async fn humans() -> impl Responder { // TODO, see https://humanstxt.org/humans.txt actix_web::web::Redirect::to("/") } #[get("/robots.txt")] pub async fn robots() -> impl Responder { HttpResponse::Ok().body(get_robots()) } fn get_robots() -> String { // TODO, see https://www.robotstxt.org/orig.html "User-agent: * Allow: /".to_string() } #[get("/sitemap.xml")] pub async fn sitemap() -> impl Responder { // TODO actix_web::web::Redirect::to("/") }