Moved 2fa into separate view

This commit is contained in:
Phil Hughes 2016-03-03 09:28:33 +00:00
parent c4baf2417f
commit 218f3e702a
5 changed files with 64 additions and 104 deletions

View file

@ -240,7 +240,7 @@ class ApplicationController < ActionController::Base
def check_2fa_requirement def check_2fa_requirement
if two_factor_authentication_required? && current_user && !current_user.two_factor_enabled && !skip_two_factor? if two_factor_authentication_required? && current_user && !current_user.two_factor_enabled && !skip_two_factor?
redirect_to profile_account_path redirect_to new_profile_two_factor_auth_path
end end
end end

View file

@ -1,29 +1,6 @@
class Profiles::AccountsController < Profiles::ApplicationController class Profiles::AccountsController < Profiles::ApplicationController
skip_before_action :check_2fa_requirement
def show def show
unless current_user.otp_secret
current_user.otp_secret = User.generate_otp_secret(32)
end
unless current_user.otp_grace_period_started_at && two_factor_grace_period
current_user.otp_grace_period_started_at = Time.current
end
current_user.save! if current_user.changed?
if two_factor_authentication_required?
if two_factor_grace_period_expired?
flash.now[:alert] = 'You must enable Two-factor Authentication for your account.'
else
grace_period_deadline = current_user.otp_grace_period_started_at + two_factor_grace_period.hours
flash.now[:alert] = "You must enable Two-factor Authentication for your account before #{l(grace_period_deadline)}."
end
end
@user = current_user @user = current_user
@qr_code = build_qr_code
end end
def unlink def unlink
@ -31,16 +8,4 @@ class Profiles::AccountsController < Profiles::ApplicationController
current_user.identities.find_by(provider: provider).destroy current_user.identities.find_by(provider: provider).destroy
redirect_to profile_account_path redirect_to profile_account_path
end end
private
def build_qr_code
issuer = "#{issuer_host} | #{current_user.email}"
uri = current_user.otp_provisioning_uri(current_user.email, issuer: issuer)
RQRCode::render_qrcode(uri, :svg, level: :m, unit: 3)
end
def issuer_host
Gitlab.config.gitlab.host
end
end end

View file

@ -2,7 +2,26 @@ class Profiles::TwoFactorAuthsController < Profiles::ApplicationController
skip_before_action :check_2fa_requirement skip_before_action :check_2fa_requirement
def new def new
redirect_to profile_account_path unless current_user.otp_secret
current_user.otp_secret = User.generate_otp_secret(32)
end
unless current_user.otp_grace_period_started_at && two_factor_grace_period
current_user.otp_grace_period_started_at = Time.current
end
current_user.save! if current_user.changed?
if two_factor_authentication_required?
if two_factor_grace_period_expired?
flash.now[:alert] = 'You must enable Two-factor Authentication for your account.'
else
grace_period_deadline = current_user.otp_grace_period_started_at + two_factor_grace_period.hours
flash.now[:alert] = "You must enable Two-factor Authentication for your account before #{l(grace_period_deadline)}."
end
end
@qr_code = build_qr_code
end end
def create def create
@ -13,9 +32,10 @@ class Profiles::TwoFactorAuthsController < Profiles::ApplicationController
render 'create' render 'create'
else else
error = 'Invalid pin code' @error = 'Invalid pin code'
@qr_code = build_qr_code
redirect_to profile_account_path, flash: { error: error } render 'new'
end end
end end

View file

