Compare commits

...

1 Commits

Author SHA1 Message Date
Jonas Zohren b734c1aff5
feat: Add option to serve .well-known requests for standalone usage (wip) 4 years ago
  1. 5
      src/database.rs
  2. 4
      src/database/globals.rs
  3. 14
      src/main.rs
  4. 27
      src/well_known.rs

5
src/database.rs

@ -74,6 +74,11 @@ pub struct Config { @@ -74,6 +74,11 @@ pub struct Config {
trusted_servers: Vec<Box<ServerName>>,
#[serde(default = "default_log")]
pub log: String,
/// If enabled, Conduit will serve /.wellknown/matrix files that point to the configured server_name.
/// This should make it easier, if you only host Conduit on the same domain as the server_name.
/// E.g. setting server_name: "matrix.example.com" -> other servers are directed to "https://matrix.example.com:443"
#[serde(default = "false_fn")]
pub serve_wellknown: bool,
#[serde(flatten)]
catchall: BTreeMap<String, IgnoredAny>,

4
src/database/globals.rs

@ -226,6 +226,10 @@ impl Globals { @@ -226,6 +226,10 @@ impl Globals {
self.jwt_decoding_key.as_ref()
}
pub fn serve_wellknown(&self) -> bool {
self.config.serve_wellknown
}
/// TODO: the key valid until timestamp is only honored in room version > 4
/// Remove the outdated keys and insert the new ones.
///

14
src/main.rs

@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
pub mod appservice_server;
pub mod client_server;
pub mod server_server;
pub mod well_known;
mod database;
mod error;
@ -40,8 +41,17 @@ use tokio::sync::RwLock; @@ -40,8 +41,17 @@ use tokio::sync::RwLock;
use tracing_subscriber::{prelude::*, EnvFilter};
fn setup_rocket(config: Figment, data: Arc<RwLock<Database>>) -> rocket::Rocket<rocket::Build> {
rocket::custom(config)
.manage(data)
let rocket_builder = rocket::custom(config).manage(data);
// If configured, serve .well-known/matrix files
if data.lock().globals.serve_wellknown() {
rocket_builder.mount(
"/",
routes![well_known::well_known_server, well_known::well_known_client,],
);
}
rocket_builder
.mount(
"/",
routes![

27
src/well_known.rs

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
#[cfg(feature = "conduit_bin")]
use rocket::get;
use rocket::response::content;
use crate::database::DatabaseGuard;
//use serde::Serialize;
//#[derive(Serialize)]
//pub struct WellKnownServerInfo {
// m_server: String,
//}
#[cfg_attr(feature = "conduit_bin", get("/.well-known/matrix/server"))]
#[tracing::instrument(skip(db))]
pub fn well_known_server(db: DatabaseGuard) -> content::Json<String> {
// Pull the server_name from config
let server_name = db.globals.server_name().clone();
content::Json(format!("{{\"m.server\": \"{}:443\"}}", server_name))
}
#[cfg_attr(feature = "conduit_bin", get("/.well-known/matrix/client"))]
#[tracing::instrument(skip(db))]
pub fn well_known_client(db: DatabaseGuard) -> content::Json<String> {
// Pull the server_name from config
let server_name = db.globals.server_name().clone();
content::Json(format!("{{\"m.homeserver\": {{ \"base_url\": \"https://{}\"}}}}", server_name))
}
Loading…
Cancel
Save