Skip to content

Commit fff1204

Browse files
committed
Prevent superadmin un-confirmation if UI bypassed
`spec/controllers/super_admin/users_controller_spec.rb`: - Added test to prevent un-confirming of any super admin email within app `app/controllers/super_admin/users_controller.rb`: - Added !@user.can_super_admin? check to enable the aforementioned test to pass - Also, updated a `patch` statement to `put`
1 parent 6a69538 commit fff1204

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

app/controllers/super_admin/users_controller.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ def handle_confirmed_at_param(attrs)
143143
# if an unconfirmed email is now being confirmed
144144
if !@user.confirmed? && attrs[:confirmed_at] == '1'
145145
attrs[:confirmed_at] = Time.current
146-
# elsif a confirmed email is now being unconfirmed
147-
elsif @user.confirmed? && attrs[:confirmed_at] == '0'
146+
# elsif a confirmed email is now being unconfirmed and the user is not a super admin
147+
elsif @user.confirmed? && attrs[:confirmed_at] == '0' && !@user.can_super_admin?
148148
attrs[:confirmed_at] = nil
149149
else
150150
# else delete the param

spec/controllers/super_admin/users_controller_spec.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,18 @@
3636
# (usec: 0) removes mircoseconds to better enable comparison
3737
user.update(confirmed_at: Time.current.change(usec: 0))
3838
original_confirmed_at = user.confirmed_at
39-
patch :update, params: { id: user.id, user: { firstname: 'NewName', confirmed_at: '1' } }
39+
put :update, params: { id: user.id, user: { firstname: 'NewName', confirmed_at: '1' } }
4040
user.reload
4141
expect(user.confirmed_at).to eq(original_confirmed_at)
4242
end
4343
end
44+
45+
context 'when attempting to set a super_admin to unconfirmed' do
46+
it 'does not update confirmed_at value to nil' do
47+
put :update, params: { id: super_admin.id, user: { confirmed_at: '0' } }
48+
super_admin.reload
49+
expect(super_admin.confirmed_at).not_to be_nil
50+
end
51+
end
4452
end
4553
end

0 commit comments

Comments
 (0)