KDKRTAYJBTOXY75T2U5B236L3SEHC7RPCDNYD2H3JZ3ZNQD3NSEAC BUW254XBZOK7HCVNTQQI37GD2UMUITQFM44ECEJ7PGXSOWUY4PUQC WM64YAQLNOL5OXLEXCCF2RZKF7BBGLJRDXE2U7X5CXJH7BJNS4SQC BCMU6UYKFTBIYNJAZVGIQ45BXLTCL7GLW4O4HDMUTCRRWYH2ZQKAC FUCFD4UVRUXDHG24MYEHF2E5E23BIFVKTRGLNBPBVKFLONVSMHTAC G4JCZ5F77PDA3ZLXDECLYSS76BRLSDEKU7KMILS5N57ETO2VJO6QC MUTHALNPGO4X2H2CGG7JBQXFYNBUC2ZSZLMFPHSKQ7LAGR3ZGSBAC IXY6NZLMLIDWQFPI2FBNF2PYJCM2TLNQIZKFUDLTTARHFWFQYCGQC BCXEUKX6RVE4UQE46ITSQY2NXYK3MJT7HHL7CJOM7T4OOOCADMIAC 4MZ4VIR7FU3PQ3WKJI6TJIKYOIIBODFEPKLMQ32S4AKPZSDFO6AQC FVYTV3D2AJ5SHXNN3HELIWSI5G7CR3WP45D5J6HMT5WOVKALQDKQC let client = awc::Client::default();let website = format!("{}://{}/", data.base_proto, data.base_domain);match client.post(format!("https://{}/api/v1/apps", domain)).content_type("application/x-www-form-urlencoded").send_body(format!("client_name=FreeOrion%20Test%20Web&redirect_uris={}&scopes=read:accounts&website={}",pct_str::PctString::encode(website.chars(), pct_str::URIReserved).as_str(),pct_str::PctString::encode(website.chars(), pct_str::URIReserved).as_str())).await{Ok(mut resp) => match resp.json::<serde_json::Value>().await {Ok(serde_json::Value::Object(resp_value_obj)) => {let client_id_value = resp_value_obj.get("client_id");let client_secret_value = resp_value_obj.get("client_secret");if let (Some(serde_json::Value::String(client_id)),Some(serde_json::Value::String(client_secret)),) = (client_id_value, client_secret_value){Ok((client_id.clone(), client_secret.clone()))} else {log::error!("Mastodon domain {} registration session {} missing fields JSON {:?}",domain,reg_sess_id,resp_value_obj);Err(())}}Ok(resp_value) => {log::error!("Mastodon domain {} registration session {} non-object JSON {:?}",domain,reg_sess_id,resp_value);Err(())}Err(err) => {log::error!("Mastodon domain {} registration session {} failed JSON {:?}",domain,reg_sess_id,err);Err(())}},Err(err) => {log::error!("Mastodon domain {} registration session {} failed {:?}",domain,reg_sess_id,err);Err(())}}}
let rows = match dbclient_rw.query_opt(&stmt, &[&domain, &ts]).await {
let reg_sess_id = Uuid::new_v4();log::info!("Mastodon domain {} registration session {} created",domain,reg_sess_id);let rows = match dbclient_rw.query_opt(&stmt, &[&domain, &ts, ®_sess_id]).await{
let _opt_client_id = row.get::<_, Option<&str>>(0);let _opt_client_secret = row.get::<_, Option<&str>>(1);
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();}// Try to register on Mastodon domainmatch register_in_mastodon(&domain, ®_sess_id, &data).await {Ok(res) => res,Err(_) => {return HttpResponse::ServiceUnavailable().body(actix_web::body::None::new());}}};
-- Create field to store registartion session on MastodonDO $$BEGINIF NOT EXISTS (SELECT 1 FROM pg_class cINNER JOIN pg_namespace n ON n.oid = c.relnamespaceINNER JOIN pg_attribute a ON a.attrelid = c.oidWHERE c.relname = 'mastodon_apps' AND n.nspname = 'auth' AND a.attname = 'reg_sess_id') THENALTER TABLE auth.mastodon_apps ADD COLUMN reg_sess_id UUID NOT NULL;END IF;END$$;