commit: b352a8e5d4f3dba4b923a2a21dc9ae5343e7e8e4
parent: fd102059aa63a3953ccfedfe9efa0e6f7993f72a
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date: Wed, 12 Apr 2017 10:03:37 -0400
Default to json type for webfinger requests (#1583)
Diffstat:
4 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/app/controllers/xrd_controller.rb b/app/controllers/xrd_controller.rb
@@ -1,7 +1,6 @@
# frozen_string_literal: true
class XrdController < ApplicationController
- before_action :set_default_format_json, only: :webfinger
before_action :set_default_format_xml, only: :host_meta
def host_meta
@@ -31,10 +30,6 @@ class XrdController < ApplicationController
request.format = 'xml' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
end
- def set_default_format_json
- request.format = 'json' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil?
- end
-
def username_from_resource
if resource_param =~ /\Ahttps?:\/\//
path_params = Rails.application.routes.recognize_path(resource_param)
diff --git a/config/routes.rb b/config/routes.rb
@@ -15,7 +15,7 @@ Rails.application.routes.draw do
end
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: {
sessions: 'auth/sessions',
diff --git a/spec/controllers/xrd_controller_spec.rb b/spec/controllers/xrd_controller_spec.rb
@@ -14,12 +14,12 @@ RSpec.describe XrdController, type: :controller do
let(:alice) { Fabricate(:account, username: 'alice') }
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)
end
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)
end
end
diff --git a/spec/requests/webfinger_request_spec.rb b/spec/requests/webfinger_request_spec.rb
@@ -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