/* This file is part of metamuffins website (https://codeberg.org/metamuffin/website) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin */ pub mod layout; use rocket::{ fairing::AdHoc, fs::FileServer, get, http::Header, response::{self, Responder}, routes, serde::json::{json, Value}, Request, }; #[tokio::main] async fn main() { env_logger::builder() .filter_level(log::LevelFilter::Info) .parse_env("LOG") .init(); let _ = rocket::build() .attach(AdHoc::on_response("set server header", |_req, res| { res.set_header(Header::new("server", "blub")); Box::pin(async {}) })) .mount( "/", routes![r_wellknown_matrix_server, r_wellknown_matrix_client,], ) .mount("/", FileServer::from("modules")) .launch() .await .unwrap(); } pub struct Cors(pub T); #[rocket::async_trait] impl<'r, T: Responder<'r, 'static>> Responder<'r, 'static> for Cors { fn respond_to(self, request: &'r Request<'_>) -> response::Result<'static> { let mut resp = self.0.respond_to(request); if let Ok(resp) = &mut resp { resp.set_header(Header::new("access-control-allow-origin", "*")); } resp } } #[get("/.well-known/matrix/client")] fn r_wellknown_matrix_client() -> Cors { Cors(json!({"m.homeserver": {"base_url": "https://matrix.metamuffin.org"}} )) } #[get("/.well-known/matrix/server")] fn r_wellknown_matrix_server() -> Cors { Cors(json!({"m.server": "matrix.metamuffin.org:443"} )) }