Add data to reset password page
Dependencies
- [2]
WVHXYKCVAdd postgresql pools - [3]
IM5ZPD4NUpdate dependencies - [4]
OJO4B4QOAdd login form and empty handler - [5]
QEK76JYTProcess and log template render error - [6]
WW3KRXX6Add page for reset game password - [7]
BCXEUKX6Add config, static files and web server - [*]
4MZ4VIR7Initial commit - [*]
OWZ67OECAdd openssl dependency
Change contents
- edit in src/templates/reset-game-pwd.html at line 4
<meta charset="UTF-8"> - edit in src/templates/reset-game-pwd.html at line 14
{{#if last_error}}<p class="error">{{ last_error }}</p>{{/if}}<form id="reset-game-form" action="reset-game-pwd.do" method="post"><fieldset><legend>Enter data to set new game password:</legend><div><label for="login">Username:</label><input name="login" type="text" placeholder="Username" required autofocus /></div><div><label for="password">Password:</label><input name="password" type="password" placeholder="Password" required autofocus /></div><div><label for="password">Password:</label><input name="password_copy" type="password" placeholder="Copy password" required autofocus /></div><input name="token" type="hidden" value="{{ token }}"><input name="csrf" type="hidden" value="{{ csrf }}"><input name="submit" type="submit" value="Reset password"></fieldset></form> - edit in src/templates/index.html at line 4
<meta charset="UTF-8"> - edit in src/pages/reset_game_pwd.rs at line 5
use uuid::Uuid; - edit in src/pages/reset_game_pwd.rs at line 8
#[derive(serde_derive::Serialize)]struct PageData<'a> {token: Uuid,csrf: Uuid,last_error: Option<&'a str>,} - replacement in src/pages/reset_game_pwd.rs at line 17
_token: web::Path<String>,token: web::Path<String>, - replacement in src/pages/reset_game_pwd.rs at line 20
let body = match data.handlebars.render("reset-game-pwd", &()) {let token = match Uuid::parse_str(&token.into_inner()) {Ok(t) => t,Err(e) => {log::warn!("Incorrect token: {}", e);return HttpResponse::NotFound().body("Not found");}};let dbclient = match data.pool_ro.get().await {Ok(c) => c,Err(e) => {log::error!("Pool RO error {}", e);return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}};let stmt = match dbclient.prepare("select last_error from auth.reset_tokens where token = $1 and NOW() < create_ts + interval '1 day' limit 1;").await {Ok(stmt) => stmt,Err(e) => {log::error!("Pool RO statement error {}", e);return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}};let rows = match dbclient.query_opt(&stmt, &[&token]).await {Ok(rows) => rows,Err(e) => {log::error!("Pool RO query error {}", e);return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}};let row = match rows {Some(row) => row,None => {return HttpResponse::NotFound().body("Not found");}};let last_error = row.get::<_, Option<&str>>(0);let csrf = Uuid::new_v4();let body = match data.handlebars.render("reset-game-pwd",&PageData {token,csrf,last_error,},) { - edit in src/main.rs at line 19
std::env::set_var("RUST_LOG", "actix_web=debug"); - edit in public/style.css at line 5[3.754]→[3.754:880](∅→∅),[3.880]→[3.1322:1340](∅→∅),[3.1340]→[3.880:976](∅→∅),[3.880]→[3.880:976](∅→∅)
}.navi {width: 100%;top: 0;left: 0;background-color: #444;overflow: hidden;text-align: right;color: white;}.navi form {display: inline;margin-right: 0;}.navi input {display: inline; - replacement in public/style.css at line 7
.navi fieldset {display: inline;border: none;.error {color: red; - replacement in Cargo.toml at line 22
uuid = "0.8"[dependencies.uuid]version = "0.8"features = ["serde", "v4"] - edit in Cargo.lock at line 1646[2.8851][10.1412]
dependencies = ["getrandom","serde",]