diff --git a/README.md b/README.md index a7818ed..4faf7e0 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ DiasporaFederation.configure do |config| on :person_webfinger_fetch do |handle| person = Person.find_local_by_diaspora_handle(handle) if person - DiasporaFederation::WebFinger::WebFinger.new( + DiasporaFederation::Discovery::WebFinger.new( # ... ) end diff --git a/app/controllers/diaspora_federation/webfinger_controller.rb b/app/controllers/diaspora_federation/webfinger_controller.rb index 3343e1c..22bc63a 100644 --- a/app/controllers/diaspora_federation/webfinger_controller.rb +++ b/app/controllers/diaspora_federation/webfinger_controller.rb @@ -48,11 +48,11 @@ module DiasporaFederation # creates the host-meta xml with the configured server_uri and caches it # @return [String] XML string def self.host_meta_xml - @host_meta_xml ||= WebFinger::HostMeta.from_base_url(DiasporaFederation.server_uri.to_s).to_xml + @host_meta_xml ||= Discovery::HostMeta.from_base_url(DiasporaFederation.server_uri.to_s).to_xml end def find_person_webfinger(query) - DiasporaFederation.callbacks.trigger(:person_webfinger_fetch, query.strip.downcase.gsub("acct:", "")) + DiasporaFederation.callbacks.trigger(:person_webfinger_fetch, query.strip.downcase.sub("acct:", "")) end end end diff --git a/lib/diaspora_federation.rb b/lib/diaspora_federation.rb index 1580b65..2dbf8c8 100644 --- a/lib/diaspora_federation.rb +++ b/lib/diaspora_federation.rb @@ -4,7 +4,7 @@ require "diaspora_federation/callbacks" require "diaspora_federation/properties_dsl" require "diaspora_federation/entity" -require "diaspora_federation/web_finger" +require "diaspora_federation/discovery" # diaspora* federation library module DiasporaFederation diff --git a/lib/diaspora_federation/discovery.rb b/lib/diaspora_federation/discovery.rb new file mode 100644 index 0000000..d917b32 --- /dev/null +++ b/lib/diaspora_federation/discovery.rb @@ -0,0 +1,13 @@ +module DiasporaFederation + # This module provides the namespace for the various classes implementing + # WebFinger and other protocols used for metadata discovery on remote servers + # in the Diaspora* network. + module Discovery + end +end + +require "diaspora_federation/discovery/exceptions" +require "diaspora_federation/discovery/xrd_document" +require "diaspora_federation/discovery/host_meta" +require "diaspora_federation/discovery/web_finger" +require "diaspora_federation/discovery/h_card" diff --git a/lib/diaspora_federation/web_finger/exceptions.rb b/lib/diaspora_federation/discovery/exceptions.rb similarity index 96% rename from lib/diaspora_federation/web_finger/exceptions.rb rename to lib/diaspora_federation/discovery/exceptions.rb index 5883dc7..cefced1 100644 --- a/lib/diaspora_federation/web_finger/exceptions.rb +++ b/lib/diaspora_federation/discovery/exceptions.rb @@ -1,5 +1,5 @@ module DiasporaFederation - module WebFinger + module Discovery # Raised, if the XML structure is invalid class InvalidDocument < RuntimeError end diff --git a/lib/diaspora_federation/web_finger/h_card.rb b/lib/diaspora_federation/discovery/h_card.rb similarity index 99% rename from lib/diaspora_federation/web_finger/h_card.rb rename to lib/diaspora_federation/discovery/h_card.rb index 76025e9..e3f149b 100644 --- a/lib/diaspora_federation/web_finger/h_card.rb +++ b/lib/diaspora_federation/discovery/h_card.rb @@ -1,5 +1,5 @@ module DiasporaFederation - module WebFinger + module Discovery # This class provides the means of generating an parsing account data to and # from the hCard format. # hCard is based on +RFC 2426+ (vCard) which got superseded by +RFC 6350+. diff --git a/lib/diaspora_federation/web_finger/host_meta.rb b/lib/diaspora_federation/discovery/host_meta.rb similarity index 99% rename from lib/diaspora_federation/web_finger/host_meta.rb rename to lib/diaspora_federation/discovery/host_meta.rb index 444c16f..fce8077 100644 --- a/lib/diaspora_federation/web_finger/host_meta.rb +++ b/lib/diaspora_federation/discovery/host_meta.rb @@ -1,6 +1,6 @@ module DiasporaFederation - module WebFinger + module Discovery # Generates and parses Host Meta documents. # # This is a minimal implementation of the standard, only to the degree of what diff --git a/lib/diaspora_federation/web_finger/web_finger.rb b/lib/diaspora_federation/discovery/web_finger.rb similarity index 99% rename from lib/diaspora_federation/web_finger/web_finger.rb rename to lib/diaspora_federation/discovery/web_finger.rb index a0ddc7a..ddeabd1 100644 --- a/lib/diaspora_federation/web_finger/web_finger.rb +++ b/lib/diaspora_federation/discovery/web_finger.rb @@ -1,5 +1,5 @@ module DiasporaFederation - module WebFinger + module Discovery # The WebFinger document used for Diaspora* user discovery is based on an older # draft of the specification you can find in the wiki of the "webfinger" project # on {http://code.google.com/p/webfinger/wiki/WebFingerProtocol Google Code} diff --git a/lib/diaspora_federation/web_finger/xrd_document.rb b/lib/diaspora_federation/discovery/xrd_document.rb similarity index 99% rename from lib/diaspora_federation/web_finger/xrd_document.rb rename to lib/diaspora_federation/discovery/xrd_document.rb index d35fbe2..c03f077 100644 --- a/lib/diaspora_federation/web_finger/xrd_document.rb +++ b/lib/diaspora_federation/discovery/xrd_document.rb @@ -1,5 +1,5 @@ module DiasporaFederation - module WebFinger + module Discovery # This class implements basic handling of XRD documents as far as it is # necessary in the context of the protocols used with Diaspora* federation. # diff --git a/lib/diaspora_federation/web_finger.rb b/lib/diaspora_federation/web_finger.rb deleted file mode 100644 index f0d6222..0000000 --- a/lib/diaspora_federation/web_finger.rb +++ /dev/null @@ -1,13 +0,0 @@ -module DiasporaFederation - # This module provides the namespace for the various classes implementing - # WebFinger and other protocols used for metadata discovery on remote servers - # in the Diaspora* network. - module WebFinger - end -end - -require "diaspora_federation/web_finger/exceptions" -require "diaspora_federation/web_finger/xrd_document" -require "diaspora_federation/web_finger/host_meta" -require "diaspora_federation/web_finger/web_finger" -require "diaspora_federation/web_finger/h_card" diff --git a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb index 62b42cb..3a7c87e 100644 --- a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb +++ b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb @@ -24,13 +24,13 @@ module DiasporaFederation expect(response.header["Content-Type"]).to include "application/xrd+xml" end - it "calls WebFinger::HostMeta.from_base_url with the base url" do - expect(WebFinger::HostMeta).to receive(:from_base_url).with("http://localhost:3000/").and_call_original + it "calls Discovery::HostMeta.from_base_url with the base url" do + expect(Discovery::HostMeta).to receive(:from_base_url).with("http://localhost:3000/").and_call_original get :host_meta end it "caches the xml" do - expect(WebFinger::HostMeta).to receive(:from_base_url).exactly(1).times.and_call_original + expect(Discovery::HostMeta).to receive(:from_base_url).exactly(1).times.and_call_original get :host_meta get :host_meta end diff --git a/spec/lib/diaspora_federation/web_finger/h_card_spec.rb b/spec/lib/diaspora_federation/discovery/h_card_spec.rb similarity index 91% rename from spec/lib/diaspora_federation/web_finger/h_card_spec.rb rename to spec/lib/diaspora_federation/discovery/h_card_spec.rb index c7e124a..3e763d2 100644 --- a/spec/lib/diaspora_federation/web_finger/h_card_spec.rb +++ b/spec/lib/diaspora_federation/discovery/h_card_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe WebFinger::HCard do + describe Discovery::HCard do let(:person) { FactoryGirl.create(:person) } let(:photo_large_url) { "#{person.url}/upload/large.png" } let(:photo_medium_url) { "#{person.url}/upload/medium.png" } @@ -93,12 +93,12 @@ HTML } it "must not create blank instances" do - expect { WebFinger::HCard.new({}) }.to raise_error ArgumentError + expect { Discovery::HCard.new({}) }.to raise_error ArgumentError end context "generation" do it "creates an instance from a data hash" do - hcard = WebFinger::HCard.new( + hcard = Discovery::HCard.new( guid: person.guid, nickname: person.nickname, full_name: person.full_name, @@ -115,13 +115,13 @@ HTML end it "fails if nil was given" do - expect { WebFinger::HCard.new(nil) }.to raise_error ArgumentError, "expected a Hash" + expect { Discovery::HCard.new(nil) }.to raise_error ArgumentError, "expected a Hash" end end context "parsing" do it "reads its own output" do - hcard = WebFinger::HCard.from_html(html) + hcard = Discovery::HCard.from_html(html) expect(hcard.guid).to eq(person.guid) expect(hcard.nickname).to eq(person.nickname) expect(hcard.full_name).to eq(person.full_name) @@ -137,7 +137,7 @@ HTML end it "is frozen after parsing" do - hcard = WebFinger::HCard.from_html(html) + hcard = Discovery::HCard.from_html(html) expect(hcard).to be_frozen end @@ -147,7 +147,7 @@ HTML "class=\"searchable\"><" ) - hcard = WebFinger::HCard.from_html(changed_html) + hcard = Discovery::HCard.from_html(changed_html) expect(hcard.searchable).to eq(false) end @@ -218,7 +218,7 @@ HTML HTML - hcard = WebFinger::HCard.from_html(historic_html) + hcard = Discovery::HCard.from_html(historic_html) expect(hcard.url).to eq(person.url) expect(hcard.photo_large_url).to eq(photo_large_url) expect(hcard.photo_medium_url).to eq(photo_medium_url) @@ -235,11 +235,11 @@ HTML #{person.full_name} HTML - expect { WebFinger::HCard.from_html(invalid_html) }.to raise_error WebFinger::InvalidData + expect { Discovery::HCard.from_html(invalid_html) }.to raise_error Discovery::InvalidData end it "fails if the document is not HTML" do - expect { WebFinger::HCard.from_html("") }.to raise_error WebFinger::InvalidData + expect { Discovery::HCard.from_html("") }.to raise_error Discovery::InvalidData end end end diff --git a/spec/lib/diaspora_federation/web_finger/host_meta_spec.rb b/spec/lib/diaspora_federation/discovery/host_meta_spec.rb similarity index 71% rename from spec/lib/diaspora_federation/web_finger/host_meta_spec.rb rename to spec/lib/diaspora_federation/discovery/host_meta_spec.rb index 0bb9545..2f82ebf 100644 --- a/spec/lib/diaspora_federation/web_finger/host_meta_spec.rb +++ b/spec/lib/diaspora_federation/discovery/host_meta_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe WebFinger::HostMeta do + describe Discovery::HostMeta do let(:base_url) { "https://pod.example.tld/" } let(:xml) { <<-XML @@ -11,28 +11,28 @@ XML } it "must not create blank instances" do - expect { WebFinger::HostMeta.new }.to raise_error NoMethodError + expect { Discovery::HostMeta.new }.to raise_error NoMethodError end context "generation" do it "creates a nice XML document" do - hm = WebFinger::HostMeta.from_base_url(base_url) + hm = Discovery::HostMeta.from_base_url(base_url) expect(hm.to_xml).to eq(xml) end it "appends a '/' if necessary" do - hm = WebFinger::HostMeta.from_base_url("https://pod.example.tld") + hm = Discovery::HostMeta.from_base_url("https://pod.example.tld") expect(hm.to_xml).to eq(xml) end it "fails if the base_url was omitted" do - expect { WebFinger::HostMeta.from_base_url("") }.to raise_error WebFinger::InvalidData + expect { Discovery::HostMeta.from_base_url("") }.to raise_error Discovery::InvalidData end end context "parsing" do it "parses its own output" do - hm = WebFinger::HostMeta.from_xml(xml) + hm = Discovery::HostMeta.from_xml(xml) expect(hm.webfinger_template_url).to eq("#{base_url}webfinger?q={uri}") end @@ -49,7 +49,7 @@ XML XML - hm = WebFinger::HostMeta.from_xml(historic_xml) + hm = Discovery::HostMeta.from_xml(historic_xml) expect(hm.webfinger_template_url).to eq("#{base_url}webfinger?q={uri}") end @@ -59,7 +59,7 @@ XML XML - expect { WebFinger::HostMeta.from_xml(invalid_xml) }.to raise_error WebFinger::InvalidData + expect { Discovery::HostMeta.from_xml(invalid_xml) }.to raise_error Discovery::InvalidData end it "fails if the document contains a malformed webfinger url" do @@ -69,11 +69,11 @@ XML XML - expect { WebFinger::HostMeta.from_xml(invalid_xml) }.to raise_error WebFinger::InvalidData + expect { Discovery::HostMeta.from_xml(invalid_xml) }.to raise_error Discovery::InvalidData end it "fails if the document is invalid" do - expect { WebFinger::HostMeta.from_xml("") }.to raise_error WebFinger::InvalidDocument + expect { Discovery::HostMeta.from_xml("") }.to raise_error Discovery::InvalidDocument end end end diff --git a/spec/lib/diaspora_federation/web_finger/web_finger_spec.rb b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb similarity index 87% rename from spec/lib/diaspora_federation/web_finger/web_finger_spec.rb rename to spec/lib/diaspora_federation/discovery/web_finger_spec.rb index e5313b7..340e321 100644 --- a/spec/lib/diaspora_federation/web_finger/web_finger_spec.rb +++ b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe WebFinger::WebFinger do + describe Discovery::WebFinger do let(:person) { FactoryGirl.create(:person) } let(:acct) { "acct:#{person.diaspora_handle}" } let(:public_key_base64) { Base64.strict_encode64(person.serialized_public_key) } @@ -22,12 +22,12 @@ XML } it "must not create blank instances" do - expect { WebFinger::WebFinger.new({}) }.to raise_error ArgumentError + expect { Discovery::WebFinger.new({}) }.to raise_error ArgumentError end context "generation" do it "creates a nice XML document" do - wf = WebFinger::WebFinger.new( + wf = Discovery::WebFinger.new( acct_uri: "acct:#{person.diaspora_handle}", alias_url: person.alias_url, hcard_url: person.hcard_url, @@ -42,13 +42,13 @@ XML end it "fails if nil was given" do - expect { WebFinger::WebFinger.new(nil) }.to raise_error ArgumentError, "expected a Hash" + expect { Discovery::WebFinger.new(nil) }.to raise_error ArgumentError, "expected a Hash" end end context "parsing" do it "reads its own output" do - wf = WebFinger::WebFinger.from_xml(xml) + wf = Discovery::WebFinger.from_xml(xml) expect(wf.acct_uri).to eq(acct) expect(wf.alias_url).to eq(person.alias_url) expect(wf.hcard_url).to eq(person.hcard_url) @@ -62,7 +62,7 @@ XML end it "is frozen after parsing" do - wf = WebFinger::WebFinger.from_xml(xml) + wf = Discovery::WebFinger.from_xml(xml) expect(wf).to be_frozen end @@ -84,7 +84,7 @@ XML XML - wf = WebFinger::WebFinger.from_xml(historic_xml) + wf = Discovery::WebFinger.from_xml(historic_xml) expect(wf.acct_uri).to eq(acct) expect(wf.alias_url).to eq(person.alias_url) expect(wf.hcard_url).to eq(person.hcard_url) @@ -103,11 +103,11 @@ XML XML - expect { WebFinger::WebFinger.from_xml(invalid_xml) }.to raise_error WebFinger::InvalidData + expect { Discovery::WebFinger.from_xml(invalid_xml) }.to raise_error Discovery::InvalidData end it "fails if the document is not XML" do - expect { WebFinger::WebFinger.from_xml("") }.to raise_error WebFinger::InvalidDocument + expect { Discovery::WebFinger.from_xml("") }.to raise_error Discovery::InvalidDocument end end end diff --git a/spec/lib/diaspora_federation/web_finger/xrd_document_spec.rb b/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb similarity index 87% rename from spec/lib/diaspora_federation/web_finger/xrd_document_spec.rb rename to spec/lib/diaspora_federation/discovery/xrd_document_spec.rb index 18d566d..42ba34f 100644 --- a/spec/lib/diaspora_federation/web_finger/xrd_document_spec.rb +++ b/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb @@ -1,5 +1,5 @@ module DiasporaFederation - describe WebFinger::XrdDocument do + describe Discovery::XrdDocument do let(:xml) { < @@ -49,7 +49,7 @@ XML context "generation" do it "creates the xml document" do - doc = WebFinger::XrdDocument.new + doc = Discovery::XrdDocument.new doc.expires = data[:expires] doc.subject = data[:subject] @@ -71,16 +71,16 @@ XML context "parsing" do it "reads the xml document" do - doc = WebFinger::XrdDocument.xml_data(xml) + doc = Discovery::XrdDocument.xml_data(xml) expect(doc).to eq(data) end it "raises InvalidDocument if the xml is empty" do - expect { WebFinger::XrdDocument.xml_data("") }.to raise_error WebFinger::InvalidDocument + expect { Discovery::XrdDocument.xml_data("") }.to raise_error Discovery::InvalidDocument end it "raises InvalidDocument if the xml is no XRD document" do - expect { WebFinger::XrdDocument.xml_data("") }.to raise_error WebFinger::InvalidDocument + expect { Discovery::XrdDocument.xml_data("") }.to raise_error Discovery::InvalidDocument end end end diff --git a/test/dummy/config/initializers/diaspora_federation.rb b/test/dummy/config/initializers/diaspora_federation.rb index a41a7c5..1374fff 100644 --- a/test/dummy/config/initializers/diaspora_federation.rb +++ b/test/dummy/config/initializers/diaspora_federation.rb @@ -1,4 +1,4 @@ -require "diaspora_federation/web_finger" +require "diaspora_federation/discovery" # configure the federation engine DiasporaFederation.configure do |config| @@ -9,7 +9,7 @@ DiasporaFederation.configure do |config| on :person_webfinger_fetch do |handle| person = Person.find_by(diaspora_handle: handle) if person - DiasporaFederation::WebFinger::WebFinger.new( + DiasporaFederation::Discovery::WebFinger.new( acct_uri: "acct:#{person.diaspora_handle}", alias_url: person.alias_url, hcard_url: person.hcard_url, @@ -26,7 +26,7 @@ DiasporaFederation.configure do |config| on :person_hcard_fetch do |guid| person = Person.find_by(guid: guid) if person - DiasporaFederation::WebFinger::HCard.new( + DiasporaFederation::Discovery::HCard.new( guid: person.guid, nickname: person.nickname, full_name: person.full_name,