59 lines
1.7 KiB
Ruby
59 lines
1.7 KiB
Ruby
class Carto::Api::MultifactorAuthsController < ::Api::ApplicationController
|
|
ssl_required
|
|
|
|
before_action :load_user
|
|
|
|
before_action :load_multifactor_auth, only: [:show, :verify_code, :destroy]
|
|
|
|
rescue_from Carto::UnprocesableEntityError, with: :rescue_from_carto_error
|
|
rescue_from Carto::UnauthorizedError, with: :rescue_from_carto_error
|
|
|
|
def create
|
|
multifactor_auth = @carto_viewer.user_multifactor_auths.create!(create_params)
|
|
render json: Carto::Api::MultifactorAuthPresenter.new(multifactor_auth).to_poro_with_qrcode, status: 201
|
|
rescue ActionController::ParameterMissing => e
|
|
raise Carto::UnprocesableEntityError.new(e.message)
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
raise Carto::UnprocesableEntityError.new(e.message)
|
|
end
|
|
|
|
def verify_code
|
|
@multifactor_auth.verify!(params[:code])
|
|
render json: Carto::Api::MultifactorAuthPresenter.new(@multifactor_auth).to_poro, status: 200
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
raise Carto::UnprocesableEntityError.new(e.message)
|
|
end
|
|
|
|
def destroy
|
|
@multifactor_auth.destroy
|
|
render json: Carto::Api::MultifactorAuthPresenter.new(@multifactor_auth).to_poro, status: 204
|
|
end
|
|
|
|
def show
|
|
render json: Carto::Api::MultifactorAuthPresenter.new(@multifactor_auth).to_poro, status: 200
|
|
end
|
|
|
|
def index
|
|
auths = @carto_viewer.user_multifactor_auths.map do |auth|
|
|
Carto::Api::MultifactorAuthPresenter.new(auth).to_poro
|
|
end
|
|
|
|
render json: auths, status: 200
|
|
end
|
|
|
|
private
|
|
|
|
def load_user
|
|
@carto_viewer = Carto::User.find(current_viewer.id)
|
|
end
|
|
|
|
def load_multifactor_auth
|
|
@multifactor_auth = @carto_viewer.user_multifactor_auths.find(params[:id])
|
|
end
|
|
|
|
def create_params
|
|
{ type: params.require(:type) }
|
|
end
|
|
|
|
end
|