forked from cybrespace/mastodon
		
	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
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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…
	
	Add table
		
		Reference in a new issue