Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable administrative doorkeeper routes #29187

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions config/initializers/doorkeeper.rb
Expand Up @@ -21,9 +21,14 @@
user unless user&.otp_required_for_login?
end

# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below.
# Doorkeeper provides some administrative interfaces for managing OAuth
# Applications, allowing creation, edit, and deletion of applications from the
# server. At present, these administrative routes are not integrated into
# Mastodon, and as such, we've disabled them by always return a 403 forbidden
# response for them. This does not affect the ability for users to manage
# their own OAuth Applications.
admin_authenticator do
current_user&.admin? || redirect_to(new_user_session_url)
head 403
end
ClearlyClaire marked this conversation as resolved.
Show resolved Hide resolved

# Authorization Code expiration time (default 10 minutes).
Expand Down
83 changes: 83 additions & 0 deletions spec/requests/disabled_oauth_endpoints_spec.rb
@@ -0,0 +1,83 @@
# frozen_string_literal: true

require 'rails_helper'

describe 'Disabled OAuth routes' do
# These routes are disabled via the doorkeeper configuration for
# `admin_authenticator`, as these routes should only be accessible by server
# administrators. For now, these routes are not properly designed and
# integrated into Mastodon, so we're disabling them completely
describe 'GET /oauth/applications' do
it 'returns 403 forbidden' do
get oauth_applications_path

expect(response).to have_http_status(403)
end
end

describe 'POST /oauth/applications' do
it 'returns 403 forbidden' do
post oauth_applications_path

expect(response).to have_http_status(403)
end
end

describe 'GET /oauth/applications/new' do
it 'returns 403 forbidden' do
get new_oauth_application_path

expect(response).to have_http_status(403)
end
end

describe 'GET /oauth/applications/:id' do
let(:application) { Fabricate(:application, scopes: 'read') }

it 'returns 403 forbidden' do
get oauth_application_path(application)

expect(response).to have_http_status(403)
end
end

describe 'PATCH /oauth/applications/:id' do
let(:application) { Fabricate(:application, scopes: 'read') }

it 'returns 403 forbidden' do
patch oauth_application_path(application)

expect(response).to have_http_status(403)
end
end

describe 'PUT /oauth/applications/:id' do
let(:application) { Fabricate(:application, scopes: 'read') }

it 'returns 403 forbidden' do
put oauth_application_path(application)

expect(response).to have_http_status(403)
end
end

describe 'DELETE /oauth/applications/:id' do
let(:application) { Fabricate(:application, scopes: 'read') }

it 'returns 403 forbidden' do
delete oauth_application_path(application)

expect(response).to have_http_status(403)
end
end

describe 'GET /oauth/applications/:id/edit' do
let(:application) { Fabricate(:application, scopes: 'read') }

it 'returns 403 forbidden' do
get edit_oauth_application_path(application)

expect(response).to have_http_status(403)
end
end
end