1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Implement federated login; #123

This commit is contained in:
NG (Graham)
2026-07-05 15:45:36 -04:00
committed by NGnius
parent 6601c188d0
commit 2adf8249bb
35 changed files with 1466 additions and 121 deletions

View File

@@ -3,9 +3,10 @@ use serde::{Serialize, Deserialize};
impl super::account_json::UserData {
async fn listen_on_websocket<D: serde::de::DeserializeOwned>(&self, server_name: &str) -> Result<super::IntercomListener<D>, reqwest_websocket::Error> {
use reqwest_websocket::Upgrade;
let token = generate_token(format!("{}/{}", server_name, self.account.public_id).as_bytes(), &self.secret);
let url_encoded_pub_id = urlencoding::encode(&self.account.public_id);
let token = generate_token(format!("{}/{}", server_name, url_encoded_pub_id).as_bytes(), &self.secret);
let auth_header_val = format!("Internal {}", token);
let url = format!("{}/intercom/{}/{}", self.intercom, server_name, self.account.public_id);
let url = format!("{}/intercom/{}/{}", self.intercom, server_name, url_encoded_pub_id);
log::debug!("Listening on websocket {}", url);
let websocket = self.http_client.get(url)
.header("Authorization", auth_header_val)
@@ -21,7 +22,7 @@ impl super::account_json::UserData {
}
async fn post_to_intercom<D: serde::Serialize>(&self, data: &D, server_name: &str, operation: &str) -> Result<(), reqwest::Error> {
let path = format!("{}/{}/{}", server_name, self.account.public_id, operation);
let path = format!("{}/{}/{}", server_name, urlencoding::encode(&self.account.public_id), operation);
let token = generate_token(path.as_bytes(), &self.secret);
let auth_header_val = format!("Internal {}", token);
let url = format!("{}/intercom/{}", self.auth, path);
@@ -55,9 +56,10 @@ impl super::account_json::UserData {
impl super::IntercomUser for super::account_json::UserData {
async fn save_custom_avatar(&self, image: Vec<u8>) -> Result<(), polariton_server::operations::SimpleOpError> {
// seems to always be jpg
let token = generate_token(self.account.public_id.as_bytes(), &self.secret);
let url_encoded_pub_id = urlencoding::encode(&self.account.public_id);
let token = generate_token(url_encoded_pub_id.as_bytes(), &self.secret);
let auth_header_val = format!("Internal {}", token);
let url = format!("{}/customavatar/Live/{}", self.cdn, self.account.public_id);
let url = format!("{}/customavatar/Live/{}", self.cdn, url_encoded_pub_id);
if let Err(e) = self.http_client.post(url)
.header("Authorization", auth_header_val)
.body(image)