V47NQLKFHWLZMRGEVV2K6IBBKRSPHR672ATFGARCCM7Z7LJZKQHAC
RSIBXP3SKUXZ7BVRC5OJZTNGCZSWNFHF74OZM5OOWKU52GHURMHQC
MGRTVGLJX4D5YAJGKTVETEKYNLTQZRSV7EJSFWFTWQOTYXTCA2XAC
KDKRTAYJBTOXY75T2U5B236L3SEHC7RPCDNYD2H3JZ3ZNQD3NSEAC
FUCFD4UVRUXDHG24MYEHF2E5E23BIFVKTRGLNBPBVKFLONVSMHTAC
G4JCZ5F77PDA3ZLXDECLYSS76BRLSDEKU7KMILS5N57ETO2VJO6QC
MUTHALNPGO4X2H2CGG7JBQXFYNBUC2ZSZLMFPHSKQ7LAGR3ZGSBAC
WXRGEQOELNXAKIG2CT7G6OZWTFLNWPISLWHZ5B76HFUNNHYOFCCQC
4MZ4VIR7FU3PQ3WKJI6TJIKYOIIBODFEPKLMQ32S4AKPZSDFO6AQC
HTYEGVBU6MODOOW4UPEGSHLH4CQFYCDSFVAF2MRQW2RCDP7ITNXQC
FJBHDA5FYN4EE2ZRJCS4AKGIILJ6VR3OE423IQA5EKJ37CXJQLMAC
BCXEUKX6RVE4UQE46ITSQY2NXYK3MJT7HHL7CJOM7T4OOOCADMIAC
K7FOI6UNZ4UO2WEZ5DO4FHHVJDEJGYV5ZBWUHJZA7DWZ52TODBNAC
OWZ67OECVVLVFN2Z7XWITYBU6YUIU42E3SIJDCRKF7M4XDX5XKHAC
BKHQHXZQDFC6SSIQ3XBNIBYQJBD3EN6VFKK7VBWY4BOT2H2ZRQAAC
WVHXYKCVPKAFVMXBEMD3IHG54RKOIDSOCVNR3OIPEZQG36IGYJZQC
return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());
}
};
let stmt_save = match dbclient_rw
.prepare(
"UPDATE auth.mastodon_apps
SET client_id = $1
, client_secret = $2
WHERE client_id IS NULL
AND client_secret IS NULL
AND reg_sess_id = $3
AND domain = $4;",
)
.await
{
Ok(stmt) => stmt,
Err(e) => {
log::error!("Pool RW statement save error {}", e);
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 later
log::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 later
log::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();
}
// Try to register on Mastodon domain
match register_in_mastodon(&domain, ®_sess_id, &data).await {
Ok(res) => res,
Err(_) => {
// Try to register on Mastodon domain
match 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);
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());
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]]
[[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",
]