Skip to content
This repository has been archived by the owner on Dec 21, 2023. It is now read-only.

Commit

Permalink
Add option to disable two factor auth in admin accounts panel. (masto…
Browse files Browse the repository at this point in the history
…don#2584)

* Add option to disable two factor auth in admin accounts panel.
Closes mastodon#2578

* Add @mjankowski's suggestions.
* Moves destroy actions behind User#disable_two_factor!
* Adds spec coverage for Admin:TwoFactorAuthenticationsController and User#disable_two_factor!
  • Loading branch information
Kaylee authored and Gargron committed May 2, 2017
1 parent b5eec34 commit 7880671
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 0 deletions.
18 changes: 18 additions & 0 deletions app/controllers/admin/two_factor_authentications_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# frozen_string_literal: true

module Admin
class TwoFactorAuthenticationsController < BaseController
before_action :set_user

def destroy
@user.disable_two_factor!
redirect_to admin_accounts_path
end

private

def set_user
@user = User.find(params[:user_id])
end
end
end
6 changes: 6 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ def confirmed?
confirmed_at.present?
end

def disable_two_factor!
self.otp_required_for_login = false
otp_backup_codes&.clear
save!
end

def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
Expand Down
2 changes: 2 additions & 0 deletions app/views/admin/accounts/show.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@
- if @account.local?
%div{ style: 'float: right' }
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button'
- if @account.user&.otp_required_for_login?
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button'

%div{ style: 'float: left' }
- if @account.silenced?
Expand Down
1 change: 1 addition & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ en:
public: Public
push_subscription_expires: PuSH subscription expires
reset_password: Reset password
disable_two_factor_authentication: Disable 2FA
salmon_url: Salmon URL
show:
created_reports: Reports created by this account
Expand Down
4 changes: 4 additions & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@
resource :suspension, only: [:create, :destroy]
resource :confirmation, only: [:create]
end

resources :users, only: [] do
resource :two_factor_authentication, only: [:destroy]
end
end

get '/admin', to: redirect('/admin/settings', status: 302)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
require 'rails_helper'

describe Admin::TwoFactorAuthenticationsController do
render_views

let(:user) { Fabricate(:user) }
before do
sign_in Fabricate(:user, admin: true), scope: :user
end

describe 'DELETE #destroy' do
it 'redirects to admin accounts page' do
delete :destroy, params: { user_id: user.id }
expect(response).to redirect_to(admin_accounts_path)
end
end
end
14 changes: 14 additions & 0 deletions spec/models/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,20 @@
end
end

describe '#disable_two_factor!' do
it 'sets otp_required_for_login to false' do
user = Fabricate.build(:user, otp_required_for_login: true)
user.disable_two_factor!
expect(user.otp_required_for_login).to be false
end

it 'clears otp_backup_codes' do
user = Fabricate.build(:user, otp_backup_codes: %w[dummy dummy])
user.disable_two_factor!
expect(user.otp_backup_codes.empty?).to be true
end
end

describe 'whitelist' do
around(:each) do |example|
old_whitelist = Rails.configuration.x.email_whitelist
Expand Down

0 comments on commit 7880671

Please sign in to comment.