42 lines
1.0 KiB
Rust
42 lines
1.0 KiB
Rust
use actix_identity::Identity;
|
|
use actix_web::{get, http::header::LOCATION, web, HttpResponse, Responder};
|
|
use askama::Template;
|
|
use askama_actix::TemplateToResponse;
|
|
use serde::Deserialize;
|
|
|
|
#[derive(Template)]
|
|
#[template(path = "user/forgot_password.html")]
|
|
struct ForgotPasswordTemplate {}
|
|
|
|
#[derive(Template)]
|
|
#[template(path = "user/reset_password.html")]
|
|
struct ResetPasswordTemplate {
|
|
token: String
|
|
}
|
|
|
|
#[derive(Deserialize)]
|
|
struct TokenQuery {
|
|
token: Option<String>
|
|
}
|
|
|
|
#[get("/reset-password")]
|
|
pub async fn get(user: Option<Identity>, query: web::Query<TokenQuery>) -> impl Responder {
|
|
if let Some(_) = user {
|
|
return HttpResponse::Found()
|
|
.insert_header((LOCATION, "/"))
|
|
.finish();
|
|
} else if let Some(token) = &query.token {
|
|
let token_exists = true;
|
|
|
|
if token_exists {
|
|
let template = ResetPasswordTemplate { token: token.to_string() };
|
|
|
|
return template.to_response();
|
|
}
|
|
}
|
|
|
|
let template = ForgotPasswordTemplate {};
|
|
|
|
return template.to_response();
|
|
}
|