use crate::error::MyResult; use crate::{s_file, state::Logic, Template}; use markup::{doctype, DynRender}; use rocket::{get, http::ContentType, State}; use std::sync::Arc; #[get("/")] pub async fn r_index<'a>(state: &State>) -> MyResult>> { let leaderboard = state.get_leaderboard().await?; Ok(Template(markup::new! { @doctype() html { head { title { "meta adservices" } meta[name="viewport", content="width=device-width, initial-scale=1.0"]; meta[name="description", content="advertise now with meta adservices"]; link[rel="stylesheet", href="/style.css"]; } body { h1 { "meta adservices" } p { "meta adservices is the leading provider of useless images within iframes. " "meta adservices is inspired by " a[href="https://john.citrons.xyz/"]{"johnvertisement"} ". " "the primary differences to john are that meta adservices serves properly compressed images, is free software and is bit more responsive in general. " "check the source code on " a[href="https://codeberg.org/metamuffin/meta-adservices"]{"codeberg"} ". " } h2 { "sample ad" } iframe[src="/v1/embed?s=adservices.metamuffin.org", style="border:none;width:728px;height:90px;"] {} h2 { "use meta ads" } p { "Use meta ads by inserting the following iframe:" } code { pre { "" } } p { "You SHOULD replace " code {"example.org"} " with your domain." } h2 { "create meta ads" } p { "Send mail to " a[href="mailto:metamuffin@disroot.org"]{"metamuffin@disroot.org"} "." br; "The mail MUST contain a ad name, ad image, URL to direct those who click it and optionally ad author name. " br; "Some ads will be rejected for any or no reason at all. " "To create good ads, consider the following statements in the context of your ad (you must not satisfy all): " ol { li { "It is funny, amusing or enigmatic in some way." } li { "It doesn't break any laws in germany." } li { "The link promotes a personal page or free software project page." } li { "The image is compressed losslessly." } li { "The image has a resolution of exactly 728x90." } li { "The image uses the sRGB color space." } li { "The image contains no nonfree assets." } li { "The image, URL or names should be free of malware" } } } h2 { "leaderboard" } table { tr { th { "Domain" } th { "Impression weight" } th { "Impressions" } } @for (domain, raw, weighted) in &leaderboard { tr { td { @domain } td { b { @weighted.round() } } td { small { @raw } } } } } h2 { "privacy" } p { "data used by meta adservices: " } ul { li { "Your IP address" } li { "The Advertisement site (where the ad was shown)" } } p { "data stored by meta adservices: " } ul { li { "Your IP address is used within a bloom filter in volatile memory." } li { "Your requests increments a persistent public counter per ad site (according to a weighting function)." } } p { "in case of questions or request mail " a[href="mailto:metamuffin@disroot.org"]{"metamuffin@disroot.org"} } } } })) } #[get("/style.css")] pub fn r_style() -> (ContentType, String) { (ContentType::CSS, s_file!("style.css")) } #[cfg(not(debug_assertions))] #[macro_export] macro_rules! s_file { ($path: literal) => { include_str!($path).to_string() }; } #[cfg(debug_assertions)] #[macro_export] macro_rules! s_file { ($path: literal) => { std::fs::read_to_string(concat!("src/", $path)).unwrap() }; }