Add data to reset password page

O01eg
Jan 27, 2022, 12:27 PM
HTYEGVBU6MODOOW4UPEGSHLH4CQFYCDSFVAF2MRQW2RCDP7ITNXQC

Dependencies

  • [2] WVHXYKCV Add postgresql pools
  • [3] IM5ZPD4N Update dependencies
  • [4] OJO4B4QO Add login form and empty handler
  • [5] QEK76JYT Process and log template render error
  • [6] WW3KRXX6 Add page for reset game password
  • [7] BCXEUKX6 Add config, static files and web server
  • [*] 4MZ4VIR7 Initial commit
  • [*] OWZ67OEC Add openssl dependency

Change contents

  • edit in src/templates/reset-game-pwd.html at line 4
    [3.75]
    [3.75]
    <meta charset="UTF-8">
  • edit in src/templates/reset-game-pwd.html at line 14
    [3.384]
    [3.384]
    {{#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
    [3.5683]
    [3.58]
    <meta charset="UTF-8">
  • edit in src/pages/reset_game_pwd.rs at line 5
    [2.20]
    [3.692]
    use uuid::Uuid;
  • edit in src/pages/reset_game_pwd.rs at line 8
    [3.693]
    [2.21]
    #[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
    [2.104][2.104:135]()
    _token: web::Path<String>,
    [2.104]
    [2.135]
    token: web::Path<String>,
  • replacement in src/pages/reset_game_pwd.rs at line 20
    [2.189][2.189:258]()
    let body = match data.handlebars.render("reset-game-pwd", &()) {
    [2.189]
    [3.56]
    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
    [3.171][3.96:150]()
    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
    [3.979][3.979:1035]()
    .navi fieldset {
    display: inline;
    border: none;
    [3.979]
    [3.1035]
    .error {
    color: red;
  • replacement in Cargo.toml at line 22
    [2.2576][2.2576:2589]()
    uuid = "0.8"
    [2.2576]
    [2.2589]
    [dependencies.uuid]
    version = "0.8"
    features = ["serde", "v4"]
  • edit in Cargo.lock at line 1646
    [2.8851]
    [10.1412]
    dependencies = [
    "getrandom",
    "serde",
    ]