Skip to content

Commit 434fcca

Browse files
authored
Merge pull request #1695 from codidact/cellio/no-2fa-self-delete
don't allow self-deletion for an account that (still) uses 2fa
2 parents 6418a35 + f7bebe0 commit 434fcca

4 files changed

Lines changed: 16 additions & 3 deletions

File tree

app/controllers/users/registrations_controller.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ def do_delete
3737
elsif @user.moderator?
3838
@user.errors.add(:base, I18n.t('users.errors.no_mod_self_delete'))
3939
render :delete
40+
elsif @user.enabled_2fa
41+
@user.errors.add(:base, I18n.t('users.errors.no_2fa_self_delete'))
42+
render :delete
4043
elsif params[:username] != @user.username
4144
@user.errors.add(:base, I18n.t('users.errors.self_delete_wrong_username'))
4245
render :delete

app/views/devise/registrations/edit.html.erb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,14 @@
6666
<p class="has-color-red has-font-size-caption">
6767
Moderators and admins cannot be self-deleted. Contact support if you wish to delete your account.
6868
</p>
69-
<% else %>
69+
<% elsif current_user.enabled_2fa %>
70+
<%= link_to 'javascript:void(8)', class: 'button is-outlined is-danger', disabled: true do %>
71+
Delete my account &raquo;
72+
<% end %>
73+
<p class="has-color-red has-font-size-caption">
74+
Your account uses two-factor authentication (2FA). In order to delete your account, you must first disable 2FA.
75+
</p>
76+
<% else %>
7077
<%= link_to delete_account_path, class: 'button is-outlined is-danger' do %>
7178
Delete my account &raquo;
7279
<% end %>

config/locales/strings/en.users.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ en:
55
Admin accounts cannot be self-deleted. Contact support.
66
no_mod_self_delete: >
77
Moderator accounts cannot be self-deleted. Contact support.
8+
no_2fa_self_delete: >
9+
Accounts using 2FA cannot be self-deleted. Disable 2FA first.
810
self_delete_wrong_username: >
911
The username you entered was incorrect.

test/controllers/users/registrations_controller_test.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ class Users::RegistrationsControllerTest < ActionController::TestCase
9090
test 'should prevent self-deletion if the user is at least a moderator' do
9191
locale_string_map = {
9292
moderator: 'users.errors.no_mod_self_delete',
93-
admin: 'users.errors.no_admin_self_delete'
93+
admin: 'users.errors.no_admin_self_delete',
94+
enabled_2fa: 'users.errors.no_2fa_self_delete'
9495
}
9596

96-
[:moderator, :admin].each do |name|
97+
[:moderator, :admin, :enabled_2fa].each do |name|
9798
sign_in users(name)
9899
session[:sudo] = DateTime.now.iso8601
99100

0 commit comments

Comments
 (0)