Serve static files
This commit is contained in:
		
							
								
								
									
										80
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										80
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -1542,7 +1542,9 @@ dependencies = [
 | 
			
		||||
 "lazy_static",
 | 
			
		||||
 "light-openid",
 | 
			
		||||
 "log",
 | 
			
		||||
 "mime_guess",
 | 
			
		||||
 "rand 0.9.0-beta.3",
 | 
			
		||||
 "rust-embed",
 | 
			
		||||
 "rust-s3",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "thiserror 2.0.11",
 | 
			
		||||
@@ -1577,6 +1579,16 @@ version = "0.3.17"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "mime_guess"
 | 
			
		||||
version = "2.0.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "mime",
 | 
			
		||||
 "unicase",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "minidom"
 | 
			
		||||
version = "0.16.0"
 | 
			
		||||
@@ -2060,6 +2072,40 @@ dependencies = [
 | 
			
		||||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rust-embed"
 | 
			
		||||
version = "8.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "fa66af4a4fdd5e7ebc276f115e895611a34739a9c1c01028383d612d550953c0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "rust-embed-impl",
 | 
			
		||||
 "rust-embed-utils",
 | 
			
		||||
 "walkdir",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rust-embed-impl"
 | 
			
		||||
version = "8.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6125dbc8867951125eec87294137f4e9c2c96566e61bf72c45095a7c77761478"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "rust-embed-utils",
 | 
			
		||||
 "syn",
 | 
			
		||||
 "walkdir",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rust-embed-utils"
 | 
			
		||||
version = "8.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2e5347777e9aacb56039b0e1f28785929a8a3b709e87482e7442c72e7c12529d"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "sha2",
 | 
			
		||||
 "walkdir",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rust-ini"
 | 
			
		||||
version = "0.21.1"
 | 
			
		||||
@@ -2203,6 +2249,15 @@ version = "1.0.18"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "same-file"
 | 
			
		||||
version = "1.0.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "winapi-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "schannel"
 | 
			
		||||
version = "0.1.27"
 | 
			
		||||
@@ -2676,6 +2731,12 @@ version = "1.17.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unicase"
 | 
			
		||||
version = "2.8.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "unicode-ident"
 | 
			
		||||
version = "1.0.14"
 | 
			
		||||
@@ -2751,6 +2812,16 @@ version = "0.9.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "walkdir"
 | 
			
		||||
version = "2.5.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "same-file",
 | 
			
		||||
 "winapi-util",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "want"
 | 
			
		||||
version = "0.3.1"
 | 
			
		||||
@@ -2869,6 +2940,15 @@ dependencies = [
 | 
			
		||||
 "wasm-bindgen",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winapi-util"
 | 
			
		||||
version = "0.1.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-sys 0.59.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-registry"
 | 
			
		||||
version = "0.2.0"
 | 
			
		||||
 
 | 
			
		||||
@@ -16,3 +16,5 @@ actix-session = { version = "0.10.1", features = ["redis-session"] }
 | 
			
		||||
light-openid = "1.0.2"
 | 
			
		||||
thiserror = "2.0.11"
 | 
			
		||||
rand = "0.9.0-beta.3"
 | 
			
		||||
rust-embed = "8.5.0"
 | 
			
		||||
mime_guess = "2.0.5"
 | 
			
		||||
							
								
								
									
										12199
									
								
								assets/bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12199
									
								
								assets/bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -155,3 +155,14 @@ pub struct OIDCProvider<'a> {
 | 
			
		||||
    pub configuration_url: &'a str,
 | 
			
		||||
    pub redirect_url: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod test {
 | 
			
		||||
    use crate::app_config::AppConfig;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn verify_cli() {
 | 
			
		||||
        use clap::CommandFactory;
 | 
			
		||||
        AppConfig::command().debug_assert()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -1,3 +1,4 @@
 | 
			
		||||
use actix_session::config::SessionLifecycle;
 | 
			
		||||
use actix_session::{storage::RedisSessionStore, SessionMiddleware};
 | 
			
		||||
use actix_web::cookie::Key;
 | 
			
		||||
use actix_web::{web, App, HttpServer};
 | 
			
		||||
@@ -23,11 +24,14 @@ async fn main() -> std::io::Result<()> {
 | 
			
		||||
    HttpServer::new(move || {
 | 
			
		||||
        App::new()
 | 
			
		||||
            // Add session management to your application using Redis for session state storage
 | 
			
		||||
            .wrap(SessionMiddleware::new(
 | 
			
		||||
                redis_store.clone(),
 | 
			
		||||
                secret_key.clone(),
 | 
			
		||||
            ))
 | 
			
		||||
            .wrap(
 | 
			
		||||
                SessionMiddleware::builder(redis_store.clone(), secret_key.clone())
 | 
			
		||||
                    .cookie_name("matrixgw-session".to_string())
 | 
			
		||||
                    .session_lifecycle(SessionLifecycle::BrowserSession(Default::default()))
 | 
			
		||||
                    .build(),
 | 
			
		||||
            )
 | 
			
		||||
            // Web configuration routes
 | 
			
		||||
            .route("/static/{tail:.*}", web::get().to(web_ui::static_file))
 | 
			
		||||
            .route("/", web::get().to(web_ui::home))
 | 
			
		||||
            .route("/oidc_cb", web::get().to(web_ui::oidc_cb))
 | 
			
		||||
            .route("/sign_out", web::get().to(web_ui::sign_out))
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,25 @@ use actix_session::Session;
 | 
			
		||||
use actix_web::{web, HttpResponse};
 | 
			
		||||
use light_openid::primitives::OpenIDConfig;
 | 
			
		||||
 | 
			
		||||
/// Static assets
 | 
			
		||||
#[derive(rust_embed::Embed)]
 | 
			
		||||
#[folder = "assets/"]
 | 
			
		||||
struct Assets;
 | 
			
		||||
 | 
			
		||||
/// Serve static file
 | 
			
		||||
pub async fn static_file(path: web::Path<String>) -> HttpResult {
 | 
			
		||||
    match Assets::get(path.as_ref()) {
 | 
			
		||||
        Some(content) => Ok(HttpResponse::Ok()
 | 
			
		||||
            .content_type(
 | 
			
		||||
                mime_guess::from_path(path.as_str())
 | 
			
		||||
                    .first_or_octet_stream()
 | 
			
		||||
                    .as_ref(),
 | 
			
		||||
            )
 | 
			
		||||
            .body(content.data.into_owned())),
 | 
			
		||||
        None => Ok(HttpResponse::NotFound().body("404 Not Found")),
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Main route
 | 
			
		||||
pub async fn home(session: Session) -> HttpResult {
 | 
			
		||||
    // Get user information, requesting authentication if information is missing
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user