use std::time::Duration;
#[derive(Debug, Clone)]
pub struct RouteConfig {
pub login_url: String,
pub logout_url: String,
pub admin_url: String,
pub audit_url: String,
pub static_url: String,
pub brand_url: String,
pub basic_auth_realm: String,
pub tenant_session_ttl: Duration,
pub operator_session_ttl: Duration,
pub impersonation_ttl: Duration,
}
impl Default for RouteConfig {
fn default() -> Self {
Self {
login_url: "/__login".to_owned(),
logout_url: "/__logout".to_owned(),
admin_url: "/__admin".to_owned(),
audit_url: "/__audit".to_owned(),
static_url: "/__static__".to_owned(),
brand_url: "/__brand__".to_owned(),
basic_auth_realm: "Rustango Admin".to_owned(),
tenant_session_ttl: Duration::from_secs(7 * 24 * 60 * 60),
operator_session_ttl: Duration::from_secs(7 * 24 * 60 * 60),
impersonation_ttl: Duration::from_secs(60 * 60),
}
}
}
impl RouteConfig {
#[must_use]
pub fn friendly() -> Self {
Self {
login_url: "/login".to_owned(),
logout_url: "/logout".to_owned(),
admin_url: "/admin".to_owned(),
audit_url: "/audit".to_owned(),
static_url: "/_static".to_owned(),
brand_url: "/_brand".to_owned(),
..Default::default()
}
}
#[must_use]
pub fn audit_full_url(&self) -> String {
format!("{}{}", self.admin_url, self.audit_url)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_match_legacy_prefixes() {
let r = RouteConfig::default();
assert_eq!(r.login_url, "/__login");
assert_eq!(r.logout_url, "/__logout");
assert_eq!(r.admin_url, "/__admin");
assert_eq!(r.audit_url, "/__audit");
assert_eq!(r.static_url, "/__static__");
assert_eq!(r.brand_url, "/__brand__");
assert_eq!(r.basic_auth_realm, "Rustango Admin");
}
#[test]
fn friendly_preset_drops_underscores() {
let r = RouteConfig::friendly();
assert_eq!(r.login_url, "/login");
assert_eq!(r.admin_url, "/admin");
assert_eq!(r.audit_url, "/audit");
assert_eq!(r.basic_auth_realm, "Rustango Admin");
}
#[test]
fn audit_full_url_joins_prefixes() {
assert_eq!(RouteConfig::default().audit_full_url(), "/__admin/__audit");
assert_eq!(RouteConfig::friendly().audit_full_url(), "/admin/audit");
}
#[test]
fn ttls_have_sensible_defaults() {
let r = RouteConfig::default();
assert_eq!(r.tenant_session_ttl.as_secs(), 7 * 24 * 60 * 60);
assert_eq!(r.operator_session_ttl.as_secs(), 7 * 24 * 60 * 60);
assert_eq!(r.impersonation_ttl.as_secs(), 60 * 60);
}
}