use actix_web::{HttpServer, App, get, web, Responder, HttpResponse}; use serde::Deserialize; pub static HTML: &'static str = include_str!("./index.html"); pub static JSON: &'static str = include_str!("./prov.json"); #[derive(Deserialize)] struct Params { redirect: Option, title: Option, description: Option, sitename: Option, image: Option, color: Option, title_url: Option, sitename_url: Option, } #[get("/")] async fn index(info: web::Query) -> impl Responder { let info = info.into_inner(); HttpResponse::Ok().content_type("text/html").body(HTML .replace("{{REDIRECT}}", &info.redirect.unwrap_or("https://davidon.top".to_string())) .replace("{{TITLE}}", &info.title.unwrap_or_default()) .replace("{{DESCRIPTION}}", &info.description.unwrap_or_default()) .replace("{{PROV}}", &info.sitename.unwrap_or_default()) .replace("{{IMAGE}}", &info.image.unwrap_or_default()) .replace("{{COLOR}}", &info.color.unwrap_or_default()) .replace("{{TITURL}}", &info.title_url.unwrap_or_default()) .replace("{{PROVURL}}", &info.sitename_url.unwrap_or_default()) ) } #[derive(Deserialize)] struct ParamsJson { title: Option, title_url: Option, provider: Option, provider_url: Option, } #[get("/json")] async fn json(info: web::Query) -> impl Responder { let info = info.into_inner(); HttpResponse::Ok().content_type("application/json").body(JSON .replace("{{TITLE}}", &info.title.unwrap_or_default()) .replace("{{TITURL}}", &info.title_url.unwrap_or_default()) .replace("{{PROV}}", &info.provider.unwrap_or_default()) .replace("{{PROVURL}}", &info.provider_url.unwrap_or_default()) ) } #[actix_web::main] async fn main() -> std::io::Result<()> { tracing_subscriber::fmt::init(); HttpServer::new(|| { App::new() .service(index) .service(json) }) .bind(("127.0.0.1", 3596))? .run() .await }