Skip to content

Commit 9c12597

Browse files
committed
[IMP] add cors settings
1 parent 0988d88 commit 9c12597

3 files changed

Lines changed: 29 additions & 3 deletions

File tree

aw-server/src/endpoints/cors.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,40 @@
11
use rocket::http::Method;
22
use rocket_cors::{AllowedHeaders, AllowedOrigins};
3+
use aw_datastore::Datastore;
4+
use std::sync::Mutex;
35

46
use crate::config::AWConfig;
57

6-
pub fn cors(config: &AWConfig) -> rocket_cors::Cors {
8+
pub fn cors(config: &AWConfig, datastore_mutex: &Mutex<Datastore>) -> rocket_cors::Cors {
79
let root_url = format!("http://127.0.0.1:{}", config.port);
810
let root_url_localhost = format!("http://localhost:{}", config.port);
911
let mut allowed_exact_origins = vec![root_url, root_url_localhost];
1012
allowed_exact_origins.extend(config.cors.clone());
1113

14+
let db = datastore_mutex.lock().unwrap();
15+
if let Ok(cors_origins_str) = db.get_key_value("settings.cors_origins") {
16+
17+
let cors_origins: Vec<String> = cors_origins_str
18+
.trim_matches('"')
19+
.split(',')
20+
.map(|s| s.trim().to_string())
21+
.filter(|s| !s.is_empty())
22+
.filter(|s| {
23+
let is_valid = s.starts_with("http://")
24+
|| s.starts_with("https://")
25+
|| s.starts_with("chrome-extension://")
26+
|| s.starts_with("moz-extension://");
27+
if !is_valid {
28+
log::warn!("Ignoring invalid CORS origin: '{}'", s);
29+
}
30+
is_valid
31+
})
32+
.collect();
33+
info!("Parsed cors_origins from settings: {:?}", cors_origins);
34+
allowed_exact_origins.extend(cors_origins);
35+
}
36+
drop(db);
37+
1238
if config.testing {
1339
allowed_exact_origins.push("http://127.0.0.1:27180".to_string());
1440
allowed_exact_origins.push("http://localhost:27180".to_string());

aw-server/src/endpoints/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ pub fn build_rocket(server_state: ServerState, config: AWConfig) -> rocket::Rock
132132
"Starting aw-server-rust at {}:{}",
133133
config.address, config.port
134134
);
135-
let cors = cors::cors(&config);
135+
let cors = cors::cors(&config, &server_state.datastore);
136136
let hostcheck = hostcheck::HostCheck::new(&config);
137137
let custom_static = config.custom_static.clone();
138138

0 commit comments

Comments
 (0)