forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clean up well-known routes/controllers (mastodon#1649)
* Add request spec for host meta route returning xml * Add routing spec for xrd routes * Update well-known routes * Move webfinger and host-meta actions to their own controllers
- Loading branch information
1 parent
3a9eb81
commit 137100d
Showing
12 changed files
with
119 additions
and
83 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# frozen_string_literal: true | ||
|
||
module WellKnown | ||
class HostMetaController < ApplicationController | ||
def show | ||
@webfinger_template = "#{webfinger_url}?resource={uri}" | ||
|
||
respond_to do |format| | ||
format.xml { render content_type: 'application/xrd+xml' } | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# frozen_string_literal: true | ||
|
||
module WellKnown | ||
class WebfingerController < ApplicationController | ||
def show | ||
@account = Account.find_local!(username_from_resource) | ||
@canonical_account_uri = @account.to_webfinger_s | ||
@magic_key = pem_to_magic_key(@account.keypair.public_key) | ||
|
||
respond_to do |format| | ||
format.xml { render content_type: 'application/xrd+xml' } | ||
format.json { render content_type: 'application/jrd+json' } | ||
end | ||
rescue ActiveRecord::RecordNotFound | ||
head 404 | ||
end | ||
|
||
private | ||
|
||
def username_from_resource | ||
WebfingerResource.new(resource_param).username | ||
end | ||
|
||
def pem_to_magic_key(public_key) | ||
modulus, exponent = [public_key.n, public_key.e].map do |component| | ||
result = [] | ||
|
||
until component.zero? | ||
result << [component % 256].pack('C') | ||
component >>= 8 | ||
end | ||
|
||
result.reverse.join | ||
end | ||
|
||
(['RSA'] + [modulus, exponent].map { |n| Base64.urlsafe_encode64(n) }).join('.') | ||
end | ||
|
||
def resource_param | ||
params.require(:resource) | ||
end | ||
end | ||
end |
This file was deleted.
Oops, something went wrong.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
require 'rails_helper' | ||
|
||
describe WellKnown::HostMetaController, type: :controller do | ||
render_views | ||
|
||
describe 'GET #show' do | ||
it 'returns http success' do | ||
get :show, format: :xml | ||
|
||
expect(response).to have_http_status(:success) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
require 'rails_helper' | ||
|
||
describe WellKnown::WebfingerController, type: :controller do | ||
render_views | ||
|
||
describe 'GET #show' do | ||
let(:alice) { Fabricate(:account, username: 'alice') } | ||
|
||
it 'returns http success when account can be found' do | ||
get :show, 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 :show, params: { resource: 'acct:not@existing.com' }, format: :json | ||
|
||
expect(response).to have_http_status(:not_found) | ||
end | ||
end | ||
end |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
require "rails_helper" | ||
|
||
describe "The host_meta route" do | ||
describe "requested without accepts headers" do | ||
it "returns an xml response" do | ||
get host_meta_url | ||
|
||
expect(response).to have_http_status(:success) | ||
expect(response.content_type).to eq "application/xrd+xml" | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
require 'rails_helper' | ||
|
||
describe 'the host-meta route' do | ||
it 'routes to correct place with xml format' do | ||
expect(get('/.well-known/host-meta')). | ||
to route_to('well_known/host_meta#show', format: 'xml') | ||
end | ||
end | ||
|
||
describe 'the webfinger route' do | ||
it 'routes to correct place with json format' do | ||
expect(get('/.well-known/webfinger')). | ||
to route_to('well_known/webfinger#show', format: 'json') | ||
end | ||
end |