diff --git a/Cargo.lock b/Cargo.lock index af860d44..f967b622 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -60,6 +60,20 @@ dependencies = [ "trust-dns-resolver", ] +[[package]] +name = "actix-cors" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36b133d8026a9f209a9aeeeacd028e7451bcca975f592881b305d37983f303d7" +dependencies = [ + "actix-web", + "derive_more", + "futures-util", + "log", + "once_cell", + "tinyvec", +] + [[package]] name = "actix-http" version = "2.2.0" @@ -1279,6 +1293,7 @@ name = "guard" version = "0.1.0" dependencies = [ "actix", + "actix-cors", "actix-http", "actix-identity", "actix-rt", diff --git a/Cargo.toml b/Cargo.toml index 16d8c431..5d72a22c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,6 +27,9 @@ actix = "0.10" actix-identity = "0.3" actix-http = "2.2" actix-rt = "1" +actix-cors= "0.5.4" + + mime_guess = "2.0.3" rust-embed = "5.9.0" cache-buster = { version = "0.1", git = "https://github.com/realaravinth/cache-buster" } diff --git a/config/default.toml b/config/default.toml index 2409e931..0b88e6a4 100644 --- a/config/default.toml +++ b/config/default.toml @@ -28,9 +28,7 @@ ip= "0.0.0.0" # enter your hostname, eg: example.com domain = "localhost" allow_registration = true -# directory containing static files -static_files_dir = "./frontend/dist" - +#url_prefix = "" [pow] # Please set a unique value, your mCaptcha instance's security depends on this being diff --git a/src/api/v1/pow/mod.rs b/src/api/v1/pow/mod.rs index 20cf2294..e1e60e03 100644 --- a/src/api/v1/pow/mod.rs +++ b/src/api/v1/pow/mod.rs @@ -15,6 +15,9 @@ * along with this program. If not, see . */ +//use actix_cors::Cors; +//use lazy_static::lazy_static; + pub mod get_config; pub mod verify_pow; pub mod verify_token; @@ -22,3 +25,12 @@ pub mod verify_token; pub use super::mcaptcha::duration::GetDurationResp; pub use super::mcaptcha::is_authenticated; pub use super::mcaptcha::levels::I32Levels; + +//lazy_static! { +// pub static ref CORS: Cors = Cors::default() +// .allow_any_origin() +// .allowed_methods(vec!["POST"]) +// .allow_any_header() +// .max_age(0) +// .send_wildcard(); +//} diff --git a/src/settings.rs b/src/settings.rs index 9683b51e..c90a4a3a 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -29,6 +29,7 @@ pub struct Server { pub domain: String, pub cookie_secret: String, pub ip: String, + pub url_prefix: Option, } #[derive(Debug, Clone, Deserialize)] @@ -42,6 +43,15 @@ impl Server { pub fn get_ip(&self) -> String { format!("{}:{}", self.ip, self.port) } + + fn check_url_prefix(&mut self) { + if let Some(prefix) = self.url_prefix.clone() { + self.url_prefix = Some(prefix.trim().into()); + if prefix.trim().is_empty() { + panic!("URL prefix is set to empty string") + } + } + } } #[derive(Debug, Clone, Deserialize)] @@ -162,3 +172,24 @@ fn set_database_url(s: &mut Config) { ) .expect("Couldn't set databse url"); } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn url_prefix_test() { + let mut settings = Settings::new().unwrap(); + assert!(settings.server.url_prefix.is_none()); + settings.server.url_prefix = Some("test".into()); + settings.server.check_url_prefix(); + } + + #[test] + #[should_panic] + fn url_prefix_panic_test() { + let mut settings = Settings::new().unwrap(); + settings.server.url_prefix = Some(" ".into()); + settings.server.check_url_prefix(); + } +}