feat: add outbox_url to RemoteActor, get_following_outbox_url to FederationRepository
This commit is contained in:
@@ -219,6 +219,7 @@ impl Object for DbActor {
|
|||||||
shared_inbox_url: None,
|
shared_inbox_url: None,
|
||||||
display_name: json.name.clone(),
|
display_name: json.name.clone(),
|
||||||
avatar_url: json.icon.as_ref().map(|i| i.url.to_string()),
|
avatar_url: json.icon.as_ref().map(|i| i.url.to_string()),
|
||||||
|
outbox_url: Some(json.outbox.to_string()),
|
||||||
};
|
};
|
||||||
data.federation_repo.upsert_remote_actor(actor).await?;
|
data.federation_repo.upsert_remote_actor(actor).await?;
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ pub struct RemoteActor {
|
|||||||
pub shared_inbox_url: Option<String>,
|
pub shared_inbox_url: Option<String>,
|
||||||
pub display_name: Option<String>,
|
pub display_name: Option<String>,
|
||||||
pub avatar_url: Option<String>,
|
pub avatar_url: Option<String>,
|
||||||
|
pub outbox_url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
@@ -96,6 +97,11 @@ pub trait FederationRepository: Send + Sync {
|
|||||||
remote_actor_url: &str,
|
remote_actor_url: &str,
|
||||||
status: FollowingStatus,
|
status: FollowingStatus,
|
||||||
) -> Result<()>;
|
) -> Result<()>;
|
||||||
|
async fn get_following_outbox_url(
|
||||||
|
&self,
|
||||||
|
local_user_id: uuid::Uuid,
|
||||||
|
remote_actor_url: &str,
|
||||||
|
) -> Result<Option<String>>;
|
||||||
async fn add_announce(
|
async fn add_announce(
|
||||||
&self,
|
&self,
|
||||||
activity_id: &str,
|
activity_id: &str,
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ impl ActivityPubService {
|
|||||||
shared_inbox_url: None,
|
shared_inbox_url: None,
|
||||||
display_name: Some(remote_actor.username.clone()),
|
display_name: Some(remote_actor.username.clone()),
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
|
outbox_url: Some(remote_actor.outbox_url.to_string()),
|
||||||
};
|
};
|
||||||
data.federation_repo
|
data.federation_repo
|
||||||
.add_following(local_user_id, remote, &follow_id_str)
|
.add_following(local_user_id, remote, &follow_id_str)
|
||||||
@@ -867,6 +868,7 @@ impl ActivityPubService {
|
|||||||
shared_inbox_url: None,
|
shared_inbox_url: None,
|
||||||
display_name: None,
|
display_name: None,
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
|
outbox_url: None,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
actors.push(actor);
|
actors.push(actor);
|
||||||
@@ -928,6 +930,7 @@ impl ActivityPubService {
|
|||||||
shared_inbox_url: None,
|
shared_inbox_url: None,
|
||||||
display_name: Some(target.username),
|
display_name: Some(target.username),
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
|
outbox_url: None,
|
||||||
};
|
};
|
||||||
data.federation_repo
|
data.federation_repo
|
||||||
.add_following(local_user_id, target_as_remote, &follow_id)
|
.add_following(local_user_id, target_as_remote, &follow_id)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ fn make_follower(inbox: &str, shared: Option<&str>) -> Follower {
|
|||||||
shared_inbox_url: shared.map(|s| s.to_string()),
|
shared_inbox_url: shared.map(|s| s.to_string()),
|
||||||
display_name: None,
|
display_name: None,
|
||||||
avatar_url: None,
|
avatar_url: None,
|
||||||
|
outbox_url: None,
|
||||||
},
|
},
|
||||||
status: FollowerStatus::Accepted,
|
status: FollowerStatus::Accepted,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,9 +119,11 @@ impl From<&DomainEvent> for EventPayload {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DomainEvent::ImageStored { key } => EventPayload::ImageStored { key: key.clone() },
|
DomainEvent::ImageStored { key } => EventPayload::ImageStored { key: key.clone() },
|
||||||
DomainEvent::WatchlistEntryAdded { .. } | DomainEvent::WatchlistEntryRemoved { .. } => {
|
DomainEvent::WatchlistEntryAdded { .. }
|
||||||
|
| DomainEvent::WatchlistEntryRemoved { .. }
|
||||||
|
| DomainEvent::FollowAccepted { .. } => {
|
||||||
// federation-only events; not serialized via EventPayload
|
// federation-only events; not serialized via EventPayload
|
||||||
unreachable!("watchlist events are handled by the AP event handler directly")
|
unreachable!("federation events are handled by the AP event handler directly")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ impl FederationRepository for PostgresFederationRepository {
|
|||||||
let display_name: Option<String> = row.try_get("display_name").ok().flatten();
|
let display_name: Option<String> = row.try_get("display_name").ok().flatten();
|
||||||
let avatar_url: Option<String> = row.try_get("avatar_url").ok().flatten();
|
let avatar_url: Option<String> = row.try_get("avatar_url").ok().flatten();
|
||||||
Follower {
|
Follower {
|
||||||
actor: RemoteActor { url, handle, inbox_url, shared_inbox_url, display_name, avatar_url },
|
actor: RemoteActor { url, handle, inbox_url, shared_inbox_url, display_name, avatar_url, outbox_url: row.try_get("outbox_url").ok().flatten() },
|
||||||
status: str_to_status(&status_str),
|
status: str_to_status(&status_str),
|
||||||
}
|
}
|
||||||
}).collect())
|
}).collect())
|
||||||
@@ -217,6 +217,7 @@ impl FederationRepository for PostgresFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
}).collect())
|
}).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,6 +273,7 @@ impl FederationRepository for PostgresFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,6 +329,7 @@ impl FederationRepository for PostgresFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
}).collect())
|
}).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,6 +358,14 @@ impl FederationRepository for PostgresFederationRepository {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_following_outbox_url(
|
||||||
|
&self,
|
||||||
|
_local_user_id: uuid::Uuid,
|
||||||
|
_remote_actor_url: &str,
|
||||||
|
) -> Result<Option<String>> {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
|
||||||
async fn add_announce(
|
async fn add_announce(
|
||||||
&self,
|
&self,
|
||||||
activity_id: &str,
|
activity_id: &str,
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ impl FederationRepository for SqliteFederationRepository {
|
|||||||
shared_inbox_url,
|
shared_inbox_url,
|
||||||
display_name,
|
display_name,
|
||||||
avatar_url,
|
avatar_url,
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
},
|
},
|
||||||
status: str_to_status(&status_str),
|
status: str_to_status(&status_str),
|
||||||
}
|
}
|
||||||
@@ -244,6 +245,7 @@ impl FederationRepository for SqliteFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
})
|
})
|
||||||
.collect())
|
.collect())
|
||||||
}
|
}
|
||||||
@@ -303,6 +305,7 @@ impl FederationRepository for SqliteFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,6 +372,7 @@ impl FederationRepository for SqliteFederationRepository {
|
|||||||
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
shared_inbox_url: row.try_get("shared_inbox_url").ok().flatten(),
|
||||||
display_name: row.try_get("display_name").ok().flatten(),
|
display_name: row.try_get("display_name").ok().flatten(),
|
||||||
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
avatar_url: row.try_get("avatar_url").ok().flatten(),
|
||||||
|
outbox_url: row.try_get("outbox_url").ok().flatten(),
|
||||||
})
|
})
|
||||||
.collect())
|
.collect())
|
||||||
}
|
}
|
||||||
@@ -401,6 +405,14 @@ impl FederationRepository for SqliteFederationRepository {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_following_outbox_url(
|
||||||
|
&self,
|
||||||
|
_local_user_id: uuid::Uuid,
|
||||||
|
_remote_actor_url: &str,
|
||||||
|
) -> Result<Option<String>> {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
|
||||||
async fn add_announce(
|
async fn add_announce(
|
||||||
&self,
|
&self,
|
||||||
activity_id: &str,
|
activity_id: &str,
|
||||||
|
|||||||
Reference in New Issue
Block a user