From aa84c4c40e8355cb77520c0df95c739313ad77f0 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Mon, 11 Jan 2016 02:10:55 +0100 Subject: [PATCH] move Receiver to Federation module --- .../diaspora_federation/receive_controller.rb | 1 - lib/diaspora_federation.rb | 2 +- lib/diaspora_federation/federation.rb | 8 ++++++ .../federation/exceptions.rb | 11 ++++++++ .../federation/receiver.rb | 22 +++++++++++++++ .../federation/receiver/private.rb | 21 ++++++++++++++ .../federation/receiver/public.rb | 15 ++++++++++ lib/diaspora_federation/receiver.rb | 28 ------------------- lib/diaspora_federation/receiver/private.rb | 19 ------------- lib/diaspora_federation/receiver/public.rb | 13 --------- .../{ => federation}/receiver/private_spec.rb | 6 ++-- .../{ => federation}/receiver/public_spec.rb | 4 +-- 12 files changed, 83 insertions(+), 67 deletions(-) create mode 100644 lib/diaspora_federation/federation.rb create mode 100644 lib/diaspora_federation/federation/exceptions.rb create mode 100644 lib/diaspora_federation/federation/receiver.rb create mode 100644 lib/diaspora_federation/federation/receiver/private.rb create mode 100644 lib/diaspora_federation/federation/receiver/public.rb delete mode 100644 lib/diaspora_federation/receiver.rb delete mode 100644 lib/diaspora_federation/receiver/private.rb delete mode 100644 lib/diaspora_federation/receiver/public.rb rename spec/lib/diaspora_federation/{ => federation}/receiver/private_spec.rb (91%) rename spec/lib/diaspora_federation/{ => federation}/receiver/public_spec.rb (93%) diff --git a/app/controllers/diaspora_federation/receive_controller.rb b/app/controllers/diaspora_federation/receive_controller.rb index 8c46f34..9b3c908 100644 --- a/app/controllers/diaspora_federation/receive_controller.rb +++ b/app/controllers/diaspora_federation/receive_controller.rb @@ -1,5 +1,4 @@ require_dependency "diaspora_federation/application_controller" -require "diaspora_federation/receiver" module DiasporaFederation # this controller processes receiving messages diff --git a/lib/diaspora_federation.rb b/lib/diaspora_federation.rb index d500de2..378c27c 100644 --- a/lib/diaspora_federation.rb +++ b/lib/diaspora_federation.rb @@ -12,7 +12,7 @@ require "diaspora_federation/entities" require "diaspora_federation/discovery" require "diaspora_federation/salmon" -require "diaspora_federation/receiver" +require "diaspora_federation/federation" # diaspora* federation library module DiasporaFederation diff --git a/lib/diaspora_federation/federation.rb b/lib/diaspora_federation/federation.rb new file mode 100644 index 0000000..f18c752 --- /dev/null +++ b/lib/diaspora_federation/federation.rb @@ -0,0 +1,8 @@ +module DiasporaFederation + # This module contains the federation logic + module Federation + end +end + +require "diaspora_federation/federation/exceptions" +require "diaspora_federation/federation/receiver" diff --git a/lib/diaspora_federation/federation/exceptions.rb b/lib/diaspora_federation/federation/exceptions.rb new file mode 100644 index 0000000..ea8c856 --- /dev/null +++ b/lib/diaspora_federation/federation/exceptions.rb @@ -0,0 +1,11 @@ +module DiasporaFederation + module Federation + # Raised if failed to fetch a public key of the sender of the received message + class SenderKeyNotFound < Exception + end + + # Raised if recipient private key is missing for a private receive + class RecipientKeyNotFound < Exception + end + end +end diff --git a/lib/diaspora_federation/federation/receiver.rb b/lib/diaspora_federation/federation/receiver.rb new file mode 100644 index 0000000..e8a7e9a --- /dev/null +++ b/lib/diaspora_federation/federation/receiver.rb @@ -0,0 +1,22 @@ +module DiasporaFederation + module Federation + # Common base for Private and Public receivers + # @see Receiver::Public + # @see Receiver::Private + class Receiver + def initialize(salmon_xml) + @salmon_xml = salmon_xml + end + + def receive! + sender_id = slap.author_id + public_key = DiasporaFederation.callbacks.trigger(:fetch_public_key_by_diaspora_id, sender_id) + raise SenderKeyNotFound if public_key.nil? + DiasporaFederation.callbacks.trigger(:save_entity_after_receive, slap.entity(public_key)) + end + end + end +end + +require "diaspora_federation/federation/receiver/private" +require "diaspora_federation/federation/receiver/public" diff --git a/lib/diaspora_federation/federation/receiver/private.rb b/lib/diaspora_federation/federation/receiver/private.rb new file mode 100644 index 0000000..4576341 --- /dev/null +++ b/lib/diaspora_federation/federation/receiver/private.rb @@ -0,0 +1,21 @@ +module DiasporaFederation + module Federation + class Receiver + # Receiver::Private is used to receive private messages, which are addressed + # to a specific user, encrypted with his public key and packed using Salmon::EncryptedSlap + class Private < Receiver + def initialize(salmon_xml, recipient_private_key) + super(salmon_xml) + raise RecipientKeyNotFound if recipient_private_key.nil? + @recipient_private_key = recipient_private_key + end + + protected + + def slap + @salmon ||= Salmon::EncryptedSlap.from_xml(@salmon_xml, @recipient_private_key) + end + end + end + end +end diff --git a/lib/diaspora_federation/federation/receiver/public.rb b/lib/diaspora_federation/federation/receiver/public.rb new file mode 100644 index 0000000..41415dc --- /dev/null +++ b/lib/diaspora_federation/federation/receiver/public.rb @@ -0,0 +1,15 @@ +module DiasporaFederation + module Federation + class Receiver + # Receiver::Public is used to receive public messages, which are not addressed to a specific user, unencrypted + # and packed using Salmon::Slap + class Public < Receiver + protected + + def slap + @salmon ||= Salmon::Slap.from_xml(@salmon_xml) + end + end + end + end +end diff --git a/lib/diaspora_federation/receiver.rb b/lib/diaspora_federation/receiver.rb deleted file mode 100644 index b0c3ef4..0000000 --- a/lib/diaspora_federation/receiver.rb +++ /dev/null @@ -1,28 +0,0 @@ -module DiasporaFederation - # Raised if failed to fetch a public key of the sender of the received message - class SenderKeyNotFound < Exception - end - - # Raised if recipient private key is missing for a private receive - class RecipientKeyNotFound < Exception - end - - # Common base for Private and Public receivers - # @see Receiver::Public - # @see Receiver::Private - class Receiver - def initialize(salmon_xml) - @salmon_xml = salmon_xml - end - - def receive! - sender_id = slap.author_id - public_key = DiasporaFederation.callbacks.trigger(:fetch_public_key_by_diaspora_id, sender_id) - raise SenderKeyNotFound if public_key.nil? - DiasporaFederation.callbacks.trigger(:save_entity_after_receive, slap.entity(public_key)) - end - end -end - -require "diaspora_federation/receiver/private" -require "diaspora_federation/receiver/public" diff --git a/lib/diaspora_federation/receiver/private.rb b/lib/diaspora_federation/receiver/private.rb deleted file mode 100644 index 2db694e..0000000 --- a/lib/diaspora_federation/receiver/private.rb +++ /dev/null @@ -1,19 +0,0 @@ -module DiasporaFederation - class Receiver - # Receiver::Private is used to receive private messages, which are addressed to a specific user, encrypted with his - # public key and packed using Salmon::EncryptedSlap - class Private < Receiver - def initialize(salmon_xml, recipient_private_key) - super(salmon_xml) - raise RecipientKeyNotFound if recipient_private_key.nil? - @recipient_private_key = recipient_private_key - end - - protected - - def slap - @salmon ||= Salmon::EncryptedSlap.from_xml(@salmon_xml, @recipient_private_key) - end - end - end -end diff --git a/lib/diaspora_federation/receiver/public.rb b/lib/diaspora_federation/receiver/public.rb deleted file mode 100644 index 8ee22fa..0000000 --- a/lib/diaspora_federation/receiver/public.rb +++ /dev/null @@ -1,13 +0,0 @@ -module DiasporaFederation - class Receiver - # Receiver::Public is used to receive public messages, which are not addressed to a specific user, unencrypted - # and packed using Salmon::Slap - class Public < Receiver - protected - - def slap - @salmon ||= Salmon::Slap.from_xml(@salmon_xml) - end - end - end -end diff --git a/spec/lib/diaspora_federation/receiver/private_spec.rb b/spec/lib/diaspora_federation/federation/receiver/private_spec.rb similarity index 91% rename from spec/lib/diaspora_federation/receiver/private_spec.rb rename to spec/lib/diaspora_federation/federation/receiver/private_spec.rb index 27aa22b..0ca7ddb 100644 --- a/spec/lib/diaspora_federation/receiver/private_spec.rb +++ b/spec/lib/diaspora_federation/federation/receiver/private_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe Receiver::Private do + describe Federation::Receiver::Private do let(:sender_id) { FactoryGirl.generate(:diaspora_id) } let(:sender_key) { OpenSSL::PKey::RSA.generate(1024) } let(:recipient_key) { OpenSSL::PKey::RSA.generate(1024) } @@ -30,13 +30,13 @@ module DiasporaFederation expect { described_class.new(xml, recipient_key).receive! - }.to raise_error SenderKeyNotFound + }.to raise_error Federation::SenderKeyNotFound end it "raises when recipient private key is not available" do expect { described_class.new(xml, nil).receive! - }.to raise_error RecipientKeyNotFound + }.to raise_error Federation::RecipientKeyNotFound end it "raises when bad xml was supplied" do diff --git a/spec/lib/diaspora_federation/receiver/public_spec.rb b/spec/lib/diaspora_federation/federation/receiver/public_spec.rb similarity index 93% rename from spec/lib/diaspora_federation/receiver/public_spec.rb rename to spec/lib/diaspora_federation/federation/receiver/public_spec.rb index 18ddfb2..203645a 100644 --- a/spec/lib/diaspora_federation/receiver/public_spec.rb +++ b/spec/lib/diaspora_federation/federation/receiver/public_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe Receiver::Public do + describe Federation::Receiver::Public do let(:sender_id) { FactoryGirl.generate(:diaspora_id) } let(:sender_key) { OpenSSL::PKey::RSA.generate(1024) } let(:xml) { @@ -27,7 +27,7 @@ module DiasporaFederation expect { described_class.new(xml).receive! - }.to raise_error SenderKeyNotFound + }.to raise_error Federation::SenderKeyNotFound end it "raises when bad xml was supplied" do