use crate::types::SojuBouncer; pub fn gamja_nginx_config() -> String { r#"server { listen 8081; root /usr/share/nginx/html; index index.html; location /socket { proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 600s; proxy_send_timeout 600s; } location / { try_files $uri $uri/ /index.html; } }"# .to_string() } pub fn gamja_config_json(bouncer: &SojuBouncer) -> String { let oauth2_url = bouncer .spec .auth .as_ref() .map(|a| a.oauth2_url.as_str()) .unwrap_or("https://auth.irc.now/realms/irc-now"); serde_json::json!({ "server": { "url": "/socket", "auth": "oauth2", "nick": "*" }, "oauth2": { "url": oauth2_url, "client_id": "chat", "scope": "openid" } }) .to_string() } #[cfg(test)] mod tests { use super::*; use crate::testutil::test_bouncer; use crate::types::AuthSpec; #[test] fn nginx_config_listens_on_8081() { let config = gamja_nginx_config(); assert!(config.contains("listen 8081")); } #[test] fn nginx_config_proxies_socket() { let config = gamja_nginx_config(); assert!(config.contains("proxy_pass http://localhost:8080")); } #[test] fn nginx_config_has_websocket_upgrade() { let config = gamja_nginx_config(); assert!(config.contains("Upgrade $http_upgrade")); assert!(config.contains("Connection \"upgrade\"")); } #[test] fn nginx_config_has_timeouts() { let config = gamja_nginx_config(); assert!(config.contains("proxy_read_timeout 600s")); assert!(config.contains("proxy_send_timeout 600s")); } #[test] fn config_json_uses_auth_spec_url() { let mut bouncer = test_bouncer(); bouncer.spec.auth = Some(AuthSpec { oauth2_url: "https://auth.example.com/realms/test".to_string(), secret_ref: None, }); let json = gamja_config_json(&bouncer); let parsed: serde_json::Value = serde_json::from_str(&json).unwrap(); assert_eq!( parsed["oauth2"]["url"], "https://auth.example.com/realms/test" ); } #[test] fn config_json_falls_back_to_default_auth_url() { let bouncer = test_bouncer(); let json = gamja_config_json(&bouncer); let parsed: serde_json::Value = serde_json::from_str(&json).unwrap(); assert_eq!( parsed["oauth2"]["url"], "https://auth.irc.now/realms/irc-now" ); } #[test] fn config_json_has_correct_server_fields() { let bouncer = test_bouncer(); let json = gamja_config_json(&bouncer); let parsed: serde_json::Value = serde_json::from_str(&json).unwrap(); assert_eq!(parsed["server"]["url"], "/socket"); assert_eq!(parsed["server"]["auth"], "oauth2"); assert_eq!(parsed["server"]["nick"], "*"); } #[test] fn config_json_has_correct_oauth2_fields() { let bouncer = test_bouncer(); let json = gamja_config_json(&bouncer); let parsed: serde_json::Value = serde_json::from_str(&json).unwrap(); assert_eq!(parsed["oauth2"]["client_id"], "chat"); assert_eq!(parsed["oauth2"]["scope"], "openid"); } }