diff --git a/Cargo.lock b/Cargo.lock index 09e1334..7cff99e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -634,12 +634,13 @@ dependencies = [ [[package]] name = "site-backend" -version = "0.0.0" +version = "0.1.0" dependencies = [ "axum", "flate2", "futures-util", "hyper", + "serde_json", "tar", "tokio", "tokio-util", diff --git a/Cargo.toml b/Cargo.toml index 55af921..64b20c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,4 @@ flate2 = "1.0.22" tokio-util = { version = "0.7.1", features = ["io"] } futures-util = "0.3.21" uuid = { version = "1.0.0-alpha.1", features = ["v4"] } +serde_json = "1.0.79" diff --git a/src/main.rs b/src/main.rs index 40e299b..1ffbaea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,13 @@ use axum::{ extract::{BodyStream, Extension}, http::StatusCode, - response::IntoResponse, - routing::{get_service, post}, + response::{IntoResponse, Json}, + routing::{get, get_service, post}, Router, }; use flate2::read::GzDecoder; use futures_util::TryStreamExt; +use serde_json::{json, Value}; use std::collections::HashSet; use std::io::ErrorKind; use std::net::SocketAddr; @@ -37,6 +38,8 @@ async fn main() { std::fs::create_dir_all(&static_dir); let app = Router::new() + .route("/.well-known/matrix/server", get(get_matrix_server)) + .route("/.well-known/matrix/client", get(get_matrix_client)) .route( "/api/deploy", post(post_deploy).layer(RequireAuthorizationLayer::bearer(&api_key)), @@ -61,6 +64,14 @@ async fn main() { .unwrap(); } +async fn get_matrix_server() -> impl IntoResponse { + Json(json!({"m.server": "matrix.rustybever.be:443"})) +} + +async fn get_matrix_client() -> impl IntoResponse { + Json(json!({"m.homeserver": {"base_url": "https://matrix.rustybever.be"}})) +} + async fn post_deploy(Extension(data_dir): Extension, res: BodyStream) -> impl IntoResponse { // This converts a stream into something that implements AsyncRead, which we can then use to // asynchronously write the file to disk