Use individual redirect url for each Mastodon domain
Dependencies
- [2]
RSIBXP3SFix redirect URL - [3]
MGRTVGLJRedirect to Mastodon domain - [4]
WXRGEQOEAdd HTTP client dependency - [5]
KDKRTAYJRegister application on Mastodon domain - [6]
MUTHALNPDetect user and domain in Mastodon fediverse - [7]
BUW254XBUpdate toml dependency - [8]
ZQIIC7C3Add field to store timestamp of joining game - [9]
QEK76JYTProcess and log template render error - [10]
GPDKRFZZUpdate dependencies - [11]
G4JCZ5F7Store try to register on Mastodon domain - [12]
BCMU6UYKStart login mastodon form - [13]
BCXEUKX6Add config, static files and web server - [14]
WM64YAQLFix warnings - [*]
FUCFD4UVAdd log in and log out support - [*]
4MZ4VIR7Initial commit - [*]
HTYEGVBUAdd data to reset password page - [*]
FJBHDA5FUpdate dependencies - [*]
K7FOI6UNUpdate dependencies and fix game link - [*]
OWZ67OECAdd openssl dependency - [*]
BKHQHXZQManage secure key for cookies - [*]
WVHXYKCVAdd postgresql pools
Change contents
- replacement in src/pages/log_in.rs at line 157
let website_redirect = format!("{}{}", website, "mastodon-redirect.html");let website_redirect = format!("{}mastodon-redirect-{}.html", website, domain); - edit in src/pages/log_in.rs at line 297
return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}};let stmt_save = match dbclient_rw.prepare("UPDATE auth.mastodon_appsSET client_id = $1, client_secret = $2WHERE client_id IS NULLAND client_secret IS NULLAND reg_sess_id = $3AND domain = $4;",).await{Ok(stmt) => stmt,Err(e) => {log::error!("Pool RW statement save error {}", e); - replacement in src/pages/log_in.rs at line 347
let (client_id, _client_secret) =if let (Some(client_id), Some(client_secret)) = (opt_client_id, opt_client_secret) {(client_id, client_secret)} else {if reg_sess_id != old_reg_sess_id {// Some one else registering same domain, try again laterlog::warn!("Mastodon domain {} registration session {} conflict with {}",domain,reg_sess_id,old_reg_sess_id);return HttpResponse::Found().append_header((header::LOCATION, "index.html")).finish();}let (client_id, _client_secret) = if let (Some(client_id), Some(client_secret)) =(opt_client_id, opt_client_secret){(client_id, client_secret)} else {if reg_sess_id != old_reg_sess_id {// Some one else registering same domain, try again laterlog::warn!("Mastodon domain {} registration session {} conflict with {}",domain,reg_sess_id,old_reg_sess_id);return HttpResponse::Found().append_header((header::LOCATION, "index.html")).finish();} - replacement in src/pages/log_in.rs at line 365
// Try to register on Mastodon domainmatch register_in_mastodon(&domain, ®_sess_id, &data).await {Ok(res) => res,Err(_) => {// Try to register on Mastodon domainmatch register_in_mastodon(&domain, ®_sess_id, &data).await {Ok(res) => {let updated = match dbclient_rw.execute(&stmt_save, &[&res.0, &res.1, ®_sess_id, &domain]).await{Ok(c) => c,Err(e) => {log::error!("Pool RW execute update error {}", e);return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}};if updated == 1 {res} else {log::error!("Pool RW execute update row error {}", updated); - replacement in src/pages/log_in.rs at line 386
};Err(_) => {return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}}}; - replacement in src/pages/log_in.rs at line 400
let website_redirect = format!("{}{}", website, "mastodon-redirect.html");let location = format!("https://{}/oauth/authorize?client_id={}&scope=read:accounts&redirect_uri={}&response_type=code", domain, client_id, website_redirect);let website_redirect = format!("{}mastodon-redirect-{}.html", website, domain);let location = format!("https://{}/oauth/authorize?client_id={}&scope=read:accounts&redirect_uri={}&response_type=code", domain, pct_str::PctString::encode(client_id.chars(), pct_str::URIReserved).as_str(), pct_str::PctString::encode(website_redirect.chars(), pct_str::URIReserved).as_str()); - edit in Cargo.toml at line 18
awc = "3.0.0" - edit in Cargo.toml at line 29
[dependencies.awc]version = "3.0"features = ["openssl"] - edit in Cargo.lock at line 160
"openssl", - edit in Cargo.lock at line 163
"tokio-openssl", - edit in Cargo.lock at line 429
"openssl", - edit in Cargo.lock at line 836
name = "foreign-types"version = "0.3.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"dependencies = ["foreign-types-shared",][[package]]name = "foreign-types-shared"version = "0.1.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"[[package]] - edit in Cargo.lock at line 1406
[[package]]name = "openssl"version = "0.10.66"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"dependencies = ["bitflags 2.6.0","cfg-if","foreign-types","libc","once_cell","openssl-macros","openssl-sys",][[package]]name = "openssl-macros"version = "0.1.1"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"dependencies = ["proc-macro2","quote","syn",] - edit in Cargo.lock at line 1434
name = "openssl-sys"version = "0.9.103"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"dependencies = ["cc","libc","pkg-config","vcpkg",][[package]] - edit in Cargo.lock at line 2088[23.8311][23.8311]
name = "tokio-openssl"version = "0.6.4"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d"dependencies = ["futures-util","openssl","openssl-sys","tokio",][[package]] - edit in Cargo.lock at line 2328
name = "vcpkg"version = "0.2.15"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"[[package]]