aboutsummaryrefslogtreecommitdiff
path: root/server/src/federation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/federation.rs')
-rw-r--r--server/src/federation.rs61
1 files changed, 0 insertions, 61 deletions
diff --git a/server/src/federation.rs b/server/src/federation.rs
deleted file mode 100644
index eb2a1ac..0000000
--- a/server/src/federation.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- 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) 2023 metamuffin <metamuffin.org>
-*/
-use anyhow::anyhow;
-use jellybase::CONF;
-use jellyclient::{Instance, LoginDetails, Session};
-use std::{collections::HashMap, sync::Arc};
-use tokio::sync::RwLock;
-
-pub struct Federation {
- instances: HashMap<String, Instance>,
- sessions: RwLock<HashMap<String, Arc<Session>>>,
-}
-
-impl Federation {
- pub fn initialize() -> Self {
- let instances = CONF
- .remote_credentials
- .iter()
- .map(|(k, (_, _, tls))| (k.to_owned(), Instance::new(k.to_owned(), *tls)))
- .collect::<HashMap<_, _>>();
-
- Self {
- instances,
- sessions: Default::default(),
- }
- }
-
- pub fn get_instance(&self, host: &String) -> anyhow::Result<&Instance> {
- Ok(self
- .instances
- .get(host)
- .ok_or(anyhow!("unknown instance"))?)
- }
- pub async fn get_session(&self, host: &String) -> anyhow::Result<Arc<Session>> {
- let mut w = self.sessions.write().await;
- if let Some(s) = w.get(host) {
- Ok(s.to_owned())
- } else {
- let (username, password, _) = CONF
- .remote_credentials
- .get(host)
- .ok_or(anyhow!("no credentials of the remote server"))?;
- let s = Arc::new(
- self.get_instance(host)?
- .to_owned()
- .login(LoginDetails {
- username: username.to_owned(),
- password: password.to_owned(),
- expire: None,
- drop_permissions: None,
- })
- .await?,
- );
- w.insert(host.to_owned(), s.clone());
- Ok(s)
- }
- }
-}