use signature data for federation

This commit is contained in:
Benjamin Neff 2016-07-22 23:48:27 +02:00
parent b82d1c2ca9
commit 2a6ca1b831
4 changed files with 112 additions and 25 deletions

View file

@ -35,12 +35,16 @@ module Diaspora
def self.comment(comment)
DiasporaFederation::Entities::Comment.new(
{
author: comment.diaspora_handle,
guid: comment.guid,
parent_guid: comment.post.guid,
text: comment.text,
author_signature: comment.author_signature,
author_signature: comment.signature.try(:author_signature),
parent: related_entity(comment.post)
},
comment.signature.try(:order),
comment.signature.try(:additional_data) || {}
)
end
@ -65,13 +69,17 @@ module Diaspora
def self.like(like)
DiasporaFederation::Entities::Like.new(
{
author: like.diaspora_handle,
guid: like.guid,
parent_guid: like.target.guid,
positive: like.positive,
parent_type: Mappings.entity_name_for(like.target),
author_signature: like.author_signature,
author_signature: like.signature.try(:author_signature),
parent: related_entity(like.target)
},
like.signature.try(:order),
like.signature.try(:additional_data) || {}
)
end
@ -138,12 +146,16 @@ module Diaspora
def self.poll_participation(poll_participation)
DiasporaFederation::Entities::PollParticipation.new(
{
author: poll_participation.diaspora_handle,
guid: poll_participation.guid,
parent_guid: poll_participation.poll.guid,
poll_answer_guid: poll_participation.poll_answer.guid,
author_signature: poll_participation.author_signature,
author_signature: poll_participation.signature.try(:author_signature),
parent: related_entity(poll_participation.poll)
},
poll_participation.signature.try(:order),
poll_participation.signature.try(:additional_data) || {}
)
end

View file

@ -8,6 +8,10 @@ module Diaspora
validates :author_signature, presence: true
serialize :additional_data, Hash
def order
signature_order.order.split
end
end
end
end

View file

@ -304,6 +304,28 @@ FactoryGirl.define do
after(:build) {|m| m.conversation.participants << m.author }
end
factory(:signature_order) do
order "guid parent_guid text author"
end
factory(:comment_signature) do
author_signature "some signature"
association :signature_order, order: "guid parent_guid text author new_property"
additional_data { {"new_property" => "some text"} }
end
factory(:like_signature) do
author_signature "some signature"
association :signature_order, order: "positive guid parent_type parent_guid author new_property"
additional_data { {"new_property" => "some text"} }
end
factory(:poll_participation_signature) do
author_signature "some signature"
association :signature_order, order: "guid parent_guid author poll_answer_guid new_property"
additional_data { {"new_property" => "some text"} }
end
#templates
factory(:status_with_photo_backdrop, :parent => :status_message_with_photo)

View file

@ -11,7 +11,7 @@ describe Diaspora::Federation::Entities do
end
it "builds a comment" do
diaspora_entity = FactoryGirl.build(:comment, author_signature: "abc")
diaspora_entity = FactoryGirl.build(:comment)
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Comment)
@ -19,7 +19,23 @@ describe Diaspora::Federation::Entities do
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.post.guid)
expect(federation_entity.text).to eq(diaspora_entity.text)
expect(federation_entity.author_signature).to eq(diaspora_entity.author_signature)
expect(federation_entity.author_signature).to be_nil
expect(federation_entity.xml_order).to be_nil
expect(federation_entity.additional_xml_elements).to be_empty
end
it "builds a comment with signature" do
diaspora_entity = FactoryGirl.build(:comment, signature: FactoryGirl.build(:comment_signature))
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Comment)
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.post.guid)
expect(federation_entity.text).to eq(diaspora_entity.text)
expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature)
expect(federation_entity.xml_order).to eq(diaspora_entity.signature.signature_order.order.split)
expect(federation_entity.additional_xml_elements).to eq(diaspora_entity.signature.additional_data)
end
it "builds a contact (request)" do
@ -62,7 +78,7 @@ describe Diaspora::Federation::Entities do
end
it "builds a like" do
diaspora_entity = FactoryGirl.build(:like, author_signature: "abc")
diaspora_entity = FactoryGirl.build(:like)
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Like)
@ -70,7 +86,23 @@ describe Diaspora::Federation::Entities do
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.target.guid)
expect(federation_entity.positive).to eq(diaspora_entity.positive)
expect(federation_entity.author_signature).to eq(diaspora_entity.author_signature)
expect(federation_entity.author_signature).to be_nil
expect(federation_entity.xml_order).to be_nil
expect(federation_entity.additional_xml_elements).to be_empty
end
it "builds a like with signature" do
diaspora_entity = FactoryGirl.build(:like, signature: FactoryGirl.build(:like_signature))
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Like)
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.target.guid)
expect(federation_entity.positive).to eq(diaspora_entity.positive)
expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature)
expect(federation_entity.xml_order).to eq(diaspora_entity.signature.signature_order.order.split)
expect(federation_entity.additional_xml_elements).to eq(diaspora_entity.signature.additional_data)
end
it "builds a message" do
@ -114,7 +146,7 @@ describe Diaspora::Federation::Entities do
end
it "builds a poll participation" do
diaspora_entity = FactoryGirl.build(:poll_participation, author_signature: "abc")
diaspora_entity = FactoryGirl.build(:poll_participation)
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::PollParticipation)
@ -122,7 +154,24 @@ describe Diaspora::Federation::Entities do
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.poll_answer.poll.guid)
expect(federation_entity.poll_answer_guid).to eq(diaspora_entity.poll_answer.guid)
expect(federation_entity.author_signature).to eq(diaspora_entity.author_signature)
expect(federation_entity.author_signature).to be_nil
expect(federation_entity.xml_order).to be_nil
expect(federation_entity.additional_xml_elements).to be_empty
end
it "builds a poll participation with signature" do
signature = FactoryGirl.build(:poll_participation_signature)
diaspora_entity = FactoryGirl.build(:poll_participation, signature: signature)
federation_entity = described_class.build(diaspora_entity)
expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::PollParticipation)
expect(federation_entity.author).to eq(diaspora_entity.author.diaspora_handle)
expect(federation_entity.guid).to eq(diaspora_entity.guid)
expect(federation_entity.parent_guid).to eq(diaspora_entity.poll_answer.poll.guid)
expect(federation_entity.poll_answer_guid).to eq(diaspora_entity.poll_answer.guid)
expect(federation_entity.author_signature).to eq(signature.author_signature)
expect(federation_entity.xml_order).to eq(signature.signature_order.order.split)
expect(federation_entity.additional_xml_elements).to eq(signature.additional_data)
end
it "builds a profile" do