feat: add PATCH /federation/me/also-known-as endpoint
Adds alsoKnownAs column to users table (migration 013), reads it in the AP actor JSON, and exposes PATCH /federation/me/also-known-as to set or clear it. Required pre-condition for broadcast_move.
This commit is contained in:
@@ -546,6 +546,7 @@ impl PostgresApUserRepository {
|
||||
bio: Option<String>,
|
||||
avatar_url: Option<String>,
|
||||
header_url: Option<String>,
|
||||
also_known_as: Option<String>,
|
||||
) -> 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());
|
||||
@@ -556,7 +557,7 @@ impl PostgresApUserRepository {
|
||||
bio,
|
||||
avatar_url,
|
||||
banner_url,
|
||||
also_known_as: None,
|
||||
also_known_as,
|
||||
profile_url,
|
||||
attachment: vec![],
|
||||
}
|
||||
@@ -573,15 +574,25 @@ impl ApUserRepository for PostgresApUserRepository {
|
||||
bio: Option<String>,
|
||||
avatar_url: Option<String>,
|
||||
header_url: Option<String>,
|
||||
also_known_as: Option<String>,
|
||||
}
|
||||
let row = sqlx::query_as::<_, Row>(
|
||||
"SELECT id,username,bio,avatar_url,header_url FROM users WHERE id=$1 AND local=true",
|
||||
"SELECT id,username,bio,avatar_url,header_url,also_known_as 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, r.header_url)))
|
||||
Ok(row.map(|r| {
|
||||
self.row_to_ap_user(
|
||||
r.id,
|
||||
r.username,
|
||||
r.bio,
|
||||
r.avatar_url,
|
||||
r.header_url,
|
||||
r.also_known_as,
|
||||
)
|
||||
}))
|
||||
}
|
||||
|
||||
async fn find_by_username(&self, username: &str) -> Result<Option<ApUser>> {
|
||||
@@ -592,15 +603,25 @@ impl ApUserRepository for PostgresApUserRepository {
|
||||
bio: Option<String>,
|
||||
avatar_url: Option<String>,
|
||||
header_url: Option<String>,
|
||||
also_known_as: Option<String>,
|
||||
}
|
||||
let row = sqlx::query_as::<_, Row>(
|
||||
"SELECT id,username,bio,avatar_url,header_url FROM users WHERE username=$1 AND local=true",
|
||||
"SELECT id,username,bio,avatar_url,header_url,also_known_as 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, r.header_url)))
|
||||
Ok(row.map(|r| {
|
||||
self.row_to_ap_user(
|
||||
r.id,
|
||||
r.username,
|
||||
r.bio,
|
||||
r.avatar_url,
|
||||
r.header_url,
|
||||
r.also_known_as,
|
||||
)
|
||||
}))
|
||||
}
|
||||
|
||||
async fn count_users(&self) -> Result<usize> {
|
||||
|
||||
Reference in New Issue
Block a user