diff --git a/plume-models/src/users.rs b/plume-models/src/users.rs index 0b7cf3af..95b4d758 100644 --- a/plume-models/src/users.rs +++ b/plume-models/src/users.rs @@ -832,11 +832,7 @@ impl User { pub fn webfinger(&self, conn: &Connection) -> Result { Ok(Webfinger { - subject: format!( - "acct:{}@{}", - self.username, - self.get_instance(conn)?.public_domain - ), + subject: format!("acct:{}", self.acct_authority(conn)?), aliases: vec![self.ap_url.clone()], links: vec![ Link { @@ -874,6 +870,14 @@ impl User { }) } + pub fn acct_authority(&self, conn: &Connection) -> Result { + Ok(format!( + "{}@{}", + self.username, + self.get_instance(conn)?.public_domain + )) + } + pub fn set_avatar(&self, conn: &Connection, id: i32) -> Result<()> { diesel::update(self) .set(users::avatar_id.eq(id)) diff --git a/src/routes/user.rs b/src/routes/user.rs index 4a3b8a8f..867c6a96 100644 --- a/src/routes/user.rs +++ b/src/routes/user.rs @@ -1,7 +1,7 @@ use activitypub::collection::{OrderedCollection, OrderedCollectionPage}; use diesel::SaveChangesDsl; use rocket::{ - http::{ContentType, Cookies}, + http::{uri::Uri, ContentType, Cookies}, request::LenientForm, response::{status, Content, Flash, Redirect}, }; @@ -137,11 +137,7 @@ pub fn follow_not_connected( .and_then(|uri| { Some(uri.replace( "{uri}", - &format!( - "{}@{}", - target.fqn, - target.get_instance(&conn).ok()?.public_domain - ), + &Uri::percent_encode(&target.acct_authority(&conn).ok()?), )) }) {