diff --git a/lib/diaspora_federation/entities/comment.rb b/lib/diaspora_federation/entities/comment.rb index e5157a6..b54c5e7 100644 --- a/lib/diaspora_federation/entities/comment.rb +++ b/lib/diaspora_federation/entities/comment.rb @@ -23,8 +23,8 @@ module DiasporaFederation property :diaspora_id, xml_name: :diaspora_handle # The {Comment} parent is a Post - # @return [String] target type - def target_type + # @return [String] parent type + def parent_type "Post" end end diff --git a/lib/diaspora_federation/entities/like.rb b/lib/diaspora_federation/entities/like.rb index 89b92b0..a0d836d 100644 --- a/lib/diaspora_federation/entities/like.rb +++ b/lib/diaspora_federation/entities/like.rb @@ -16,12 +16,12 @@ module DiasporaFederation # @return [String] like guid property :guid - # @!attribute [r] target_type - # A string describing the type of the target. + # @!attribute [r] parent_type + # A string describing the type of the parent. # Can be "Post" or "Comment" (Comments are currently not implemented in the # Diaspora Frontend). - # @return [String] target type - property :target_type + # @return [String] parent type + property :parent_type, xml_name: :target_type include Relayable diff --git a/lib/diaspora_federation/entities/message.rb b/lib/diaspora_federation/entities/message.rb index 3d8116e..1a9096f 100644 --- a/lib/diaspora_federation/entities/message.rb +++ b/lib/diaspora_federation/entities/message.rb @@ -35,8 +35,8 @@ module DiasporaFederation property :conversation_guid # The {Message} parent is a {Conversation} - # @return [String] target type - def target_type + # @return [String] parent type + def parent_type "Conversation" end end diff --git a/lib/diaspora_federation/entities/participation.rb b/lib/diaspora_federation/entities/participation.rb index 8c628d7..e57dc20 100644 --- a/lib/diaspora_federation/entities/participation.rb +++ b/lib/diaspora_federation/entities/participation.rb @@ -10,11 +10,11 @@ module DiasporaFederation # @return [String] participation guid property :guid - # @!attribute [r] target_type + # @!attribute [r] parent_type # a string describing a type of the target to subscribe on. # currently only "Post" is supported. - # @return [String] target type - property :target_type + # @return [String] parent type + property :parent_type, xml_name: :target_type include Relayable diff --git a/lib/diaspora_federation/entities/poll_participation.rb b/lib/diaspora_federation/entities/poll_participation.rb index a994505..964012a 100644 --- a/lib/diaspora_federation/entities/poll_participation.rb +++ b/lib/diaspora_federation/entities/poll_participation.rb @@ -25,8 +25,8 @@ module DiasporaFederation property :poll_answer_guid # The {PollParticipation} parent is a {Poll} - # @return [String] target type - def target_type + # @return [String] parent type + def parent_type "Poll" end end diff --git a/lib/diaspora_federation/entities/relayable.rb b/lib/diaspora_federation/entities/relayable.rb index 39215c5..ce4b9b2 100644 --- a/lib/diaspora_federation/entities/relayable.rb +++ b/lib/diaspora_federation/entities/relayable.rb @@ -48,7 +48,7 @@ module DiasporaFederation if parent_author_signature.nil? privkey = DiasporaFederation.callbacks.trigger( - :fetch_author_private_key_by_entity_guid, target_type, parent_guid + :fetch_author_private_key_by_entity_guid, parent_type, parent_guid ) hash[:parent_author_signature] = Signing.sign_with_key(hash, privkey) unless privkey.nil? end @@ -79,7 +79,7 @@ module DiasporaFederation data, author_signature, pubkey ) - author_is_local = DiasporaFederation.callbacks.trigger(:entity_author_is_local?, target_type, parent_guid) + author_is_local = DiasporaFederation.callbacks.trigger(:entity_author_is_local?, parent_type, parent_guid) verify_parent_signature unless author_is_local end @@ -87,7 +87,7 @@ module DiasporaFederation # this happens only on downstream federation def verify_parent_signature - pubkey = DiasporaFederation.callbacks.trigger(:fetch_author_public_key_by_entity_guid, target_type, parent_guid) + pubkey = DiasporaFederation.callbacks.trigger(:fetch_author_public_key_by_entity_guid, parent_type, parent_guid) raise SignatureVerificationFailed, "failed to fetch public key for author of #{parent_guid}" if pubkey.nil? raise SignatureVerificationFailed, "wrong parent_author_signature" unless Signing.verify_signature( diff --git a/lib/diaspora_federation/test/factories.rb b/lib/diaspora_federation/test/factories.rb index 7d2d691..3248b46 100644 --- a/lib/diaspora_federation/test/factories.rb +++ b/lib/diaspora_federation/test/factories.rb @@ -92,7 +92,7 @@ module DiasporaFederation factory :participation_entity, class: DiasporaFederation::Entities::Participation, parent: :relayable_entity do guid - target_type "Post" + parent_type "Post" diaspora_id end @@ -118,7 +118,7 @@ module DiasporaFederation factory :like_entity, class: DiasporaFederation::Entities::Like, parent: :relayable_entity do positive true guid - target_type "Post" + parent_type "Post" diaspora_id end diff --git a/lib/diaspora_federation/validators/like_validator.rb b/lib/diaspora_federation/validators/like_validator.rb index f7222f8..2f5df43 100644 --- a/lib/diaspora_federation/validators/like_validator.rb +++ b/lib/diaspora_federation/validators/like_validator.rb @@ -6,6 +6,8 @@ module DiasporaFederation rule :guid, :guid + rule :parent_type, [:not_empty, regular_expression: {regex: /\A(Post|Comment)\z/}] + include RelayableValidator rule :diaspora_id, %i(not_empty diaspora_id) diff --git a/lib/diaspora_federation/validators/participation_validator.rb b/lib/diaspora_federation/validators/participation_validator.rb index 5f3921e..4ce797a 100644 --- a/lib/diaspora_federation/validators/participation_validator.rb +++ b/lib/diaspora_federation/validators/participation_validator.rb @@ -6,7 +6,7 @@ module DiasporaFederation rule :guid, :guid - rule :target_type, :not_empty + rule :parent_type, [:not_empty, regular_expression: {regex: /\APost\z/}] include RelayableValidator diff --git a/spec/lib/diaspora_federation/entities/comment_spec.rb b/spec/lib/diaspora_federation/entities/comment_spec.rb index ff39430..75b8656 100644 --- a/spec/lib/diaspora_federation/entities/comment_spec.rb +++ b/spec/lib/diaspora_federation/entities/comment_spec.rb @@ -21,9 +21,9 @@ XML it_behaves_like "a relayable Entity" - describe "#target_type" do - it "returns \"Post\" as target type" do - expect(described_class.new(data).target_type).to eq("Post") + describe "#parent_type" do + it "returns \"Post\" as parent type" do + expect(described_class.new(data).parent_type).to eq("Post") end end end diff --git a/spec/lib/diaspora_federation/entities/like_spec.rb b/spec/lib/diaspora_federation/entities/like_spec.rb index 5821f7e..7782f4a 100644 --- a/spec/lib/diaspora_federation/entities/like_spec.rb +++ b/spec/lib/diaspora_federation/entities/like_spec.rb @@ -7,7 +7,7 @@ module DiasporaFederation #{data[:positive]} #{data[:guid]} - #{data[:target_type]} + #{data[:parent_type]} #{data[:parent_guid]} #{data[:parent_author_signature]} #{data[:author_signature]} @@ -22,9 +22,9 @@ XML it_behaves_like "a relayable Entity" - describe "#target_type" do - it "returns data[:target_type] as target type" do - expect(described_class.new(data).target_type).to eq(data[:target_type]) + describe "#parent_type" do + it "returns data[:parent_type] as parent type" do + expect(described_class.new(data).parent_type).to eq(data[:parent_type]) end end end diff --git a/spec/lib/diaspora_federation/entities/message_spec.rb b/spec/lib/diaspora_federation/entities/message_spec.rb index e181920..c023fc7 100644 --- a/spec/lib/diaspora_federation/entities/message_spec.rb +++ b/spec/lib/diaspora_federation/entities/message_spec.rb @@ -23,9 +23,9 @@ XML it_behaves_like "a relayable Entity" - describe "#target_type" do - it "returns \"Conversation\" as target type" do - expect(described_class.new(data).target_type).to eq("Conversation") + describe "#parent_type" do + it "returns \"Conversation\" as parent type" do + expect(described_class.new(data).parent_type).to eq("Conversation") end end end diff --git a/spec/lib/diaspora_federation/entities/participation_spec.rb b/spec/lib/diaspora_federation/entities/participation_spec.rb index cf41587..7007880 100644 --- a/spec/lib/diaspora_federation/entities/participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/participation_spec.rb @@ -6,7 +6,7 @@ module DiasporaFederation <<-XML #{data[:guid]} - #{data[:target_type]} + #{data[:parent_type]} #{data[:parent_guid]} #{data[:parent_author_signature]} #{data[:author_signature]} @@ -21,9 +21,9 @@ XML it_behaves_like "a relayable Entity" - describe "#target_type" do - it "returns data[:target_type] as target type" do - expect(described_class.new(data).target_type).to eq(data[:target_type]) + describe "#parent_type" do + it "returns data[:parent_type] as parent type" do + expect(described_class.new(data).parent_type).to eq(data[:parent_type]) end end end diff --git a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb index 73ccc7f..f60fa96 100644 --- a/spec/lib/diaspora_federation/entities/poll_participation_spec.rb +++ b/spec/lib/diaspora_federation/entities/poll_participation_spec.rb @@ -21,9 +21,9 @@ XML it_behaves_like "a relayable Entity" - describe "#target_type" do - it "returns \"Poll\" as target type" do - expect(described_class.new(data).target_type).to eq("Poll") + describe "#parent_type" do + it "returns \"Poll\" as parent type" do + expect(described_class.new(data).parent_type).to eq("Poll") end end end diff --git a/spec/lib/diaspora_federation/entities/relayable_spec.rb b/spec/lib/diaspora_federation/entities/relayable_spec.rb index 16cfbbd..3a75702 100644 --- a/spec/lib/diaspora_federation/entities/relayable_spec.rb +++ b/spec/lib/diaspora_federation/entities/relayable_spec.rb @@ -15,7 +15,7 @@ module DiasporaFederation property :diaspora_id, xml_name: :diaspora_handle - def target_type + def parent_type "Target" end end diff --git a/spec/lib/diaspora_federation/validators/like_validator_spec.rb b/spec/lib/diaspora_federation/validators/like_validator_spec.rb index c6fcb11..6376c21 100644 --- a/spec/lib/diaspora_federation/validators/like_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/like_validator_spec.rb @@ -15,5 +15,13 @@ module DiasporaFederation let(:property) { :diaspora_id } let(:mandatory) { true } end + + describe "#parent_type" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :parent_type } + let(:wrong_values) { [nil, "", "any", "Postxxx", "post"] } + let(:correct_values) { %w(Post Comment) } + end + end end end diff --git a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb index 0a1f451..fad742a 100644 --- a/spec/lib/diaspora_federation/validators/participation_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/participation_validator_spec.rb @@ -17,9 +17,11 @@ module DiasporaFederation end end - describe "#target_type" do - it_behaves_like "a property that mustn't be empty" do - let(:property) { :target_type } + describe "#parent_type" do + it_behaves_like "a property with a value validation/restriction" do + let(:property) { :parent_type } + let(:wrong_values) { [nil, "", "any", "Postxxx", "post"] } + let(:correct_values) { ["Post"] } end end end diff --git a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb index 53a0729..a337ab6 100644 --- a/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb +++ b/spec/lib/diaspora_federation/validators/retraction_validator_spec.rb @@ -12,7 +12,7 @@ module DiasporaFederation let(:mandatory) { true } end - describe "#type" do + describe "#target_type" do it_behaves_like "a property that mustn't be empty" do let(:property) { :target_type } end