diff --git a/example-config.yaml b/example-config.yaml index 61fa6c0..685f135 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -5,6 +5,9 @@ listen: 127.0.0.1:8504 # Mesozoa relays accepted traffic to this address pass: 127.0.0.1:8000 +# Domain to set the cookies +domain: 127.0.0.1 + # Duration (in seconds) of validity of a challenge challenge-timeout: 3600 # PoW difficulty diff --git a/src/config.rs b/src/config.rs index 4d04d49..3425ada 100644 --- a/src/config.rs +++ b/src/config.rs @@ -7,6 +7,7 @@ pub struct Config { pub pass_addr: SocketAddr, pub default_action: Action, pub challenge_timeout: u64, + pub domain: String, pub policy_groups: Vec>, } @@ -40,6 +41,10 @@ impl Config { .expect("Missing default action in config"), ) .expect("Invalid default action"), + domain: config_doc["domain"] + .as_str() + .expect("Missing domain in config") + .to_string(), policy_groups: config_doc["policy-groups"] .as_vec() .expect("Missing policies in config") diff --git a/src/main.rs b/src/main.rs index 52bc769..f04a526 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,7 +37,7 @@ macro_rules! mk_static { async fn main() { let cli: cli::Cli = argp::parse_args_or_exit(argp::DEFAULT); - let config = config::Config::from_file(&cli.config); + let config = &*mk_static!(config::Config, config::Config::from_file(&cli.config)); let mut rng = rand::thread_rng(); @@ -47,8 +47,8 @@ async fn main() { Vec, config .policy_groups - .into_iter() - .map(CompiledPolicies::new) + .iter() + .map(|policy| CompiledPolicies::new(policy)) .collect() ); @@ -197,7 +197,15 @@ async fn main() { .write_all(challenge_cookie.as_bytes()) .await .unwrap(); - client_stream.write_all(b"; domain=127.0.0.1; path=/; max-age=3600; samesite=strict\r\n").await.unwrap(); + client_stream.write_all(b"; domain=").await.unwrap(); + client_stream + .write_all(config.domain.as_bytes()) + .await + .unwrap(); + client_stream + .write_all(b"; path=/; max-age=3600; samesite=strict\r\n") + .await + .unwrap(); } client_stream.write_all(b"\r\n").await.unwrap(); client_stream diff --git a/src/policy.rs b/src/policy.rs index cec93dd..914c1cb 100644 --- a/src/policy.rs +++ b/src/policy.rs @@ -30,11 +30,11 @@ pub struct Policy { pub struct CompiledPolicies { pub first_line_regex_set: RegexSet, - pub policies: Vec, + pub policies: &'static [Policy], } impl CompiledPolicies { - pub fn new(policies: Vec) -> Self { + pub fn new(policies: &'static [Policy]) -> Self { let mut first_line_regexes = Vec::new(); for policy in policies.iter() {