From 86d52a0da3013fbf023e18d531b7312584baf0a5 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 18 Feb 2018 01:36:31 +0100 Subject: [PATCH 1/3] Bump diaspora_federation --- Gemfile | 6 +++--- Gemfile.lock | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index b74d7524a..acf18273c 100644 --- a/Gemfile +++ b/Gemfile @@ -15,8 +15,8 @@ gem "unicorn-worker-killer", "0.4.4" # Federation -gem "diaspora_federation-json_schema", "0.2.3" -gem "diaspora_federation-rails", "0.2.3" +gem "diaspora_federation-json_schema", "0.2.4" +gem "diaspora_federation-rails", "0.2.4" # API and JSON @@ -294,7 +294,7 @@ group :test do gem "timecop", "0.9.1" gem "webmock", "3.0.1", require: false - gem "diaspora_federation-test", "0.2.3" + gem "diaspora_federation-test", "0.2.4" # Coverage gem "coveralls", "0.8.21", require: false diff --git a/Gemfile.lock b/Gemfile.lock index 1bfe6a95e..b91f009e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -166,18 +166,18 @@ GEM devise rails (>= 3.0.4) diaspora-prosody-config (0.0.7) - diaspora_federation (0.2.3) + diaspora_federation (0.2.4) faraday (>= 0.9.0, < 0.15.0) faraday_middleware (>= 0.10.0, < 0.13.0) nokogiri (~> 1.6, >= 1.6.8) typhoeus (~> 1.0) valid (~> 1.0) - diaspora_federation-json_schema (0.2.3) - diaspora_federation-rails (0.2.3) + diaspora_federation-json_schema (0.2.4) + diaspora_federation-rails (0.2.4) actionpack (>= 4.2, < 6) - diaspora_federation (= 0.2.3) - diaspora_federation-test (0.2.3) - diaspora_federation (= 0.2.3) + diaspora_federation (= 0.2.4) + diaspora_federation-test (0.2.4) + diaspora_federation (= 0.2.4) fabrication (~> 2.16) uuid (~> 2.3, >= 2.3.8) diff-lcs (1.3) @@ -217,7 +217,7 @@ GEM http-cookie (~> 1.0.0) faraday_middleware (0.12.2) faraday (>= 0.7.4, < 1.0) - ffi (1.9.18) + ffi (1.9.22) fixture_builder (0.5.0) activerecord (>= 2) activesupport (>= 2) @@ -785,9 +785,9 @@ DEPENDENCIES devise (= 4.4.1) devise_lastseenable (= 0.0.6) diaspora-prosody-config (= 0.0.7) - diaspora_federation-json_schema (= 0.2.3) - diaspora_federation-rails (= 0.2.3) - diaspora_federation-test (= 0.2.3) + diaspora_federation-json_schema (= 0.2.4) + diaspora_federation-rails (= 0.2.4) + diaspora_federation-test (= 0.2.4) entypo-rails (= 3.0.0) eye (= 0.9.2) factory_girl_rails (= 4.8.0) From 0b4b3515a500f864e520d216700e85ce18fb3fea Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 18 Feb 2018 01:43:50 +0100 Subject: [PATCH 2/3] Start sending updated_at timestamp as edited_at for profiles This can be used in later diaspora versions to order the profile updates so we don't overwrite a newer profile with older data. --- lib/diaspora/federation/entities.rb | 1 + spec/lib/diaspora/federation/entities_spec.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb index f8d8aa1a5..deda9243e 100644 --- a/lib/diaspora/federation/entities.rb +++ b/lib/diaspora/federation/entities.rb @@ -169,6 +169,7 @@ module Diaspora def self.profile(profile) DiasporaFederation::Entities::Profile.new( author: profile.diaspora_handle, + edited_at: profile.updated_at, first_name: profile.first_name, last_name: profile.last_name, image_url: profile.image_url, diff --git a/spec/lib/diaspora/federation/entities_spec.rb b/spec/lib/diaspora/federation/entities_spec.rb index c0ab1aff8..a6fabd175 100644 --- a/spec/lib/diaspora/federation/entities_spec.rb +++ b/spec/lib/diaspora/federation/entities_spec.rb @@ -201,6 +201,7 @@ describe Diaspora::Federation::Entities do expect(federation_entity).to be_instance_of(DiasporaFederation::Entities::Profile) expect(federation_entity.author).to eq(diaspora_entity.diaspora_handle) + expect(federation_entity.edited_at).to eq(diaspora_entity.updated_at) expect(federation_entity.first_name).to eq(diaspora_entity.first_name) expect(federation_entity.last_name).to eq(diaspora_entity.last_name) expect(federation_entity.image_url).to eq(diaspora_entity.image_url) From 602a1dcd5501c4370a247b01ab7b3eb67d13baca Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 18 Feb 2018 03:50:38 +0100 Subject: [PATCH 3/3] Store edited_at for relayables in additional_data closes #7718 --- Changelog.md | 1 + lib/diaspora/federation/entities.rb | 1 + lib/diaspora/federation/receive.rb | 11 +++++++++- spec/lib/diaspora/federation/entities_spec.rb | 22 +++++++++++++++++++ spec/lib/diaspora/federation/receive_spec.rb | 2 +- 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Changelog.md b/Changelog.md index 9c9c0daf5..e8a000b03 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ ## Bug fixes * Prevent duplicate mention notifications when the post is received twice [#7721](https://github.com/diaspora/diaspora/pull/7721) +* Fixed a compatiblitiy issue with non-diaspora\* webfingers [#7718](https://github.com/diaspora/diaspora/pull/7718) ## Features * Add basic html5 audio/video embedding support [#6418](https://github.com/diaspora/diaspora/pull/6418) diff --git a/lib/diaspora/federation/entities.rb b/lib/diaspora/federation/entities.rb index deda9243e..8a842b409 100644 --- a/lib/diaspora/federation/entities.rb +++ b/lib/diaspora/federation/entities.rb @@ -49,6 +49,7 @@ module Diaspora parent_guid: comment.post.guid, text: comment.text, created_at: comment.created_at, + edited_at: comment.signature&.additional_data&.[]("edited_at"), author_signature: comment.signature.try(:author_signature), parent: related_entity(comment.post) }, diff --git a/lib/diaspora/federation/receive.rb b/lib/diaspora/federation/receive.rb index 51954db01..7148c2521 100644 --- a/lib/diaspora/federation/receive.rb +++ b/lib/diaspora/federation/receive.rb @@ -272,10 +272,19 @@ module Diaspora end end + # This are property names that are known by the +diaspora_federation+ library as properties but not + # specially stored in our database and therefore need to be stored in the +additional_data+ field. + UNKNOWN_PROPERTIES_NAMES = %i[edited_at].freeze + private_constant :UNKNOWN_PROPERTIES_NAMES + private_class_method def self.build_signature(klass, entity) + special_additional_data = UNKNOWN_PROPERTIES_NAMES.map {|name| + [name.to_s, entity.public_send(name)] if entity.respond_to?(name) && entity.signature_order.include?(name) + }.compact.to_h + klass.reflect_on_association(:signature).klass.new( author_signature: entity.author_signature, - additional_data: entity.additional_data, + additional_data: entity.additional_data.merge(special_additional_data), signature_order: SignatureOrder.find_or_create_by!(order: entity.signature_order.join(" ")) ) end diff --git a/spec/lib/diaspora/federation/entities_spec.rb b/spec/lib/diaspora/federation/entities_spec.rb index a6fabd175..51e67a177 100644 --- a/spec/lib/diaspora/federation/entities_spec.rb +++ b/spec/lib/diaspora/federation/entities_spec.rb @@ -29,6 +29,7 @@ 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.created_at).to eq(diaspora_entity.created_at) expect(federation_entity.author_signature).to be_nil expect(federation_entity.additional_data).to be_empty end @@ -42,6 +43,27 @@ 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.created_at).to eq(diaspora_entity.created_at) + expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature) + expect(federation_entity.signature_order.map(&:to_s)).to eq(diaspora_entity.signature.signature_order.order.split) + expect(federation_entity.additional_data).to eq(diaspora_entity.signature.additional_data) + end + + it "builds a comment with edited_at" do + edited_at = Time.now.utc + 3600 + diaspora_entity = FactoryGirl.build( + :comment, + signature: FactoryGirl.build(:comment_signature, additional_data: {"edited_at" => edited_at}) + ) + 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.created_at).to eq(diaspora_entity.created_at) + expect(federation_entity.edited_at).to eq(edited_at) expect(federation_entity.author_signature).to eq(diaspora_entity.signature.author_signature) expect(federation_entity.signature_order.map(&:to_s)).to eq(diaspora_entity.signature.signature_order.order.split) expect(federation_entity.additional_data).to eq(diaspora_entity.signature.additional_data) diff --git a/spec/lib/diaspora/federation/receive_spec.rb b/spec/lib/diaspora/federation/receive_spec.rb index 767e67796..deaea880e 100644 --- a/spec/lib/diaspora/federation/receive_spec.rb +++ b/spec/lib/diaspora/federation/receive_spec.rb @@ -110,7 +110,7 @@ describe Diaspora::Federation::Receive do expect(comment.signature).not_to be_nil expect(comment.signature.author_signature).to eq("aa") - expect(comment.signature.additional_data).to eq("new_property" => "data") + expect(comment.signature.additional_data).to eq("new_property" => "data", "edited_at" => comment_entity.edited_at) expect(comment.signature.order).to eq(comment_entity.signature_order.map(&:to_s)) end