use actix_identity::Identity; use actix_web::{get, http::header::LOCATION, web, HttpResponse, Responder}; use askama::Template; use serde::Deserialize; use sqlx::PgPool; use crate::utils::{ApplicationError, Customization, TemplateResponse}; use brass_db::models::PasswordReset; use super::ResetPasswordTemplate; #[derive(Template)] #[template(path = "user/forgot_password.html")] struct ForgotPasswordTemplate<'a> { webmaster_email: &'a str, } #[derive(Deserialize)] struct TokenQuery { token: Option, } #[get("/reset-password")] pub async fn get( user: Option, pool: web::Data, query: web::Query, customization: web::Data, ) -> Result { if user.is_some() { return Ok(HttpResponse::Found() .insert_header((LOCATION, "/")) .finish()); } else if let Some(token) = &query.token { if let Some(_) = PasswordReset::does_token_exist(pool.get_ref(), token).await? { let template = ResetPasswordTemplate { token, title: "Brass - Passwort zurücksetzen", endpoint: "/reset-password", new_password_label: "neues Passwort:", retype_label: "neues Passwort wiederholen:", submit_button_label: "Passwort zurücksetzen", }; return Ok(template.to_response()?); } } let template = ForgotPasswordTemplate { webmaster_email: &customization.webmaster_email, }; Ok(template.to_response()?) }