Detect user and domain in Mastodon fediverse

O01eg
May 5, 2023, 2:35 PM
MUTHALNPGO4X2H2CGG7JBQXFYNBUC2ZSZLMFPHSKQ7LAGR3ZGSBAC

Dependencies

  • [2] BCMU6UYK Start login mastodon form
  • [*] FUCFD4UV Add log in and log out support

Change contents

  • edit in src/pages/log_in.rs at line 147
    [2.217]
    [2.217]
    data_ro: web::Data<DataBaseRo>,
  • edit in src/pages/log_in.rs at line 157
    [2.514]
    [2.514]
    let mut parts = form.login.splitn(4, '@');
    let (user, domain) = match (parts.next(), parts.next(), parts.next(), parts.next()) {
    (Some(u), Some(d), None, None) | (Some(""), Some(u), Some(d), None) => {
    (u.to_ascii_lowercase(), d.to_ascii_lowercase())
    }
    other => {
    log::error!("Unknown Mastodon address {:?}", other);
    return HttpResponse::NotFound().body("Not found");
    }
    };
  • edit in src/pages/log_in.rs at line 169
    [2.515]
    [2.515]
    let dbclient = match data_ro.0.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 player_name from auth.contacts where protocol = 'mastodon' and is_active = true and delete_ts is null and address = $1 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 address = format!("{}@{}", user, domain);
    let rows = match dbclient.query_opt(&stmt, &[&address]).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 player_name = row.get::<_, &str>(0);
    log::info!("Found player {} to login with mastodon", player_name);