WIP: Serve static element web
This commit is contained in:
parent
ca724b6340
commit
ebb1ff3354
2 changed files with 41 additions and 1 deletions
|
@ -82,6 +82,9 @@ thread_local = "1.1.3"
|
||||||
# used for TURN server authentication
|
# used for TURN server authentication
|
||||||
hmac = "0.11.0"
|
hmac = "0.11.0"
|
||||||
sha-1 = "0.9.8"
|
sha-1 = "0.9.8"
|
||||||
|
# used to embed Element Web into Conduit
|
||||||
|
rust-embed="6.3.0"
|
||||||
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["conduit_bin", "backend_sqlite"]
|
default = ["conduit_bin", "backend_sqlite"]
|
||||||
|
|
39
src/main.rs
39
src/main.rs
|
@ -17,11 +17,15 @@ mod pdu;
|
||||||
mod ruma_wrapper;
|
mod ruma_wrapper;
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
|
use std::ffi::OsStr;
|
||||||
|
use std::io::Cursor;
|
||||||
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use database::Config;
|
use database::Config;
|
||||||
pub use database::Database;
|
pub use database::Database;
|
||||||
pub use error::{Error, Result};
|
pub use error::{Error, Result};
|
||||||
|
use http::StatusCode;
|
||||||
use opentelemetry::trace::{FutureExt, Tracer};
|
use opentelemetry::trace::{FutureExt, Tracer};
|
||||||
pub use pdu::PduEvent;
|
pub use pdu::PduEvent;
|
||||||
pub use rocket::State;
|
pub use rocket::State;
|
||||||
|
@ -34,8 +38,12 @@ use rocket::{
|
||||||
providers::{Env, Format, Toml},
|
providers::{Env, Format, Toml},
|
||||||
Figment,
|
Figment,
|
||||||
},
|
},
|
||||||
routes, Request,
|
get,
|
||||||
|
http::{ContentType, Status},
|
||||||
|
response, routes, Request,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use rust_embed::RustEmbed;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
use tracing_subscriber::{prelude::*, EnvFilter};
|
use tracing_subscriber::{prelude::*, EnvFilter};
|
||||||
|
|
||||||
|
@ -176,6 +184,7 @@ fn setup_rocket(config: Figment, data: Arc<RwLock<Database>>) -> rocket::Rocket<
|
||||||
server_server::claim_keys_route,
|
server_server::claim_keys_route,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
.mount("/", routes![dist])
|
||||||
.register(
|
.register(
|
||||||
"/",
|
"/",
|
||||||
catchers![
|
catchers![
|
||||||
|
@ -276,6 +285,34 @@ async fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(RustEmbed)]
|
||||||
|
#[folder = "element_web"]
|
||||||
|
struct ElementWebAsset;
|
||||||
|
|
||||||
|
#[get("/<file..>")]
|
||||||
|
fn dist<'r>(file: PathBuf) -> response::Result<'r> {
|
||||||
|
let filename = file.display().to_string();
|
||||||
|
|
||||||
|
ElementWebAsset::get(&filename).map_or_else(
|
||||||
|
|| Err(Status::NotFound),
|
||||||
|
|embedded_file| {
|
||||||
|
let ext = file
|
||||||
|
.as_path()
|
||||||
|
.extension()
|
||||||
|
.and_then(OsStr::to_str)
|
||||||
|
.ok_or_else(|| Status::new(400))?;
|
||||||
|
|
||||||
|
let content_type = ContentType::from_extension(ext).ok_or_else(|| Status::new(400))?;
|
||||||
|
|
||||||
|
let response: Result<response::Response<'r>, Status> = response::Response::build()
|
||||||
|
.header(content_type)
|
||||||
|
.sized_body(embedded_file.data.len(), Cursor::new(embedded_file.data))
|
||||||
|
.ok();
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[catch(404)]
|
#[catch(404)]
|
||||||
fn not_found_catcher(_: &Request<'_>) -> String {
|
fn not_found_catcher(_: &Request<'_>) -> String {
|
||||||
"404 Not Found".to_owned()
|
"404 Not Found".to_owned()
|
||||||
|
|
Loading…
Add table
Reference in a new issue