1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/*
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 <metamuffin.org>
*/
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<T>(pub T);
#[rocket::async_trait]
impl<'r, T: Responder<'r, 'static>> Responder<'r, 'static> for Cors<T> {
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<Value> {
Cors(json!({"m.homeserver": {"base_url": "https://matrix.metamuffin.org"}} ))
}
#[get("/.well-known/matrix/server")]
fn r_wellknown_matrix_server() -> Cors<Value> {
Cors(json!({"m.server": "matrix.metamuffin.org:443"} ))
}
|