app
controllers
admin
api
auth
concerns
oauth
settings
exports
two_factor_authentication
confirmations_controller.rb
recovery_codes_controller.rb
deletes_controller.rb
exports_controller.rb
follower_domains_controller.rb
imports_controller.rb
preferences_controller.rb
profiles_controller.rb
two_factor_authentications_controller.rb
well_known
about_controller.rb
account_follow_controller.rb
account_unfollow_controller.rb
accounts_controller.rb
application_controller.rb
authorize_follows_controller.rb
follower_accounts_controller.rb
following_accounts_controller.rb
home_controller.rb
manifests_controller.rb
media_controller.rb
remote_follow_controller.rb
statuses_controller.rb
stream_entries_controller.rb
tags_controller.rb
helpers
javascript
lib
mailers
models
policies
presenters
services
validators
views
workers
bin
config
db
docs
lib
log
nanobox
public
spec
storybook
streaming
vendor
.babelrc
.buildpacks
.codeclimate.yml
.dockerignore
.editorconfig
.env.nanobox
.env.production.sample
.env.test
.env.vagrant
.eslintignore
.eslintrc.yml
.foreman
.gitignore
.haml-lint.yml
.nanoignore
.nvmrc
.postcssrc.yml
.profile
.rspec
.rubocop.yml
.ruby-version
.scss-lint.yml
.slugignore
.travis.yml
Aptfile
CONTRIBUTING.md
Capfile
Dockerfile
Gemfile
Gemfile.lock
ISSUE_TEMPLATE.md
LICENSE
Procfile
Procfile.dev
README.md
Rakefile
Vagrantfile
app.json
boxfile.yml
config.ru
docker-compose.yml
docker_entrypoint.sh
package.json
scalingo.json
yarn.lock
* Add spec coverage for settings/two_factor_auth area * extract setup method for qr code * Move otp required check to before action * Merge method only used once * Remove duplicate view * Consolidate creation of @codes for backup * Move settings/2fq#recovery_codes to settings/recovery_codes#create * Rename settings/two_factor_auth#disable to #destroy * Add coverage for the otp required path on 2fa#show * Clean up the recovery codes list styles * Move settings/two_factor_auth to settings/two_factor_authentication * Reorganize the settings two factor auth area Updated to use a flow like: - settings/two_factor_authentication goes to a #show view which has a button either enable or disable 2fa on the account - the disable button turns off the otp requirement for the user - the enable button cycles the user secret and redirects to a confirmation page - the confirmation page is a #new view which shows the QR code for user - that page posts to #create which verifies the code, and creates the recovery codes - that create action shares a view with a recovery codes controller which can be used separately to reset codes if needed
44 lines
1.2 KiB
Ruby
44 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Settings
|
|
module TwoFactorAuthentication
|
|
class ConfirmationsController < ApplicationController
|
|
layout 'admin'
|
|
|
|
before_action :authenticate_user!
|
|
|
|
def new
|
|
prepare_two_factor_form
|
|
end
|
|
|
|
def create
|
|
if current_user.validate_and_consume_otp!(confirmation_params[:code])
|
|
flash[:notice] = I18n.t('two_factor_authentication.enabled_success')
|
|
|
|
current_user.otp_required_for_login = true
|
|
@recovery_codes = current_user.generate_otp_backup_codes!
|
|
current_user.save!
|
|
|
|
render 'settings/two_factor_authentication/recovery_codes/index'
|
|
else
|
|
flash.now[:alert] = I18n.t('two_factor_authentication.wrong_code')
|
|
prepare_two_factor_form
|
|
render :new
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def confirmation_params
|
|
params.require(:form_two_factor_confirmation).permit(:code)
|
|
end
|
|
|
|
def prepare_two_factor_form
|
|
@confirmation = Form::TwoFactorConfirmation.new
|
|
@provision_url = current_user.otp_provisioning_uri(current_user.email, issuer: Rails.configuration.x.local_domain)
|
|
@qrcode = RQRCode::QRCode.new(@provision_url)
|
|
end
|
|
end
|
|
end
|
|
end
|