move sender_valid? logic to Retraction and Relayable
This commit is contained in:
parent
05cd90f073
commit
c8be9083f0
5 changed files with 85 additions and 10 deletions
|
|
@ -89,6 +89,10 @@ module DiasporaFederation
|
||||||
verify_parent_author_signature unless parent.local
|
verify_parent_author_signature unless parent.local
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sender_valid?(sender)
|
||||||
|
sender == author || sender == parent.author
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# this happens only on downstream federation
|
# this happens only on downstream federation
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,15 @@ module DiasporaFederation
|
||||||
super(data)
|
super(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sender_valid?(sender)
|
||||||
|
case target_type
|
||||||
|
when "Comment", "Like", "PollParticipation"
|
||||||
|
sender == target.author || sender == target.parent.author
|
||||||
|
else
|
||||||
|
sender == target.author
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# @param [Nokogiri::XML::Element] root_node xml nodes
|
# @param [Nokogiri::XML::Element] root_node xml nodes
|
||||||
# @return [Retraction] instance
|
# @return [Retraction] instance
|
||||||
def self.populate_entity(root_node)
|
def self.populate_entity(root_node)
|
||||||
|
|
|
||||||
|
|
@ -27,16 +27,8 @@ module DiasporaFederation
|
||||||
end
|
end
|
||||||
|
|
||||||
def sender_valid?
|
def sender_valid?
|
||||||
case entity
|
if entity.respond_to?(:sender_valid?)
|
||||||
when Entities::Retraction
|
entity.sender_valid?(sender)
|
||||||
case entity.target_type
|
|
||||||
when "Comment", "Like", "PollParticipation"
|
|
||||||
sender == entity.target.author || sender == entity.target.parent.author
|
|
||||||
else
|
|
||||||
sender == entity.target.author
|
|
||||||
end
|
|
||||||
when Entities::Relayable
|
|
||||||
sender == entity.author || sender == entity.parent.author
|
|
||||||
else
|
else
|
||||||
sender == entity.author
|
sender == entity.author
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -323,5 +323,26 @@ XML
|
||||||
expect(entity.parent).to eq(remote_parent)
|
expect(entity.parent).to eq(remote_parent)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#sender_valid?" do
|
||||||
|
it "allows author" do
|
||||||
|
entity = SomeRelayable.new(hash)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(author)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it "allows parent author" do
|
||||||
|
entity = SomeRelayable.new(hash)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(local_parent.author)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not allow any random author" do
|
||||||
|
entity = SomeRelayable.new(hash)
|
||||||
|
invalid_author = FactoryGirl.generate(:diaspora_id)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(invalid_author)).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -26,5 +26,54 @@ XML
|
||||||
it_behaves_like "an XML Entity"
|
it_behaves_like "an XML Entity"
|
||||||
|
|
||||||
it_behaves_like "a retraction"
|
it_behaves_like "a retraction"
|
||||||
|
|
||||||
|
describe "#sender_valid?" do
|
||||||
|
context "unrelayable target" do
|
||||||
|
it "allows target author" do
|
||||||
|
entity = Entities::Retraction.new(data)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(bob.diaspora_id)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not allow any random author" do
|
||||||
|
entity = Entities::Retraction.new(data)
|
||||||
|
invalid_author = FactoryGirl.generate(:diaspora_id)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(invalid_author)).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
%w(Comment Like PollParticipation).each do |target_type|
|
||||||
|
context "#{target_type} target" do
|
||||||
|
let(:relayable_target) {
|
||||||
|
FactoryGirl.build(
|
||||||
|
:related_entity,
|
||||||
|
author: bob.diaspora_id,
|
||||||
|
parent: FactoryGirl.build(:related_entity, author: alice.diaspora_id)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
let(:relayable_data) { data.merge(target_type: target_type, target: relayable_target) }
|
||||||
|
|
||||||
|
it "allows target author" do
|
||||||
|
entity = Entities::Retraction.new(relayable_data)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(bob.diaspora_id)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it "allows target parent author" do
|
||||||
|
entity = Entities::Retraction.new(relayable_data)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(alice.diaspora_id)).to be_truthy
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not allow any random author" do
|
||||||
|
entity = Entities::Retraction.new(relayable_data)
|
||||||
|
invalid_author = FactoryGirl.generate(:diaspora_id)
|
||||||
|
|
||||||
|
expect(entity.sender_valid?(invalid_author)).to be_falsey
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue