From 5fef7633c3aaf47db2592749e506f40b581c0371 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Thu, 27 Apr 2017 02:37:55 +0200 Subject: [PATCH] Make optional properties optional when generating webfinger --- .../discovery/web_finger.rb | 30 +++++++++++-------- .../discovery/web_finger_spec.rb | 26 +++++++++++----- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/lib/diaspora_federation/discovery/web_finger.rb b/lib/diaspora_federation/discovery/web_finger.rb index 28c7f01..30cb9ce 100644 --- a/lib/diaspora_federation/discovery/web_finger.rb +++ b/lib/diaspora_federation/discovery/web_finger.rb @@ -38,7 +38,7 @@ module DiasporaFederation # @!attribute [r] alias_url # @note could be nil # @return [String] link to the users profile - property :alias_url, :string + property :alias_url, :string, default: nil # @!attribute [r] hcard_url # @return [String] link to the +hCard+ @@ -50,7 +50,7 @@ module DiasporaFederation # @!attribute [r] profile_url # @return [String] link to the users profile - property :profile_url, :string + property :profile_url, :string, default: nil # @!attribute [r] atom_url # This atom feed is an Activity Stream of the user's public posts. diaspora* @@ -61,18 +61,18 @@ module DiasporaFederation # Note that this feed MAY also be made available through the PubSubHubbub # mechanism by supplying a in the atom feed itself. # @return [String] atom feed url - property :atom_url, :string + property :atom_url, :string, default: nil # @!attribute [r] salmon_url # @note could be nil # @return [String] salmon endpoint url # @see https://cdn.rawgit.com/salmon-protocol/salmon-protocol/master/draft-panzer-salmon-00.html#SMLR # Panzer draft for Salmon, paragraph 3.3 - property :salmon_url, :string + property :salmon_url, :string, default: nil # @!attribute [r] subscribe_url # This url is used to find another user on the home-pod of the user in the webfinger. - property :subscribe_url, :string + property :subscribe_url, :string, default: nil # +hcard_url+ link relation REL_HCARD = "http://microformats.org/profile/hcard".freeze @@ -97,8 +97,8 @@ module DiasporaFederation # @return [String] XML string def to_xml doc = XrdDocument.new - doc.subject = @acct_uri - doc.aliases << @alias_url + doc.subject = acct_uri + doc.aliases << alias_url add_links_to(doc) @@ -147,14 +147,18 @@ module DiasporaFederation end def add_links_to(doc) - doc.links << {rel: REL_HCARD, type: "text/html", href: @hcard_url} - doc.links << {rel: REL_SEED, type: "text/html", href: @seed_url} + doc.links << {rel: REL_HCARD, type: "text/html", href: hcard_url} + doc.links << {rel: REL_SEED, type: "text/html", href: seed_url} - doc.links << {rel: REL_PROFILE, type: "text/html", href: @profile_url} - doc.links << {rel: REL_ATOM, type: "application/atom+xml", href: @atom_url} - doc.links << {rel: REL_SALMON, href: @salmon_url} + add_optional_links_to(doc) + end - doc.links << {rel: REL_SUBSCRIBE, template: @subscribe_url} + def add_optional_links_to(doc) + doc.links << {rel: REL_PROFILE, type: "text/html", href: profile_url} if profile_url + doc.links << {rel: REL_ATOM, type: "application/atom+xml", href: atom_url} if atom_url + doc.links << {rel: REL_SALMON, href: salmon_url} if salmon_url + + doc.links << {rel: REL_SUBSCRIBE, template: subscribe_url} if subscribe_url end private_class_method def self.find_link(links, rel) diff --git a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb index 15d92e6..afdca7d 100644 --- a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb +++ b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb @@ -29,6 +29,15 @@ module DiasporaFederation +XML + + let(:minimal_xml) { <<-XML } + + + #{acct} + + + XML let(:string) { "WebFinger:#{data[:acct_uri]}" } @@ -40,6 +49,15 @@ XML wf = Discovery::WebFinger.new(data) expect(wf.to_xml).to eq(xml) end + + it "creates minimal XML document" do + wf = Discovery::WebFinger.new( + acct_uri: "acct:#{person.diaspora_id}", + hcard_url: person.hcard_url, + seed_url: person.url + ) + expect(wf.to_xml).to eq(minimal_xml) + end end context "parsing" do @@ -56,14 +74,6 @@ XML end it "reads minimal xml" do - minimal_xml = <<-XML - - - #{acct} - - - -XML wf = Discovery::WebFinger.from_xml(minimal_xml) expect(wf.acct_uri).to eq(acct) expect(wf.hcard_url).to eq(person.hcard_url)