diff --git a/app/controllers/diaspora_federation/receive_controller.rb b/app/controllers/diaspora_federation/receive_controller.rb
new file mode 100644
index 0000000..563c253
--- /dev/null
+++ b/app/controllers/diaspora_federation/receive_controller.rb
@@ -0,0 +1,25 @@
+require_dependency "diaspora_federation/application_controller"
+
+module DiasporaFederation
+ class ReceiveController < ApplicationController
+ before_action :check_for_xml, only: %i(public private)
+
+ def public
+ Rails.logger.info "received a public message"
+ Rails.logger.info CGI.unescape(params[:xml])
+ render nothing: true, status: :ok
+ end
+
+ def private
+ Rails.logger.info "received a private message for #{params[:guid]}"
+ Rails.logger.info CGI.unescape(params[:xml])
+ render nothing: true, status: :ok
+ end
+
+ private
+
+ def check_for_xml
+ render nothing: true, status: 422 if params[:xml].nil?
+ end
+ end
+end
diff --git a/config/routes.rb b/config/routes.rb
index 0453f2c..de3c0f8 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,2 +1,6 @@
DiasporaFederation::Engine.routes.draw do
+ controller :receive do
+ post "receive/public" => :public, :as => "receive_public"
+ post "receive/users/:guid" => :private, :as => "receive_private"
+ end
end
diff --git a/spec/controllers/diaspora_federation/receive_controller_spec.rb b/spec/controllers/diaspora_federation/receive_controller_spec.rb
new file mode 100644
index 0000000..df98e6f
--- /dev/null
+++ b/spec/controllers/diaspora_federation/receive_controller_spec.rb
@@ -0,0 +1,29 @@
+module DiasporaFederation
+ describe ReceiveController, type: :controller do
+ routes { DiasporaFederation::Engine.routes }
+
+ describe "#public" do
+ it "succeeds" do
+ post :public, xml: ""
+ expect(response).to be_success
+ end
+
+ it "returns a 422 if no xml is passed" do
+ post :public
+ expect(response.code).to eq("422")
+ end
+ end
+
+ describe "#private" do
+ it "succeeds" do
+ post :private, guid: "any-guid", xml: ""
+ expect(response).to be_success
+ end
+
+ it "returns a 422 if no xml is passed" do
+ post :private, guid: "any-guid"
+ expect(response.code).to eq("422")
+ end
+ end
+ end
+end
diff --git a/spec/dummy_spec.rb b/spec/dummy_spec.rb
deleted file mode 100644
index 3bca5dd..0000000
--- a/spec/dummy_spec.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-describe "Dummy" do
- # dummy test
- it "should be true" do
- expect(true).to be_truthy
- end
-end
diff --git a/test/dummy/config/routes.rb b/test/dummy/config/routes.rb
index 8522406..5c8255c 100644
--- a/test/dummy/config/routes.rb
+++ b/test/dummy/config/routes.rb
@@ -1,4 +1,3 @@
Rails.application.routes.draw do
-
- mount DiasporaFederation::Engine => "/diaspora_federation"
+ mount DiasporaFederation::Engine => "/"
end