From d741e2b20247f7db42b9a787054247223c96644d Mon Sep 17 00:00:00 2001
From: asonix <asonix@asonix.dog>
Date: Sun, 15 Mar 2020 17:49:40 -0500
Subject: [PATCH] Always return generated AP type, except on error

---
 src/inbox.rs | 23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/inbox.rs b/src/inbox.rs
index 059dfe4..d12e048 100644
--- a/src/inbox.rs
+++ b/src/inbox.rs
@@ -4,10 +4,9 @@ use activitystreams::{
     primitives::XsdAnyUri,
 };
 use actix::Addr;
-use actix_web::{client::Client, web, HttpResponse};
+use actix_web::{client::Client, http::StatusCode, web, HttpResponse};
 use futures::join;
 use log::error;
-use std::collections::HashMap;
 
 use crate::{
     apub::{AcceptedActors, AcceptedObjects, ValidTypes},
@@ -117,9 +116,9 @@ async fn handle_forward(
 
     let inboxes = get_inboxes(&state, &actor, &object_id).await?;
 
-    deliver_many(client, inboxes, input);
+    deliver_many(client, inboxes, input.clone());
 
-    Ok(response(HashMap::<(), ()>::new()))
+    Ok(response(input))
 }
 
 async fn handle_relay(
@@ -150,11 +149,11 @@ async fn handle_relay(
 
     let inboxes = get_inboxes(&state, &actor, &object_id).await?;
 
-    deliver_many(client, inboxes, announce);
+    deliver_many(client, inboxes, announce.clone());
 
     state.cache(object_id.to_owned(), activity_id).await;
 
-    Ok(response(HashMap::<(), ()>::new()))
+    Ok(response(announce))
 }
 
 async fn handle_follow(
@@ -316,7 +315,17 @@ async fn get_inboxes(
     Ok(state.listeners_without(&inbox, &domain).await)
 }
 
-impl actix_web::error::ResponseError for MyError {}
+impl actix_web::error::ResponseError for MyError {
+    fn status_code(&self) -> StatusCode {
+        StatusCode::INTERNAL_SERVER_ERROR
+    }
+
+    fn error_response(&self) -> HttpResponse {
+        HttpResponse::InternalServerError()
+            .header("Content-Type", "application/activity+json")
+            .json(serde_json::json!({}))
+    }
+}
 
 impl From<std::convert::Infallible> for MyError {
     fn from(_: std::convert::Infallible) -> Self {