Skip to content
Clone
d5939db
43 lines 1.4 KB Rust
use time::Duration;
use axum_extra::extract::cookie::Cookie;
use axum_extra::extract::cookie::CookieJar;
use axum_extra::extract::cookie::SameSite;
use crate::config::AuthConfig;
use crate::features::TempKey;
pub(crate) fn temp_key_to_cookie(config: &AuthConfig, key: &TempKey) -> Cookie<'static> {
let mut builder = Cookie::build((key.name.clone(), key.value.clone()))
.http_only(key.http_only)
.secure(key.secure)
.max_age(Duration::seconds(key.ttl_seconds as i64))
.path(key.path.clone().unwrap_or_else(|| "/".to_string()))
.same_site(parse_same_site(&key.same_site, &config.cookie_same_site));
if let Some(domain) = key.domain.clone().or_else(|| config.cookie_domain.clone()) {
builder = builder.domain(domain);
}
builder.build()
}
fn parse_same_site(cookie_specific: &str, fallback: &str) -> SameSite {
let raw = if cookie_specific.is_empty() {
fallback
} else {
cookie_specific
};
match raw.to_ascii_lowercase().as_str() {
"strict" => SameSite::Strict,
"lax" => SameSite::Lax,
"none" => SameSite::None,
_ => SameSite::Strict,
}
}
pub(crate) fn read_cookie_value(jar: &CookieJar, name: &str) -> Option<String> {
jar.get(name).map(|c| c.value().to_string())
}
pub(crate) fn remove_cookie(jar: CookieJar, name: &str) -> CookieJar {
jar.remove(Cookie::from(name.to_string()))
}