From fccc4064cfa00c36e08bca6a57ffa0981a913004 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sun, 24 May 2026 02:18:41 +0200 Subject: [PATCH] fix(federation): include header_url as AP banner (image) in actor JSON --- crates/adapters/postgres-federation/src/lib.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/adapters/postgres-federation/src/lib.rs b/crates/adapters/postgres-federation/src/lib.rs index 3cf529b..ebd6644 100644 --- a/crates/adapters/postgres-federation/src/lib.rs +++ b/crates/adapters/postgres-federation/src/lib.rs @@ -510,15 +510,17 @@ impl PostgresApUserRepository { username: String, bio: Option, avatar_url: Option, + header_url: Option, ) -> ApUser { let profile_url = url::Url::parse(&format!("{}/users/{}", self.base_url, username)).ok(); let avatar_url = avatar_url.and_then(|u| url::Url::parse(&u).ok()); + let banner_url = header_url.and_then(|u| url::Url::parse(&u).ok()); ApUser { id, username, bio, avatar_url, - banner_url: None, + banner_url, also_known_as: None, profile_url, attachment: vec![], @@ -535,15 +537,16 @@ impl ApUserRepository for PostgresApUserRepository { username: String, bio: Option, avatar_url: Option, + header_url: Option, } let row = sqlx::query_as::<_, Row>( - "SELECT id,username,bio,avatar_url FROM users WHERE id=$1 AND local=true", + "SELECT id,username,bio,avatar_url,header_url FROM users WHERE id=$1 AND local=true", ) .bind(id) .fetch_optional(&self.pool) .await .map_err(|e| anyhow!(e))?; - Ok(row.map(|r| self.row_to_ap_user(r.id, r.username, r.bio, r.avatar_url))) + Ok(row.map(|r| self.row_to_ap_user(r.id, r.username, r.bio, r.avatar_url, r.header_url))) } async fn find_by_username(&self, username: &str) -> Result> { @@ -553,15 +556,16 @@ impl ApUserRepository for PostgresApUserRepository { username: String, bio: Option, avatar_url: Option, + header_url: Option, } let row = sqlx::query_as::<_, Row>( - "SELECT id,username,bio,avatar_url FROM users WHERE username=$1 AND local=true", + "SELECT id,username,bio,avatar_url,header_url FROM users WHERE username=$1 AND local=true", ) .bind(username) .fetch_optional(&self.pool) .await .map_err(|e| anyhow!(e))?; - Ok(row.map(|r| self.row_to_ap_user(r.id, r.username, r.bio, r.avatar_url))) + Ok(row.map(|r| self.row_to_ap_user(r.id, r.username, r.bio, r.avatar_url, r.header_url))) } async fn count_users(&self) -> Result {