use actix_web::HttpRequest; #[derive(serde::Serialize, serde::Deserialize, Debug, Eq, PartialEq, Clone)] pub struct LoginRedirect(String); impl LoginRedirect { pub fn from_req(req: &HttpRequest) -> Self { Self(req.uri().to_string()) } pub fn get(&self) -> &str { match self.0.starts_with('/') && !self.0.starts_with("//") { true => self.0.as_str(), false => "/", } } pub fn get_encoded(&self) -> String { urlencoding::encode(self.get()).to_string() } } impl Default for LoginRedirect { fn default() -> Self { Self("/".to_string()) } } /// Get the URL for 2FA authentication pub fn get_2fa_url(redir: &LoginRedirect, force_2fa: bool) -> String { format!( "/2fa_auth?redirect={}&force_2fa={force_2fa}", redir.get_encoded() ) }