Store try to register on Mastodon domain

O01eg
Aug 29, 2023, 9:21 PM
G4JCZ5F77PDA3ZLXDECLYSS76BRLSDEKU7KMILS5N57ETO2VJO6QC

Dependencies

  • [2] ZQIIC7C3 Add field to store timestamp of joining game
  • [3] BCMU6UYK Start login mastodon form
  • [4] MUTHALNP Detect user and domain in Mastodon fediverse
  • [5] FUCFD4UV Add log in and log out support
  • [*] IXY6NZLM Start to use migrations files for PostgreSQL database

Change contents

  • replacement in src/pages/log_in.rs at line 8
    [3.2808][3.2808:2842]()
    use crate::{DataBaseRo, WebData};
    [3.2808]
    [3.2842]
    use crate::{DataBaseRo, DataBaseRw, WebData};
  • edit in src/pages/log_in.rs at line 148
    [3.36]
    [3.217]
    data_rw: web::Data<DataBaseRw>,
  • edit in src/pages/log_in.rs at line 202
    [3.1725]
    [2.0]
    let dbclient_rw = match data_rw.0.get().await {
    Ok(c) => c,
    Err(e) => {
    log::error!("Pool RW error {}", e);
    return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());
    }
    };
  • replacement in src/pages/log_in.rs at line 211
    [2.1][2.1:36]()
    // Try to register on Mastodon
    [2.1]
    [3.1725]
    let stmt = match dbclient_rw
    .prepare(
    "INSERT INTO auth.mastodon_apps (domain, refresh_ts) VALUES ($1, $2)
    ON CONFLICT (domain) DO UPDATE SET refresh_ts = $2
    RETURNING client_id, client_secret;",
    )
    .await
    {
    Ok(stmt) => stmt,
    Err(e) => {
    log::error!("Pool RW statement error {}", e);
    return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());
    }
    };
    let ts = chrono::Utc::now().naive_utc();
    let rows = match dbclient_rw.query_opt(&stmt, &[&domain, &ts]).await {
    Ok(rows) => rows,
    Err(e) => {
    log::error!("Pool RW query error {}", e);
    return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());
    }
    };
    let row = match rows {
    Some(row) => row,
    None => {
    log::error!("Pool RW query error");
    return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());
    }
    };
  • edit in src/pages/log_in.rs at line 241
    [3.1726]
    [3.515]
    let opt_client_id = row.get::<_, Option<&str>>(0);
    let opt_client_secret = row.get::<_, Option<&str>>(1);
    // Try to register on Mastodon domain
  • file addition: 20230829_1_mastodon-apps-table.sql (----------)
    [7.15]
    -- Create table to store client_id and client_secret for mastodon instances
    CREATE TABLE IF NOT EXISTS auth.mastodon_apps (
    domain VARCHAR(100) NOT NULL,
    refresh_ts TIMESTAMP WITHOUT TIME ZONE NOT NULL,
    client_id VARCHAR(255) NULL,
    client_secret VARCHAR(255) NULL,
    CONSTRAINT pk_domain PRIMARY KEY (domain)
    );
    GRANT SELECT, INSERT, UPDATE ON auth.mastodon_apps TO freeorion_test;