@ -40,32 +40,8 @@
%p %p
Download the Google Authenticator application from App Store for iOS or Google Play for Android and scan this code. Download the Google Authenticator application from App Store for iOS or Google Play for Android and scan this code.
More information is available in the #{link_to('documentation', help_page_path('profile', 'two_factor_authentication'))}. More information is available in the #{link_to('documentation', help_page_path('profile', 'two_factor_authentication'))}.
.row.append-bottom-10 .append-bottom-10
.col-md-3 = link_to 'Enable two-factor authentication', new_profile_two_factor_auth_path, class: 'btn btn-success'
= raw @qr_code
.col-md-9
.account-well
%p.prepend-top-0.append-bottom-0
Can't scan the code?
%p.prepend-top-0.append-bottom-0
To add the entry manually, provide the following details to the application on your phone.
%p.prepend-top-0.append-bottom-0
Account:
= current_user.email
%p.prepend-top-0.append-bottom-0
Key:
= current_user.otp_secret.scan(/.{4}/).join(' ')
%p.two-factor-new-manual-content
Time based: Yes
= form_for @user, url: profile_two_factor_auth_path, method: :post do |f|
- if flash[:error]
.alert.alert-danger
= flash[:error]
.form-group
= label_tag :pin_code, nil, class: "label-light"
= text_field_tag :pin_code, nil, class: "form-control", required: true
.prepend-top-default
= submit_tag 'Enable two-factor authentication', class: 'btn btn-success'
- else - else
= link_to 'Disable Two-factor Authentication', profile_two_factor_auth_path, method: :delete, class: 'btn btn-danger', = link_to 'Disable Two-factor Authentication', profile_two_factor_auth_path, method: :delete, class: 'btn btn-danger',
data: { confirm: 'Are you sure?' } data: { confirm: 'Are you sure?' }

View file

@ -1,41 +1,40 @@
- page_title 'Two-factor Authentication', 'Account' - page_title 'Two-factor Authentication', 'Account'
%h2.page-title Two-factor Authentication (2FA) .row.prepend-top-default
%p .col-lg-3
Download the Google Authenticator application from App Store for iOS or Google %h4.prepend-top-0
Play for Android and scan this code. Two-factor Authentication (2FA)
%p
More information is available in the #{link_to('documentation', help_page_path('profile', 'two_factor_authentication'))}. Increase your account's security by enabling two-factor authentication (2FA).
.col-lg-9
%hr %p
Status: #{current_user.two_factor_enabled? ? 'enabled' : 'disabled'}
= form_tag profile_two_factor_auth_path, method: :post, class: 'form-horizontal two-factor-new' do |f| %p
- if @error Download the Google Authenticator application from App Store for iOS or Google Play for Android and scan this code.
.alert.alert-danger More information is available in the #{link_to('documentation', help_page_path('profile', 'two_factor_authentication'))}.
= @error .row.append-bottom-10
.form-group .col-md-3
.col-lg-2.col-lg-offset-2 = raw @qr_code
= raw @qr_code .col-md-9
.col-lg-7.col-lg-offset-1.manual-instructions .account-well
%h3 Can't scan the code? %p.prepend-top-0.append-bottom-0
Can't scan the code?
%p %p.prepend-top-0.append-bottom-0
To add the entry manually, provide the following details to the To add the entry manually, provide the following details to the application on your phone.
application on your phone. %p.prepend-top-0.append-bottom-0
Account:
%dl = current_user.email
%dt Account %p.prepend-top-0.append-bottom-0
%dd= current_user.email Key:
%dl = current_user.otp_secret.scan(/.{4}/).join(' ')
%dt Key %p.two-factor-new-manual-content
%dd= current_user.otp_secret.scan(/.{4}/).join(' ') Time based: Yes
%dl = form_tag profile_two_factor_auth_path, method: :post do |f|
%dt Time based - if @error
%dd Yes .alert.alert-danger
.form-group = @error
= label_tag :pin_code, nil, class: "control-label" .form-group
.col-lg-10 = label_tag :pin_code, nil, class: "label-light"
= text_field_tag :pin_code, nil, class: "form-control", required: true, autofocus: true = text_field_tag :pin_code, nil, class: "form-control", required: true
.form-actions .prepend-top-default
= submit_tag 'Submit', class: 'btn btn-success' = submit_tag 'Enable two-factor authentication', class: 'btn btn-success'
= link_to 'Configure it later', skip_profile_two_factor_auth_path, :method => :patch, class: 'btn btn-cancel' if two_factor_skippable?