+ def webfinger
+ person_wf = find_person_webfinger(params.require(:resource))
if person_wf.nil?
head :not_found
else
logger.info "webfinger profile request for: #{person_wf.acct_uri}"
- render xml: person_wf.to_xml, content_type: "application/xrd+xml"
+
+ respond_to do |format|
+ format.any(:jrd, :json, :html) do
+ headers["Access-Control-Allow-Origin"] = "*"
+ render json: JSON.pretty_generate(person_wf.to_json), content_type: "application/jrd+json"
+ end
+ format.any(:xrd, :xml) do
+ render xml: person_wf.to_xml, content_type: "application/xrd+xml"
+ end
+ end
end
end
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
new file mode 100644
index 0000000..10cadb2
--- /dev/null
+++ b/config/initializers/mime_types.rb
@@ -0,0 +1,3 @@
+# mime types for webfinger
+Mime::Type.register "application/jrd+json", :jrd
+Mime::Type.register "application/xrd+xml", :xrd
diff --git a/config/routes.rb b/config/routes.rb
index cffd505..5e7086f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -9,8 +9,8 @@ DiasporaFederation::Engine.routes.draw do
end
controller :webfinger do
- get ".well-known/host-meta" => :host_meta, :as => "host_meta"
- get "webfinger" => :legacy_webfinger, :as => "legacy_webfinger"
+ get ".well-known/host-meta" => :host_meta, :as => "host_meta"
+ get ".well-known/webfinger" => :webfinger, :as => "webfinger"
end
controller :h_card do
diff --git a/docs/discovery/webfinger.md b/docs/discovery/webfinger.md
index 75a157e..b2044f2 100644
--- a/docs/discovery/webfinger.md
+++ b/docs/discovery/webfinger.md
@@ -6,7 +6,7 @@ diaspora\* uses an old draft of [WebFinger][webfinger-draft] to discover users f
{% include warning_box.html
title="Old WebFinger"
- content="diaspora* doesn't yet support the RFC 7033 WebFinger!
"
+ content="diaspora* doesn't yet fully support the RFC 7033 WebFinger!
"
%}
## WebFinger endpoint discovery
@@ -54,7 +54,7 @@ Content-Type: application/xrd+xml; charset=utf-8
~~~xml
-
+
~~~
@@ -70,7 +70,7 @@ of the searched person.
#### Example
~~~
-GET /webfinger?q=acct:alice@example.org
+GET /.well-known/webfinger.xml?resource=acct:alice@example.org
Host: example.org
~~~
@@ -117,6 +117,7 @@ Content-Type: application/xrd+xml; charset=utf-8
* [RFC 6415: Web Host Metadata][host-meta]
* [WebFinger draft][webfinger-draft]
* [Extensible Resource Descriptor (XRD) Version 1.0][xrd]
+* [RFC 7033: WebFinger][webfinger-rfc]
[host-meta]: https://tools.ietf.org/html/rfc6415
[webfinger-draft]: https://tools.ietf.org/html/draft-jones-appsawg-webfinger-06
diff --git a/lib/diaspora_federation/discovery/host_meta.rb b/lib/diaspora_federation/discovery/host_meta.rb
index 0c2f8fc..076306f 100644
--- a/lib/diaspora_federation/discovery/host_meta.rb
+++ b/lib/diaspora_federation/discovery/host_meta.rb
@@ -26,7 +26,7 @@ module DiasporaFederation
end
# URL fragment to append to the base URL
- WEBFINGER_SUFFIX = "/webfinger?q={uri}".freeze
+ WEBFINGER_SUFFIX = "/.well-known/webfinger.xml?resource={uri}".freeze
# Returns the WebFinger URL that was used to build this instance (either from
# xml or by giving a base URL).
diff --git a/lib/diaspora_federation/discovery/web_finger.rb b/lib/diaspora_federation/discovery/web_finger.rb
index f6c1f0e..70f13f1 100644
--- a/lib/diaspora_federation/discovery/web_finger.rb
+++ b/lib/diaspora_federation/discovery/web_finger.rb
@@ -107,15 +107,11 @@ module DiasporaFederation
# Creates the XML string from the current WebFinger instance
# @return [String] XML string
def to_xml
- doc = XrdDocument.new
+ to_xrd.to_xml
+ end
- doc.subject = acct_uri
- doc.aliases.concat(additional_data[:aliases]) if additional_data[:aliases]
- doc.properties.merge!(additional_data[:properties]) if additional_data[:properties]
-
- add_links_to(doc)
-
- doc.to_xml
+ def to_json
+ to_xrd.to_json
end
# Creates a WebFinger instance from the given XML string
@@ -159,6 +155,16 @@ module DiasporaFederation
end
end
+ def to_xrd
+ XrdDocument.new.tap do |xrd|
+ xrd.subject = acct_uri
+ xrd.aliases.concat(additional_data[:aliases]) if additional_data[:aliases]
+ xrd.properties.merge!(additional_data[:properties]) if additional_data[:properties]
+
+ add_links_to(xrd)
+ end
+ 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}
diff --git a/lib/diaspora_federation/discovery/xrd_document.rb b/lib/diaspora_federation/discovery/xrd_document.rb
index 09b0721..a888064 100644
--- a/lib/diaspora_federation/discovery/xrd_document.rb
+++ b/lib/diaspora_federation/discovery/xrd_document.rb
@@ -69,9 +69,9 @@ module DiasporaFederation
def to_xml
Nokogiri::XML::Builder.new(encoding: "UTF-8") {|xml|
xml.XRD("xmlns" => XMLNS) {
- xml.Expires(@expires.strftime(DATETIME_FORMAT)) if @expires.instance_of?(DateTime)
+ xml.Expires(expires.strftime(DATETIME_FORMAT)) if expires.instance_of?(DateTime)
- xml.Subject(@subject) if !@subject.nil? && !@subject.empty?
+ xml.Subject(subject) if !subject.nil? && !subject.empty?
add_aliases_to(xml)
add_properties_to(xml)
@@ -80,6 +80,16 @@ module DiasporaFederation
}.to_xml
end
+ def to_json
+ {
+ subject: subject,
+ expires: expires,
+ aliases: (aliases if aliases.any?),
+ links: (links if links.any?),
+ properties: (properties if properties.any?)
+ }.reject {|_, v| v.nil? }
+ end
+
# Parse the XRD document from the given string and create a hash containing
# the extracted data.
#
@@ -107,23 +117,26 @@ module DiasporaFederation
private
+ attr_reader :expires
+ attr_reader :subject
+
NS = {xrd: XMLNS}.freeze
def add_aliases_to(xml)
- @aliases.each do |a|
+ aliases.each do |a|
next if !a.instance_of?(String) || a.empty?
xml.Alias(a.to_s)
end
end
def add_properties_to(xml)
- @properties.each do |type, val|
+ properties.each do |type, val|
xml.Property(val.to_s, type: type)
end
end
def add_links_to(xml)
- @links.each do |l|
+ links.each do |l|
attrs = {}
LINK_ATTRS.each do |attr|
attrs[attr.to_s] = l[attr] if l.key?(attr)
diff --git a/spec/controllers/diaspora_federation/rails4_spec.rb b/spec/controllers/diaspora_federation/rails4_spec.rb
index 4d506b5..7225c9a 100644
--- a/spec/controllers/diaspora_federation/rails4_spec.rb
+++ b/spec/controllers/diaspora_federation/rails4_spec.rb
@@ -17,13 +17,13 @@ module DiasporaFederation
public_key: alice.serialized_public_key
).to_xml
- get :legacy_webfinger, q: alice.diaspora_id
+ get :webfinger, format: :xml, resource: alice.diaspora_id
expect(response).to be_success
expect(response.body).to eq(webfinger_xrd)
end
it "404s when the person does not exist" do
- get :legacy_webfinger, q: "me@mydiaspora.pod.com"
+ get :webfinger, format: :xml, resource: "me@mydiaspora.pod.com"
expect(response).to be_not_found
end
end
diff --git a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb
index e26ceeb..862a7fb 100644
--- a/spec/controllers/diaspora_federation/webfinger_controller_spec.rb
+++ b/spec/controllers/diaspora_federation/webfinger_controller_spec.rb
@@ -15,7 +15,7 @@ module DiasporaFederation
it "contains the webfinger-template" do
get :host_meta
- expect(response.body).to include "template=\"http://localhost:3000/webfinger?q={uri}\""
+ expect(response.body).to include "template=\"http://localhost:3000/.well-known/webfinger.xml?resource={uri}\""
end
it "returns a application/xrd+xml" do
@@ -35,31 +35,88 @@ module DiasporaFederation
end
end
- describe "GET #legacy_webfinger", rails: 5 do
- it "succeeds when the person exists" do
- get :legacy_webfinger, params: {q: alice.diaspora_id}
+ describe "GET #webfinger", rails: 5 do
+ it "uses the JRD format as default" do
+ get :webfinger, params: {resource: alice.diaspora_id}
expect(response).to be_success
+ expect(response.header["Content-Type"]).to include "application/jrd+json"
end
- it "succeeds with 'acct:' in the query when the person exists" do
- get :legacy_webfinger, params: {q: "acct:#{alice.diaspora_id}"}
- expect(response).to be_success
+ context "json", exceptions: :catch do
+ it "succeeds when the person exists" do
+ get :webfinger, format: :json, params: {resource: alice.diaspora_id}
+ expect(response).to be_success
+ end
+
+ it "succeeds with 'acct:' in the query when the person exists" do
+ get :webfinger, format: :json, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response).to be_success
+ end
+
+ it "contains the diaspora* ID" do
+ get :webfinger, format: :json, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response.body).to include "\"subject\": \"acct:alice@localhost:3000\""
+ end
+
+ it "returns a application/jrd+json" do
+ get :webfinger, format: :json, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response.header["Content-Type"]).to include "application/jrd+json"
+ end
+
+ it "adds a Access-Control-Allow-Origin header" do
+ get :webfinger, format: :json, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response.header["Access-Control-Allow-Origin"]).to eq("*")
+ end
+
+ it "404s when the person does not exist" do
+ get :webfinger, format: :json, params: {resource: "me@mydiaspora.pod.com"}
+ expect(response).to be_not_found
+ end
+
+ it "raises when the resource parameter is missing" do
+ expect {
+ get :webfinger, format: :json
+ }.to raise_error ActionController::ParameterMissing, "param is missing or the value is empty: resource"
+ end
+
+ it "calls the fetch_person_for_webfinger callback" do
+ expect_callback(:fetch_person_for_webfinger, "alice@localhost:3000").and_call_original
+
+ get :webfinger, format: :json, params: {resource: "acct:alice@localhost:3000"}
+ end
end
- it "contains the diaspora* ID" do
- get :legacy_webfinger, params: {q: "acct:#{alice.diaspora_id}"}
- expect(response.body).to include "acct:alice@localhost:3000"
- end
+ context "xml" do
+ it "succeeds when the person exists" do
+ get :webfinger, format: :json, params: {resource: alice.diaspora_id}
+ expect(response).to be_success
+ end
- it "404s when the person does not exist" do
- get :legacy_webfinger, params: {q: "me@mydiaspora.pod.com"}
- expect(response).to be_not_found
- end
+ it "succeeds with 'acct:' in the query when the person exists" do
+ get :webfinger, format: :xml, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response).to be_success
+ end
- it "calls the fetch_person_for_webfinger callback" do
- expect_callback(:fetch_person_for_webfinger, "alice@localhost:3000").and_call_original
+ it "contains the diaspora* ID" do
+ get :webfinger, format: :xml, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response.body).to include "acct:alice@localhost:3000"
+ end
- get :legacy_webfinger, params: {q: "acct:alice@localhost:3000"}
+ it "returns a application/xrd+xml" do
+ get :webfinger, format: :xml, params: {resource: "acct:#{alice.diaspora_id}"}
+ expect(response.header["Content-Type"]).to include "application/xrd+xml"
+ end
+
+ it "404s when the person does not exist" do
+ get :webfinger, format: :xml, params: {resource: "me@mydiaspora.pod.com"}
+ expect(response).to be_not_found
+ end
+
+ it "calls the fetch_person_for_webfinger callback" do
+ expect_callback(:fetch_person_for_webfinger, "alice@localhost:3000").and_call_original
+
+ get :webfinger, format: :xml, params: {resource: "acct:alice@localhost:3000"}
+ end
end
end
end
diff --git a/spec/lib/diaspora_federation/discovery/discovery_spec.rb b/spec/lib/diaspora_federation/discovery/discovery_spec.rb
index a9a36b3..5c380ac 100644
--- a/spec/lib/diaspora_federation/discovery/discovery_spec.rb
+++ b/spec/lib/diaspora_federation/discovery/discovery_spec.rb
@@ -49,7 +49,7 @@ module DiasporaFederation
it "fetches the userdata and returns a person object" do
stub_request(:get, "https://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 200, body: webfinger_xrd)
stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}")
.to_return(status: 200, body: hcard_html)
@@ -76,7 +76,7 @@ module DiasporaFederation
it "fetches the userdata and saves the person object via callback" do
stub_request(:get, "https://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 200, body: webfinger_xrd)
stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}")
.to_return(status: 200, body: hcard_html)
@@ -96,7 +96,7 @@ module DiasporaFederation
.to_return(status: 404)
stub_request(:get, "http://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 200, body: webfinger_xrd)
stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}")
.to_return(status: 200, body: hcard_html)
@@ -113,7 +113,7 @@ module DiasporaFederation
.to_raise(OpenSSL::SSL::SSLError)
stub_request(:get, "http://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 200, body: webfinger_xrd)
stub_request(:get, "http://localhost:3000/hcard/users/#{alice.guid}")
.to_return(status: 200, body: hcard_html)
@@ -130,7 +130,7 @@ module DiasporaFederation
stub_request(:get, "https://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 200, body: modified_webfinger)
expect { Discovery::Discovery.new(account).fetch_and_save }.to raise_error Discovery::DiscoveryError
@@ -139,7 +139,7 @@ module DiasporaFederation
it "fails if the diaspora* ID was not found" do
stub_request(:get, "https://localhost:3000/.well-known/host-meta")
.to_return(status: 200, body: host_meta_xrd)
- stub_request(:get, "http://localhost:3000/webfinger?q=acct:#{account}")
+ stub_request(:get, "http://localhost:3000/.well-known/webfinger.xml?resource=acct:#{account}")
.to_return(status: 404)
expect { Discovery::Discovery.new(account).fetch_and_save }.to raise_error Discovery::DiscoveryError
diff --git a/spec/lib/diaspora_federation/discovery/host_meta_spec.rb b/spec/lib/diaspora_federation/discovery/host_meta_spec.rb
index 65f4d47..aeb6fa6 100644
--- a/spec/lib/diaspora_federation/discovery/host_meta_spec.rb
+++ b/spec/lib/diaspora_federation/discovery/host_meta_spec.rb
@@ -4,7 +4,7 @@ module DiasporaFederation
let(:xml) { <<-XML }
-
+
XML
@@ -36,7 +36,7 @@ XML
context "parsing" do
it "parses its own output" do
hm = Discovery::HostMeta.from_xml(xml)
- expect(hm.webfinger_template_url).to eq("#{base_url}webfinger?q={uri}")
+ expect(hm.webfinger_template_url).to eq("#{base_url}.well-known/webfinger.xml?resource={uri}")
end
it "also reads old-style XML" do
diff --git a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb
index fbd6763..ce2a612 100644
--- a/spec/lib/diaspora_federation/discovery/web_finger_spec.rb
+++ b/spec/lib/diaspora_federation/discovery/web_finger_spec.rb
@@ -44,22 +44,36 @@ XML
it_behaves_like "an Entity subclass"
context "generation" do
- it "creates a nice XML document" do
- wf = Discovery::WebFinger.new(data, aliases: [person.alias_url])
- expect(wf.to_xml).to eq(xml)
- end
+ let(:minimal_data) { {acct_uri: acct, hcard_url: person.hcard_url, seed_url: person.url} }
+ let(:additional_data) {
+ {
+ aliases: [person.alias_url, person.profile_url],
+ properties: {"http://webfinger.example/ns/name" => "Bob Smith"},
+ links: [
+ {rel: "http://portablecontacts.net/spec/1.0", href: "https://pod.example.tld/poco/trouble"},
+ {
+ rel: "http://webfinger.net/rel/avatar",
+ type: "image/jpeg",
+ href: "http://localhost:3000/assets/user/default.png"
+ },
+ {rel: "http://openid.net/specs/connect/1.0/issuer", href: "https://pod.example.tld/"}
+ ]
+ }
+ }
- it "creates minimal XML document" do
- wf = Discovery::WebFinger.new(
- acct_uri: acct,
- hcard_url: person.hcard_url,
- seed_url: person.url
- )
- expect(wf.to_xml).to eq(minimal_xml)
- end
+ context "xml" do
+ it "creates a nice XML document" do
+ wf = Discovery::WebFinger.new(data, aliases: [person.alias_url])
+ expect(wf.to_xml).to eq(xml)
+ end
- it "creates XML document with additional data" do
- xml_with_additional_data = <<-XML
+ it "creates minimal XML document" do
+ wf = Discovery::WebFinger.new(minimal_data)
+ expect(wf.to_xml).to eq(minimal_xml)
+ end
+
+ it "creates XML document with additional data" do
+ xml_with_additional_data = <<-XML
#{acct}
@@ -70,27 +84,123 @@ XML
+
XML
- wf = Discovery::WebFinger.new(
- {
- acct_uri: acct,
- hcard_url: person.hcard_url,
- seed_url: person.url
- },
- aliases: [person.alias_url, person.profile_url],
- properties: {"http://webfinger.example/ns/name" => "Bob Smith"},
- links: [
- {rel: "http://portablecontacts.net/spec/1.0", href: "https://pod.example.tld/poco/trouble"},
- {
- rel: "http://webfinger.net/rel/avatar",
- type: "image/jpeg",
- href: "http://localhost:3000/assets/user/default.png"
- }
- ]
- )
- expect(wf.to_xml).to eq(xml_with_additional_data)
+ wf = Discovery::WebFinger.new(minimal_data, additional_data)
+ expect(wf.to_xml).to eq(xml_with_additional_data)
+ end
+ end
+
+ context "json" do
+ it "creates a nice JSON document" do
+ json = <<-JSON
+{
+ "subject": "#{acct}",
+ "aliases": [
+ "#{person.alias_url}"
+ ],
+ "links": [
+ {
+ "rel": "http://microformats.org/profile/hcard",
+ "type": "text/html",
+ "href": "#{person.hcard_url}"
+ },
+ {
+ "rel": "http://joindiaspora.com/seed_location",
+ "type": "text/html",
+ "href": "#{person.url}"
+ },
+ {
+ "rel": "http://webfinger.net/rel/profile-page",
+ "type": "text/html",
+ "href": "#{person.profile_url}"
+ },
+ {
+ "rel": "http://schemas.google.com/g/2010#updates-from",
+ "type": "application/atom+xml",
+ "href": "#{person.atom_url}"
+ },
+ {
+ "rel": "salmon",
+ "href": "#{person.salmon_url}"
+ },
+ {
+ "rel": "http://ostatus.org/schema/1.0/subscribe",
+ "template": "http://somehost:3000/people?q={uri}"
+ }
+ ]
+}
+JSON
+ wf = Discovery::WebFinger.new(data, aliases: [person.alias_url])
+ expect(JSON.pretty_generate(wf.to_json)).to eq(json.strip)
+ end
+
+ it "creates minimal JSON document" do
+ minimal_json = <<-JSON
+{
+ "subject": "#{acct}",
+ "links": [
+ {
+ "rel": "http://microformats.org/profile/hcard",
+ "type": "text/html",
+ "href": "#{person.hcard_url}"
+ },
+ {
+ "rel": "http://joindiaspora.com/seed_location",
+ "type": "text/html",
+ "href": "#{person.url}"
+ }
+ ]
+}
+JSON
+ wf = Discovery::WebFinger.new(minimal_data)
+ expect(JSON.pretty_generate(wf.to_json)).to eq(minimal_json.strip)
+ end
+
+ it "creates JSON document with additional data" do
+ json_with_additional_data = <<-JSON
+{
+ "subject": "#{acct}",
+ "aliases": [
+ "#{person.alias_url}",
+ "#{person.profile_url}"
+ ],
+ "links": [
+ {
+ "rel": "http://microformats.org/profile/hcard",
+ "type": "text/html",
+ "href": "#{person.hcard_url}"
+ },
+ {
+ "rel": "http://joindiaspora.com/seed_location",
+ "type": "text/html",
+ "href": "#{person.url}"
+ },
+ {
+ "rel": "http://portablecontacts.net/spec/1.0",
+ "href": "https://pod.example.tld/poco/trouble"
+ },
+ {
+ "rel": "http://webfinger.net/rel/avatar",
+ "type": "image/jpeg",
+ "href": "http://localhost:3000/assets/user/default.png"
+ },
+ {
+ "rel": "http://openid.net/specs/connect/1.0/issuer",
+ "href": "https://pod.example.tld/"
+ }
+ ],
+ "properties": {
+ "http://webfinger.example/ns/name": "Bob Smith"
+ }
+}
+JSON
+
+ wf = Discovery::WebFinger.new(minimal_data, additional_data)
+ expect(JSON.pretty_generate(wf.to_json)).to eq(json_with_additional_data.strip)
+ end
end
end
diff --git a/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb b/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb
index e646767..6f0eca0 100644
--- a/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb
+++ b/spec/lib/diaspora_federation/discovery/xrd_document_spec.rb
@@ -45,9 +45,8 @@ XML
}
}
- context "generation" do
- it "creates the xml document" do
- doc = Discovery::XrdDocument.new
+ let(:doc) {
+ Discovery::XrdDocument.new.tap do |doc|
doc.expires = data[:expires]
doc.subject = data[:subject]
@@ -62,15 +61,25 @@ XML
data[:links].each do |h|
doc.links << h
end
+ end
+ }
+ describe "#to_xml" do
+ it "creates the xml document" do
expect(doc.to_xml).to eq(xml)
end
end
- context "parsing" do
+ describe "#to_json" do
+ it "provides the hash for json" do
+ expect(doc.to_json).to eq(data)
+ end
+ end
+
+ describe ".xml_data" do
it "reads the xml document" do
- doc = Discovery::XrdDocument.xml_data(xml)
- expect(doc).to eq(data)
+ hash = Discovery::XrdDocument.xml_data(xml)
+ expect(hash).to eq(data)
end
it "raises InvalidDocument if the xml is empty" do
diff --git a/spec/routing/webfinger_routing_spec.rb b/spec/routing/webfinger_routing_spec.rb
index be2f48c..11f845a 100644
--- a/spec/routing/webfinger_routing_spec.rb
+++ b/spec/routing/webfinger_routing_spec.rb
@@ -9,10 +9,10 @@ module DiasporaFederation
)
end
- it "routes GET legacy webfinger" do
- expect(get: "/webfinger").to route_to(
+ it "routes GET webfinger" do
+ expect(get: "/.well-known/webfinger").to route_to(
controller: "diaspora_federation/webfinger",
- action: "legacy_webfinger"
+ action: "webfinger"
)
end
end