Default to json type for webfinger requests (#1583)
This commit is contained in:
parent
fd102059aa
commit
b352a8e5d4
4 changed files with 36 additions and 8 deletions
|
@ -1,7 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class XrdController < ApplicationController
|
class XrdController < ApplicationController
|
||||||
before_action :set_default_format_json, only: :webfinger
|
|
||||||
before_action :set_default_format_xml, only: :host_meta
|
before_action :set_default_format_xml, only: :host_meta
|
||||||
|
|
||||||
def host_meta
|
def host_meta
|
||||||
|
@ -31,10 +30,6 @@ class XrdController < ApplicationController
|
||||||
request.format = 'xml' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
|
request.format = 'xml' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_default_format_json
|
|
||||||
request.format = 'json' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
def username_from_resource
|
def username_from_resource
|
||||||
if resource_param =~ /\Ahttps?:\/\//
|
if resource_param =~ /\Ahttps?:\/\//
|
||||||
path_params = Rails.application.routes.recognize_path(resource_param)
|
path_params = Rails.application.routes.recognize_path(resource_param)
|
||||||
|
|
|
@ -15,7 +15,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
get '.well-known/host-meta', to: 'xrd#host_meta', as: :host_meta
|
get '.well-known/host-meta', to: 'xrd#host_meta', as: :host_meta
|
||||||
get '.well-known/webfinger', to: 'xrd#webfinger', as: :webfinger
|
get '.well-known/webfinger', to: 'xrd#webfinger', as: :webfinger, defaults: { format: 'json' }
|
||||||
|
|
||||||
devise_for :users, path: 'auth', controllers: {
|
devise_for :users, path: 'auth', controllers: {
|
||||||
sessions: 'auth/sessions',
|
sessions: 'auth/sessions',
|
||||||
|
|
|
@ -14,12 +14,12 @@ RSpec.describe XrdController, type: :controller do
|
||||||
let(:alice) { Fabricate(:account, username: 'alice') }
|
let(:alice) { Fabricate(:account, username: 'alice') }
|
||||||
|
|
||||||
it 'returns http success when account can be found' do
|
it 'returns http success when account can be found' do
|
||||||
get :webfinger, params: { resource: alice.to_webfinger_s }
|
get :webfinger, params: { resource: alice.to_webfinger_s }, format: :json
|
||||||
expect(response).to have_http_status(:success)
|
expect(response).to have_http_status(:success)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http not found when account cannot be found' do
|
it 'returns http not found when account cannot be found' do
|
||||||
get :webfinger, params: { resource: 'acct:not@existing.com' }
|
get :webfinger, params: { resource: 'acct:not@existing.com' }, format: :json
|
||||||
expect(response).to have_http_status(:not_found)
|
expect(response).to have_http_status(:not_found)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
33
spec/requests/webfinger_request_spec.rb
Normal file
33
spec/requests/webfinger_request_spec.rb
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
describe "The webfinger route" do
|
||||||
|
let(:alice) { Fabricate(:account, username: 'alice') }
|
||||||
|
|
||||||
|
describe "requested without accepts headers" do
|
||||||
|
it "returns a json response" do
|
||||||
|
get webfinger_url, params: { resource: alice.to_webfinger_s }
|
||||||
|
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
expect(response.content_type).to eq "application/jrd+json"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "requested with html in accepts headers" do
|
||||||
|
it "returns a json response" do
|
||||||
|
headers = { 'HTTP_ACCEPT' => 'text/html' }
|
||||||
|
get webfinger_url, params: { resource: alice.to_webfinger_s }, headers: headers
|
||||||
|
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
expect(response.content_type).to eq "application/jrd+json"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "requested with xml format" do
|
||||||
|
it "returns an xml response" do
|
||||||
|
get webfinger_url(resource: alice.to_webfinger_s, format: :xml)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
expect(response.content_type).to eq "application/xrd+xml"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue