Added ability to configure 2FA settings in login settings.
This commit is contained in:
@@ -241,6 +241,11 @@ class UsersController < ApplicationController
|
|||||||
unless @user.is?(current_user) || admin? && current_user.role > @user.role || superadmin?
|
unless @user.is?(current_user) || admin? && current_user.role > @user.role || superadmin?
|
||||||
flash[:alert] = "You are not allowed to edit this user's login details!"
|
flash[:alert] = "You are not allowed to edit this user's login details!"
|
||||||
redirect_to @user
|
redirect_to @user
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if !@user.totp_enabled
|
||||||
|
@user.update(totp_secret: TOTP.secret)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -263,6 +268,18 @@ class UsersController < ApplicationController
|
|||||||
@user.email_token = SecureRandom.hex(16) if mail_changed
|
@user.email_token = SecureRandom.hex(16) if mail_changed
|
||||||
@user.confirmed = !mail_changed
|
@user.confirmed = !mail_changed
|
||||||
|
|
||||||
|
if params[:user][:totp_enabled] == "1" && !@user.totp_enabled
|
||||||
|
if TOTP.valid?(@user.totp_secret, params[:totp_code].to_i)
|
||||||
|
@user.totp_enabled = true
|
||||||
|
else
|
||||||
|
flash[:alert] = "Wrong TOTP code!"
|
||||||
|
render action: "edit_login"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
elsif params[:user][:totp_enabled] == "0" && @user.totp_enabled
|
||||||
|
@user.totp_enabled = false
|
||||||
|
end
|
||||||
|
|
||||||
# checking here for password so we can send back changes to the view
|
# checking here for password so we can send back changes to the view
|
||||||
if authenticated
|
if authenticated
|
||||||
if @user.save
|
if @user.save
|
||||||
@@ -370,7 +387,7 @@ class UsersController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def user_params(add = [])
|
def user_params(add = [])
|
||||||
a = [:ign, :email, :password, :password_confirmation, :mail_own_thread_reply, :mail_other_thread_reply, :mail_own_blogpost_comment, :mail_other_blogpost_comment, :mail_mention, :public_key] + add
|
a = [:ign, :email, :password, :password_confirmation, :mail_own_thread_reply, :mail_other_thread_reply, :mail_own_blogpost_comment, :mail_other_blogpost_comment, :mail_mention, :public_key, :totp_code] + add
|
||||||
params.require(:user).permit(a)
|
params.require(:user).permit(a)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -25,12 +25,49 @@
|
|||||||
<%= f.password_field :password_confirmation %>
|
<%= f.password_field :password_confirmation %>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>2FA Enabled</td>
|
||||||
|
<td>
|
||||||
|
<%= f.check_box :totp_enabled %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>TOTP Secret</td>
|
||||||
|
<td>
|
||||||
|
<% if !@user.totp_enabled? %>
|
||||||
|
<%= f.text_field :totp_secret, :readonly => true %>
|
||||||
|
<% else %>
|
||||||
|
<i>2FA is currently enabled. Disable 2FA to generate a new secret.</i>
|
||||||
|
<% end %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Current password</td>
|
<td>Current password</td>
|
||||||
<td>
|
<td>
|
||||||
<%= password_field_tag :current_password, nil, disabled: !@user.is?(current_user) %>
|
<%= password_field_tag :current_password, nil, disabled: !@user.is?(current_user) %>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<% if !@user.totp_enabled? %>
|
||||||
|
<tr>
|
||||||
|
<td>TOTP Code</td>
|
||||||
|
<td>
|
||||||
|
<%= text_field_tag :totp_code, nil, disabled: !@user.is?(current_user) %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td><i>Leave this field blank if you are not enabling 2FA.</i></td>
|
||||||
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><%= f.submit "Save Changes", class: "btn blue left" %></p>
|
<p><%= f.submit "Save Changes", class: "btn blue left" %></p>
|
||||||
|
|||||||
Reference in New Issue
Block a user