mirror of https://github.com/tootsuite/mastodon
Support /.well-known/host-meta.json (#32206)
parent
f0716368e6
commit
33d3ca7cf1
|
@ -7,7 +7,23 @@ module WellKnown
|
|||
def show
|
||||
@webfinger_template = "#{webfinger_url}?resource={uri}"
|
||||
expires_in 3.days, public: true
|
||||
|
||||
respond_to do |format|
|
||||
format.any do
|
||||
render content_type: 'application/xrd+xml', formats: [:xml]
|
||||
end
|
||||
|
||||
format.json do
|
||||
render json: {
|
||||
links: [
|
||||
{
|
||||
rel: 'lrdd',
|
||||
template: @webfinger_template,
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -67,7 +67,7 @@ Rails.application.routes.draw do
|
|||
scope path: '.well-known' do
|
||||
scope module: :well_known do
|
||||
get 'oauth-authorization-server', to: 'oauth_metadata#show', as: :oauth_metadata, defaults: { format: 'json' }
|
||||
get 'host-meta', to: 'host_meta#show', as: :host_meta, defaults: { format: 'xml' }
|
||||
get 'host-meta', to: 'host_meta#show', as: :host_meta
|
||||
get 'nodeinfo', to: 'node_info#index', as: :nodeinfo, defaults: { format: 'json' }
|
||||
get 'webfinger', to: 'webfinger#show', as: :webfinger
|
||||
end
|
||||
|
|
|
@ -9,19 +9,39 @@ RSpec.describe 'The /.well-known/host-meta request' do
|
|||
expect(response)
|
||||
.to have_http_status(200)
|
||||
.and have_attributes(
|
||||
media_type: 'application/xrd+xml',
|
||||
body: host_meta_xml_template
|
||||
media_type: 'application/xrd+xml'
|
||||
)
|
||||
|
||||
doc = Nokogiri::XML(response.parsed_body)
|
||||
expect(doc.at_xpath('/xrd:XRD/xrd:Link[@rel="lrdd"]/@template', 'xrd' => 'http://docs.oasis-open.org/ns/xri/xrd-1.0').value)
|
||||
.to eq 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}'
|
||||
end
|
||||
|
||||
it 'returns http success with valid JSON response with .json extension' do
|
||||
get '/.well-known/host-meta.json'
|
||||
|
||||
expect(response)
|
||||
.to have_http_status(200)
|
||||
.and have_attributes(
|
||||
media_type: 'application/json'
|
||||
)
|
||||
|
||||
expect(response.parsed_body)
|
||||
.to include(
|
||||
links: [
|
||||
'rel' => 'lrdd',
|
||||
'template' => 'https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}',
|
||||
]
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
it 'returns http success with valid JSON response with Accept header' do
|
||||
get '/.well-known/host-meta', headers: { 'Accept' => 'application/json' }
|
||||
|
||||
def host_meta_xml_template
|
||||
<<~XML
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
||||
<Link rel="lrdd" template="https://cb6e6126.ngrok.io/.well-known/webfinger?resource={uri}"/>
|
||||
</XRD>
|
||||
XML
|
||||
expect(response)
|
||||
.to have_http_status(200)
|
||||
.and have_attributes(
|
||||
media_type: 'application/json'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,9 +4,14 @@ require 'rails_helper'
|
|||
|
||||
RSpec.describe 'Well Known routes' do
|
||||
describe 'the host-meta route' do
|
||||
it 'routes to correct place with xml format' do
|
||||
it 'routes to correct place' do
|
||||
expect(get('/.well-known/host-meta'))
|
||||
.to route_to('well_known/host_meta#show', format: 'xml')
|
||||
.to route_to('well_known/host_meta#show')
|
||||
end
|
||||
|
||||
it 'routes to correct place with json format' do
|
||||
expect(get('/.well-known/host-meta.json'))
|
||||
.to route_to('well_known/host_meta#show', format: 'json')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue