diff --git a/plume-models/src/instance.rs b/plume-models/src/instance.rs index f77447d5..290975dc 100644 --- a/plume-models/src/instance.rs +++ b/plume-models/src/instance.rs @@ -42,7 +42,6 @@ pub struct NewInstance { lazy_static! { static ref LOCAL_INSTANCE: RwLock> = RwLock::new(None); - static ref INSTANCE_USER: RwLock> = RwLock::new(None); } impl Instance { @@ -57,15 +56,6 @@ impl Instance { .clone() .ok_or(Error::NotFound) } - - pub fn set_local_user(u: User) { - INSTANCE_USER.write().unwrap().replace(u); - } - - pub fn get_local_user() -> Result { - INSTANCE_USER.read().unwrap().clone().ok_or(Error::NotFound) - } - pub fn get_local_uncached(conn: &Connection) -> Result { instances::table .filter(instances::local.eq(true)) diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index d087ef8c..615f6767 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -211,6 +211,13 @@ impl User { } } + pub fn find_first_local(conn: &Connection) -> Result { + users::table + .filter(users::instance_id.eq(Instance::get_local()?.id)) + .first(&*conn) + .map_err(|_| Error::NotFound) + } + fn fetch_from_webfinger(c: &PlumeRocket, acct: &str) -> Result { let link = resolve(acct.to_owned(), true)? .links @@ -229,7 +236,7 @@ impl User { .ok_or(Error::Webfinger) } - fn fetch(url: &str) -> Result { + fn fetch(url: &str, lu: User) -> Result { let mut headers = plume_common::activity_pub::request::headers(); headers.insert( ACCEPT, @@ -240,7 +247,6 @@ impl User { .join(", "), )?, ); - let lu = Instance::get_local_user()?; let mut res = ClientBuilder::new() .connect_timeout(Some(std::time::Duration::from_secs(5))) .build()? @@ -261,11 +267,12 @@ impl User { } pub fn fetch_from_url(c: &PlumeRocket, url: &str) -> Result { - User::fetch(url).and_then(|json| User::from_activity(c, json)) + User::fetch(url, User::find_first_local(&*c.conn)?) + .and_then(|json| User::from_activity(c, json)) } pub fn refetch(&self, conn: &Connection) -> Result<()> { - User::fetch(&self.ap_url.clone()).and_then(|json| { + User::fetch(&self.ap_url.clone(), User::find_first_local(conn)?).and_then(|json| { let avatar = Media::save_remote( conn, json.object