Send MagicEnvelope as body with correct Content-Type in specs
Related to diaspora/diaspora_federation#30
This commit is contained in:
parent
381c03cfd7
commit
a6d7dbf1dd
8 changed files with 149 additions and 122 deletions
|
|
@ -23,7 +23,7 @@ describe "attack vectors", type: :request do
|
|||
|
||||
alice.share_with(eve.person, alices_aspect)
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.post(original_message), bob, alice), alice)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.post(original_message), bob, alice), alice)
|
||||
|
||||
# alice still should not see eves original post, even though bob sent it to her
|
||||
expect(alice.reload.visible_shareables(Post).where(guid: original_message.guid)).to be_blank
|
||||
|
|
@ -34,7 +34,7 @@ describe "attack vectors", type: :request do
|
|||
profile = eve.profile.clone
|
||||
profile.first_name = "Not BOB"
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.profile(profile), alice, bob), bob)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.profile(profile), alice, bob), bob)
|
||||
|
||||
expect(eve.profile(true).first_name).not_to eq("Not BOB")
|
||||
end
|
||||
|
|
@ -42,7 +42,7 @@ describe "attack vectors", type: :request do
|
|||
it "public post should not be spoofed from another author" do
|
||||
post = FactoryGirl.build(:status_message, public: true, author: eve.person)
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.post(post), alice))
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.post(post), alice))
|
||||
|
||||
expect(StatusMessage.exists?(guid: post.guid)).to be_falsey
|
||||
end
|
||||
|
|
@ -52,7 +52,7 @@ describe "attack vectors", type: :request do
|
|||
retraction = Retraction.for(original_message)
|
||||
|
||||
expect {
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.retraction(retraction), alice, bob), bob)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.retraction(retraction), alice, bob), bob)
|
||||
}.to_not change { bob.visible_shareables(Post).count(:all) }
|
||||
end
|
||||
|
||||
|
|
@ -62,7 +62,9 @@ describe "attack vectors", type: :request do
|
|||
contact = bob.contacts(true).find_by(person_id: eve.person.id)
|
||||
expect(contact).to be_sharing
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.retraction(Retraction.for(contact)), alice, bob), bob)
|
||||
post_message(
|
||||
generate_payload(Diaspora::Federation::Entities.retraction(Retraction.for(contact)), alice, bob), bob
|
||||
)
|
||||
|
||||
expect(bob.contacts(true).find_by(person_id: eve.person.id)).to be_sharing
|
||||
end
|
||||
|
|
@ -80,7 +82,7 @@ describe "attack vectors", type: :request do
|
|||
author: alice.person
|
||||
)
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.post(malicious_message), alice, bob), bob)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.post(malicious_message), alice, bob), bob)
|
||||
|
||||
expect(original_message.reload.author_id).to eq(eve.person.id)
|
||||
end
|
||||
|
|
@ -93,7 +95,7 @@ describe "attack vectors", type: :request do
|
|||
# eve tries to send me another message with the same ID
|
||||
malicious_message = FactoryGirl.build(:status_message, id: original_message.id, text: "BAD!!!", author: eve.person)
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.post(malicious_message), eve, bob), bob)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.post(malicious_message), eve, bob), bob)
|
||||
|
||||
expect(original_message.reload.text).to eq("store this!")
|
||||
end
|
||||
|
|
@ -109,7 +111,7 @@ describe "attack vectors", type: :request do
|
|||
)
|
||||
|
||||
expect {
|
||||
post_message(generate_xml(retraction, alice, bob), bob)
|
||||
post_message(generate_payload(retraction, alice, bob), bob)
|
||||
}.to_not change(StatusMessage, :count)
|
||||
end
|
||||
|
||||
|
|
@ -122,7 +124,7 @@ describe "attack vectors", type: :request do
|
|||
new_message.height = 23
|
||||
new_message.width = 42
|
||||
|
||||
post_message(generate_xml(Diaspora::Federation::Entities.photo(new_message), alice, bob), bob)
|
||||
post_message(generate_payload(Diaspora::Federation::Entities.photo(new_message), alice, bob), bob)
|
||||
|
||||
expect(original_message.reload.text).to eq("store this!")
|
||||
end
|
||||
|
|
|
|||
|
|
@ -44,30 +44,29 @@ def create_relayable_entity(entity_name, parent, diaspora_id)
|
|||
)
|
||||
end
|
||||
|
||||
def generate_xml(entity, remote_user, recipient=nil)
|
||||
def generate_payload(entity, remote_user, recipient=nil)
|
||||
magic_env = DiasporaFederation::Salmon::MagicEnvelope.new(
|
||||
entity,
|
||||
remote_user.diaspora_handle
|
||||
).envelop(remote_user.encryption_key)
|
||||
|
||||
if recipient
|
||||
DiasporaFederation::Salmon::EncryptedSlap.prepare(
|
||||
remote_user.diaspora_handle,
|
||||
remote_user.encryption_key,
|
||||
entity
|
||||
).generate_xml(recipient.encryption_key)
|
||||
DiasporaFederation::Salmon::EncryptedMagicEnvelope.encrypt(magic_env, recipient.encryption_key)
|
||||
else
|
||||
DiasporaFederation::Salmon::Slap.generate_xml(
|
||||
remote_user.diaspora_handle,
|
||||
remote_user.encryption_key,
|
||||
entity
|
||||
)
|
||||
magic_env.to_xml
|
||||
end
|
||||
end
|
||||
|
||||
def post_message(xml, recipient=nil)
|
||||
def post_message(payload, recipient=nil)
|
||||
if recipient
|
||||
inlined_jobs do
|
||||
post "/receive/users/#{recipient.guid}", guid: recipient.guid, xml: xml
|
||||
headers = {"CONTENT_TYPE" => "application/json"}
|
||||
post "/receive/users/#{recipient.guid}", payload, headers
|
||||
end
|
||||
else
|
||||
inlined_jobs do
|
||||
post "/receive/public", xml: xml
|
||||
headers = {"CONTENT_TYPE" => "application/magic-envelope+xml"}
|
||||
post "/receive/public", payload, headers
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -15,14 +15,14 @@ describe "Receive federation messages feature" do
|
|||
let(:recipient) { nil }
|
||||
|
||||
it "receives account deletion correctly" do
|
||||
post_message(generate_xml(DiasporaFederation::Entities::AccountDeletion.new(diaspora_id: sender_id), sender))
|
||||
post_message(generate_payload(DiasporaFederation::Entities::AccountDeletion.new(diaspora_id: sender_id), sender))
|
||||
|
||||
expect(AccountDeletion.exists?(diaspora_handle: sender_id)).to be_truthy
|
||||
end
|
||||
|
||||
it "rejects account deletion with wrong diaspora_id" do
|
||||
delete_id = Fabricate.sequence(:diaspora_id)
|
||||
post_message(generate_xml(DiasporaFederation::Entities::AccountDeletion.new(diaspora_id: delete_id), sender))
|
||||
post_message(generate_payload(DiasporaFederation::Entities::AccountDeletion.new(diaspora_id: delete_id), sender))
|
||||
|
||||
expect(AccountDeletion.exists?(diaspora_handle: delete_id)).to be_falsey
|
||||
expect(AccountDeletion.exists?(diaspora_handle: sender_id)).to be_falsey
|
||||
|
|
@ -38,7 +38,7 @@ describe "Receive federation messages feature" do
|
|||
alice, instance_of(Reshare)
|
||||
).and_return(double(create!: true))
|
||||
|
||||
post_message(generate_xml(reshare, sender))
|
||||
post_message(generate_payload(reshare, sender))
|
||||
|
||||
expect(Reshare.exists?(root_guid: post.guid)).to be_truthy
|
||||
expect(Reshare.where(root_guid: post.guid).last.diaspora_handle).to eq(sender_id)
|
||||
|
|
@ -49,7 +49,7 @@ describe "Receive federation messages feature" do
|
|||
reshare = Fabricate(
|
||||
:reshare_entity, root_author: alice.diaspora_handle, root_guid: post.guid, author: sender_id)
|
||||
expect {
|
||||
post_message(generate_xml(reshare, sender))
|
||||
post_message(generate_payload(reshare, sender))
|
||||
}.to raise_error ActiveRecord::RecordInvalid, "Validation failed: Only posts which are public may be reshared."
|
||||
|
||||
expect(Reshare.exists?(root_guid: post.guid)).to be_falsey
|
||||
|
|
@ -78,7 +78,7 @@ describe "Receive federation messages feature" do
|
|||
|
||||
expect(Workers::ReceiveLocal).to receive(:perform_async).and_call_original
|
||||
|
||||
post_message(generate_xml(entity, sender, alice), alice)
|
||||
post_message(generate_payload(entity, sender, alice), alice)
|
||||
|
||||
expect(alice.contacts.count).to eq(2)
|
||||
new_contact = alice.contacts.find {|c| c.person.diaspora_handle == sender_id }
|
||||
|
|
@ -106,7 +106,7 @@ describe "Receive federation messages feature" do
|
|||
|
||||
it "treats profile receive correctly" do
|
||||
entity = Fabricate(:profile_entity, author: sender_id)
|
||||
post_message(generate_xml(entity, sender, alice), alice)
|
||||
post_message(generate_payload(entity, sender, alice), alice)
|
||||
|
||||
received_profile = sender.profile.reload
|
||||
|
||||
|
|
@ -120,7 +120,7 @@ describe "Receive federation messages feature" do
|
|||
author: sender_id,
|
||||
participants: "#{sender_id};#{alice.diaspora_handle}"
|
||||
)
|
||||
post_message(generate_xml(entity, sender, alice), alice)
|
||||
post_message(generate_payload(entity, sender, alice), alice)
|
||||
|
||||
expect(Conversation.exists?(guid: entity.guid)).to be_truthy
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ shared_examples_for "it deals correctly with a relayable" do
|
|||
|
||||
it "treats upstream receive correctly" do
|
||||
expect(Workers::ReceiveLocal).to receive(:perform_async)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
received_entity = klass.find_by(guid: entity.guid)
|
||||
expect(received_entity).not_to be_nil
|
||||
|
|
@ -15,7 +15,7 @@ shared_examples_for "it deals correctly with a relayable" do
|
|||
it "rejects an upstream entity with a malformed author signature" do
|
||||
expect(Workers::ReceiveLocal).not_to receive(:perform_async)
|
||||
allow(remote_user_on_pod_b).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(klass.exists?(guid: entity.guid)).to be_falsey
|
||||
end
|
||||
|
|
@ -28,7 +28,7 @@ shared_examples_for "it deals correctly with a relayable" do
|
|||
it "treats downstream receive correctly" do
|
||||
expect(Workers::ReceiveLocal).to receive(:perform_async)
|
||||
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
received_entity = klass.find_by(guid: entity.guid)
|
||||
expect(received_entity).not_to be_nil
|
||||
|
|
@ -40,7 +40,7 @@ shared_examples_for "it deals correctly with a relayable" do
|
|||
it "rejects a downstream entity with a malformed author signature" do
|
||||
expect(Workers::ReceiveLocal).not_to receive(:perform_async)
|
||||
allow(remote_user_on_pod_c).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(klass.exists?(guid: entity.guid)).to be_falsey
|
||||
end
|
||||
|
|
@ -50,7 +50,7 @@ shared_examples_for "it deals correctly with a relayable" do
|
|||
it "declines downstream receive when sender signed with a wrong key" do
|
||||
expect(Workers::ReceiveLocal).not_to receive(:perform_async)
|
||||
allow(sender).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(klass.exists?(guid: entity.guid)).to be_falsey
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
def retraction_entity(entity_name, target_object, sender)
|
||||
def retraction_entity(target_object, sender)
|
||||
Fabricate(
|
||||
entity_name,
|
||||
:retraction_entity,
|
||||
author: sender.diaspora_handle,
|
||||
target_guid: target_object.guid,
|
||||
target_type: target_object.class.to_s,
|
||||
|
|
@ -10,23 +10,23 @@ end
|
|||
|
||||
shared_examples_for "it retracts non-relayable object" do
|
||||
it "retracts object by a correct retraction message" do
|
||||
entity = retraction_entity(entity_name, target_object, sender)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
entity = retraction_entity(target_object, sender)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(target_object.class.exists?(guid: target_object.guid)).to be_falsey
|
||||
end
|
||||
|
||||
it "doesn't retract object when retraction has wrong signatures" do
|
||||
allow(sender).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
entity = retraction_entity(entity_name, target_object, sender)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
entity = retraction_entity(target_object, sender)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(target_object.class.exists?(guid: target_object.guid)).to be_truthy
|
||||
end
|
||||
|
||||
it "doesn't retract object when sender is different from target object" do
|
||||
entity = retraction_entity(entity_name, target_object, remote_user_on_pod_c)
|
||||
post_message(generate_xml(entity, remote_user_on_pod_c, recipient), recipient)
|
||||
entity = retraction_entity(target_object, remote_user_on_pod_c)
|
||||
post_message(generate_payload(entity, remote_user_on_pod_c, recipient), recipient)
|
||||
|
||||
expect(target_object.class.exists?(guid: target_object.guid)).to be_truthy
|
||||
end
|
||||
|
|
@ -34,16 +34,16 @@ end
|
|||
|
||||
shared_examples_for "it retracts relayable object" do
|
||||
it "retracts object by a correct message" do
|
||||
entity = retraction_entity(entity_name, target_object, sender)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
entity = retraction_entity(target_object, sender)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(target_object.class.exists?(guid: target_object.guid)).to be_falsey
|
||||
end
|
||||
|
||||
it "doesn't retract object when retraction has wrong signatures" do
|
||||
allow(sender).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
entity = retraction_entity(entity_name, target_object, sender)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
entity = retraction_entity(target_object, sender)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(target_object.class.exists?(guid: target_object.guid)).to be_truthy
|
||||
end
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
it "treats status message receive correctly" do
|
||||
entity = Fabricate(:status_message_entity, author: sender_id, public: public)
|
||||
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(StatusMessage.exists?(guid: entity.guid)).to be_truthy
|
||||
end
|
||||
|
|
@ -15,7 +15,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
allow(sender).to receive(:encryption_key).and_return(OpenSSL::PKey::RSA.new(1024))
|
||||
entity = Fabricate(:status_message_entity, author: sender_id, public: public)
|
||||
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(StatusMessage.exists?(guid: entity.guid)).to be_falsey
|
||||
end
|
||||
|
|
@ -27,7 +27,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
describe "notifications are sent where required" do
|
||||
it "for comment on local post" do
|
||||
entity = create_relayable_entity(:comment_entity, local_parent, remote_user_on_pod_b.diaspora_handle)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(
|
||||
Notifications::CommentOnPost.exists?(
|
||||
|
|
@ -40,7 +40,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
|
||||
it "for like on local post" do
|
||||
entity = create_relayable_entity(:like_entity, local_parent, remote_user_on_pod_b.diaspora_handle)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(
|
||||
Notifications::Liked.exists?(
|
||||
|
|
@ -66,7 +66,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
|
||||
it "treats participation receive correctly" do
|
||||
expect(Workers::ReceiveLocal).to receive(:perform_async)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
received_entity = Participation.find_by(guid: entity.guid)
|
||||
expect(received_entity).not_to be_nil
|
||||
|
|
@ -77,7 +77,7 @@ shared_examples_for "messages which are indifferent about sharing fact" do
|
|||
expect(Workers::ReceiveLocal).not_to receive(:perform_async)
|
||||
entity = create_relayable_entity(:participation_entity, remote_parent, sender_id)
|
||||
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(Participation.exists?(guid: entity.guid)).to be_falsey
|
||||
end
|
||||
|
|
@ -107,17 +107,11 @@ end
|
|||
shared_examples_for "messages which can't be send without sharing" do
|
||||
# retractions shouldn't depend on sharing fact
|
||||
describe "retractions for non-relayable objects" do
|
||||
%w(retraction signed_retraction).each do |retraction_entity_name|
|
||||
context "with #{retraction_entity_name}" do
|
||||
let(:entity_name) { "#{retraction_entity_name}_entity".to_sym }
|
||||
%w[status_message photo].each do |target|
|
||||
context "with #{target}" do
|
||||
let(:target_object) { FactoryGirl.create(target.to_sym, author: remote_user_on_pod_b.person) }
|
||||
|
||||
%w(status_message photo).each do |target|
|
||||
context "with #{target}" do
|
||||
let(:target_object) { FactoryGirl.create(target.to_sym, author: remote_user_on_pod_b.person) }
|
||||
|
||||
it_behaves_like "it retracts non-relayable object"
|
||||
end
|
||||
end
|
||||
it_behaves_like "it retracts non-relayable object"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -133,7 +127,7 @@ shared_examples_for "messages which can't be send without sharing" do
|
|||
alice.participate!(remote_parent)
|
||||
author_id = remote_user_on_pod_c.diaspora_handle
|
||||
entity = create_relayable_entity(:comment_entity, remote_parent, author_id)
|
||||
post_message(generate_xml(entity, sender, recipient), recipient)
|
||||
post_message(generate_payload(entity, sender, recipient), recipient)
|
||||
|
||||
expect(
|
||||
Notifications::AlsoCommented.exists?(
|
||||
|
|
@ -146,47 +140,41 @@ shared_examples_for "messages which can't be send without sharing" do
|
|||
end
|
||||
|
||||
describe "retractions for relayable objects" do
|
||||
%w(retraction signed_retraction relayable_retraction).each do |retraction_entity_name|
|
||||
context "with #{retraction_entity_name}" do
|
||||
let(:entity_name) { "#{retraction_entity_name}_entity".to_sym }
|
||||
before do
|
||||
allow(DiasporaFederation.callbacks).to receive(:trigger).with(
|
||||
:fetch_private_key, alice.diaspora_handle
|
||||
) { alice.encryption_key }
|
||||
end
|
||||
|
||||
before do
|
||||
allow(DiasporaFederation.callbacks).to receive(:trigger).with(
|
||||
:fetch_private_key, alice.diaspora_handle
|
||||
) { alice.encryption_key }
|
||||
end
|
||||
context "with comment" do
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-upstream federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:comment, author: remote_user_on_pod_b.person, post: local_parent)
|
||||
}
|
||||
end
|
||||
|
||||
context "with comment" do
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-upstream federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:comment, author: remote_user_on_pod_b.person, post: local_parent)
|
||||
}
|
||||
end
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-downsteam federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:comment, author: remote_user_on_pod_c.person, post: remote_parent)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-downsteam federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:comment, author: remote_user_on_pod_c.person, post: remote_parent)
|
||||
}
|
||||
end
|
||||
end
|
||||
context "with like" do
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-upstream federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:like, author: remote_user_on_pod_b.person, target: local_parent)
|
||||
}
|
||||
end
|
||||
|
||||
context "with like" do
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-upstream federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:like, author: remote_user_on_pod_b.person, target: local_parent)
|
||||
}
|
||||
end
|
||||
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-downsteam federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:like, author: remote_user_on_pod_c.person, target: remote_parent)
|
||||
}
|
||||
end
|
||||
end
|
||||
it_behaves_like "it retracts relayable object" do
|
||||
# case for to-downsteam federation
|
||||
let(:target_object) {
|
||||
FactoryGirl.create(:like, author: remote_user_on_pod_c.person, target: remote_parent)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -28,18 +28,29 @@ describe Diaspora::Federation::Dispatcher::Private do
|
|||
end
|
||||
|
||||
context "deliver to remote user" do
|
||||
let(:xml) { "<diaspora/>" }
|
||||
let(:encryption_key) { double }
|
||||
let(:magic_env) { double }
|
||||
let(:magic_env_xml) { double }
|
||||
let(:json) { "{\"aes_key\": \"...\", \"encrypted_magic_envelope\": \"...\"}" }
|
||||
|
||||
it "queues a private send job" do
|
||||
expect(Workers::SendPrivate).to receive(:perform_async) do |user_id, _entity_string, targets|
|
||||
expect(user_id).to eq(alice.id)
|
||||
expect(targets.size).to eq(1)
|
||||
expect(targets).to have_key(remote_raphael.receive_url)
|
||||
expect(targets[remote_raphael.receive_url]).to eq(xml)
|
||||
expect(targets[remote_raphael.receive_url]).to eq(json)
|
||||
end
|
||||
|
||||
salmon = double
|
||||
expect(DiasporaFederation::Salmon::EncryptedSlap).to receive(:prepare).and_return(salmon)
|
||||
expect(salmon).to receive(:generate_xml).and_return(xml)
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
expect(DiasporaFederation::Salmon::EncryptedMagicEnvelope).to receive(:encrypt) do |magic_env, public_key|
|
||||
expect(magic_env).to eq(magic_env_xml)
|
||||
expect(public_key.to_s).to eq(remote_raphael.public_key.to_s)
|
||||
json
|
||||
end
|
||||
|
||||
Diaspora::Federation::Dispatcher.build(alice, post).dispatch
|
||||
end
|
||||
|
|
@ -60,12 +71,19 @@ describe Diaspora::Federation::Dispatcher::Private do
|
|||
expect(user_id).to eq(alice.id)
|
||||
expect(targets.size).to eq(1)
|
||||
expect(targets).to have_key(remote_person.receive_url)
|
||||
expect(targets[remote_person.receive_url]).to eq(xml)
|
||||
expect(targets[remote_person.receive_url]).to eq(json)
|
||||
end
|
||||
|
||||
salmon = double
|
||||
expect(DiasporaFederation::Salmon::EncryptedSlap).to receive(:prepare).and_return(salmon)
|
||||
expect(salmon).to receive(:generate_xml).and_return(xml)
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
expect(DiasporaFederation::Salmon::EncryptedMagicEnvelope).to receive(:encrypt) do |magic_env, public_key|
|
||||
expect(magic_env).to eq(magic_env_xml)
|
||||
expect(public_key.to_s).to eq(remote_raphael.public_key.to_s)
|
||||
json
|
||||
end
|
||||
|
||||
Diaspora::Federation::Dispatcher.build(alice, post, subscribers: [remote_person]).dispatch
|
||||
end
|
||||
|
|
@ -79,12 +97,19 @@ describe Diaspora::Federation::Dispatcher::Private do
|
|||
expect(user_id).to eq(alice.id)
|
||||
expect(targets.size).to eq(1)
|
||||
expect(targets).to have_key(remote_person.receive_url)
|
||||
expect(targets[remote_person.receive_url]).to eq(xml)
|
||||
expect(targets[remote_person.receive_url]).to eq(json)
|
||||
end
|
||||
|
||||
salmon = double
|
||||
expect(DiasporaFederation::Salmon::EncryptedSlap).to receive(:prepare).and_return(salmon)
|
||||
expect(salmon).to receive(:generate_xml).and_return(xml)
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
expect(DiasporaFederation::Salmon::EncryptedMagicEnvelope).to receive(:encrypt) do |magic_env, public_key|
|
||||
expect(magic_env).to eq(magic_env_xml)
|
||||
expect(public_key.to_s).to eq(remote_raphael.public_key.to_s)
|
||||
json
|
||||
end
|
||||
|
||||
Diaspora::Federation::Dispatcher.build(alice, post, subscribers: [remote_person, offline_person]).dispatch
|
||||
end
|
||||
|
|
|
|||
|
|
@ -48,7 +48,9 @@ describe Diaspora::Federation::Dispatcher::Public do
|
|||
end
|
||||
|
||||
context "deliver to remote user" do
|
||||
let(:salmon_xml) { "<diaspora/>" }
|
||||
let(:encryption_key) { double }
|
||||
let(:magic_env) { double }
|
||||
let(:magic_env_xml) { double(to_xml: "<diaspora/>") }
|
||||
|
||||
it "queues a public send job" do
|
||||
alice.share_with(remote_raphael, alice.aspects.first)
|
||||
|
|
@ -57,10 +59,14 @@ describe Diaspora::Federation::Dispatcher::Public do
|
|||
expect(user_id).to eq(alice.id)
|
||||
expect(urls.size).to eq(1)
|
||||
expect(urls[0]).to eq(remote_raphael.pod.url_to("/receive/public"))
|
||||
expect(xml).to eq(salmon_xml)
|
||||
expect(xml).to eq(magic_env_xml.to_xml)
|
||||
end
|
||||
|
||||
expect(DiasporaFederation::Salmon::Slap).to receive(:generate_xml).and_return(salmon_xml)
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
|
||||
Diaspora::Federation::Dispatcher.build(alice, post).dispatch
|
||||
end
|
||||
|
|
@ -76,11 +82,14 @@ describe Diaspora::Federation::Dispatcher::Public do
|
|||
expect(user_id).to eq(alice.id)
|
||||
expect(urls.size).to eq(1)
|
||||
expect(urls[0]).to eq(remote_raphael.pod.url_to("/receive/public"))
|
||||
expect(xml).to eq(salmon_xml)
|
||||
expect(xml).to eq(magic_env_xml.to_xml)
|
||||
end
|
||||
|
||||
expect(DiasporaFederation::Salmon::Slap).to receive(:generate_xml).and_return(salmon_xml)
|
||||
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
Diaspora::Federation::Dispatcher.build(alice, post, subscribers: [remote_raphael]).dispatch
|
||||
end
|
||||
|
||||
|
|
@ -92,10 +101,14 @@ describe Diaspora::Federation::Dispatcher::Public do
|
|||
expect(user_id).to eq(alice.id)
|
||||
expect(urls.size).to eq(1)
|
||||
expect(urls[0]).to eq(remote_raphael.pod.url_to("/receive/public"))
|
||||
expect(xml).to eq(salmon_xml)
|
||||
expect(xml).to eq(magic_env_xml.to_xml)
|
||||
end
|
||||
|
||||
expect(DiasporaFederation::Salmon::Slap).to receive(:generate_xml).and_return(salmon_xml)
|
||||
expect(alice).to receive(:encryption_key).and_return(encryption_key)
|
||||
expect(DiasporaFederation::Salmon::MagicEnvelope).to receive(:new).with(
|
||||
instance_of(DiasporaFederation::Entities::StatusMessage), alice.diaspora_handle
|
||||
).and_return(magic_env)
|
||||
expect(magic_env).to receive(:envelop).with(encryption_key).and_return(magic_env_xml)
|
||||
|
||||
Diaspora::Federation::Dispatcher.build(alice, post, subscribers: [remote_raphael, offline_person]).dispatch
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue