- payload: Payload,
- context: web::Data<LemmyContext>,
-) -> Result<HttpResponse, LemmyError> {
- let unparsed = payload_to_string(payload).await?;
- info!("Received shared inbox activity {}", unparsed);
- let activity_data: ActivityCommonFields = serde_json::from_str(&unparsed)?;
- let activity = serde_json::from_str::<WithContext<SharedInboxActivities>>(&unparsed)?;
- match activity.inner() {
- SharedInboxActivities::GroupInboxActivities(g) => {
- receive_group_inbox(g, activity_data, request, &context).await
- }
- SharedInboxActivities::PersonInboxActivities(p) => {
- receive_person_inbox(p, activity_data, request, &context).await
- }
- }
-}
-
-async fn payload_to_string(mut payload: Payload) -> Result<String, LemmyError> {
- let mut bytes = BytesMut::new();
- while let Some(item) = payload.next().await {
- bytes.extend_from_slice(&item?);
- }
- let mut unparsed = String::new();
- Bytes::from(bytes).as_ref().read_to_string(&mut unparsed)?;
- Ok(unparsed)
-}
-
-#[derive(Clone, Debug, Deserialize, Serialize)]
-#[serde(rename_all = "camelCase")]
-pub(crate) struct ActivityCommonFields {
- pub(crate) id: Url,
- pub(crate) actor: Url,
+ body: Bytes,
+ data: Data<LemmyContext>,
+) -> LemmyResult<HttpResponse> {
+ receive_activity::<SharedInboxActivities, UserOrCommunity, LemmyContext>(request, body, &data)
+ .await