/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ // use anyhow::anyhow; // use jellyclient::{Instance, Session}; // use jellycommon::{config::FederationAccount, user::CreateSessionParams}; // use std::{collections::HashMap, sync::Arc}; // use tokio::sync::RwLock; // pub struct Federation { // instances: HashMap, // sessions: RwLock>>, // } // impl Federation { // pub fn initialize() -> Self { // let instances = SECRETS // .federation // .iter() // .map(|(k, FederationAccount { tls, .. })| { // (k.to_owned(), Instance::new(k.to_owned(), *tls)) // }) // .collect::>(); // Self { // instances, // sessions: Default::default(), // } // } // pub fn get_instance(&self, host: &String) -> anyhow::Result<&Instance> { // self.instances.get(host).ok_or(anyhow!("unknown instance")) // } // pub async fn get_session(&self, host: &String) -> anyhow::Result> { // let mut w = self.sessions.write().await; // if let Some(s) = w.get(host) { // Ok(s.to_owned()) // } else { // let FederationAccount { // username, password, .. // } = SECRETS // .federation // .get(host) // .ok_or(anyhow!("no credentials of the remote server"))?; // let s = Arc::new( // self.get_instance(host)? // .to_owned() // .login(CreateSessionParams { // username: username.to_owned(), // password: password.to_owned(), // expire: None, // drop_permissions: None, // }) // .await?, // ); // w.insert(host.to_owned(), s.clone()); // Ok(s) // } // } // }