GrafiteInc/Scaffold

View on GitHub
app/Http/Controllers/Auth/TwoFactorController.php

Summary

Maintainability
A
35 mins
Test Coverage
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use PragmaRX\Google2FALaravel\Support\Authenticator;

class TwoFactorController extends Controller
{
    public function showForm(Request $request)
    {
        return view('auth.two-factor');
    }

    /**
     * Verification for Two Factor Auth
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function verify(Request $request)
    {
        $user = $request->user();

        if ($user->usesTwoFactor('email')) {
            if (
                (int) $request->one_time_password !== (int) $user->two_factor_code
                || now()->gt($user->two_factor_expires_at)
            ) {
                abort(401, 'Invalid code.');
            }
        }

        if ($user->usesTwoFactor('authenticator')) {
            $authenticator = app(Authenticator::class)->boot($request);
            if (! $authenticator->isAuthenticated()) {
                abort(401, 'Invalid code.');
            }
        }

        $user->validateTwoFactorCode();

        return $this->verified();
    }

    /**
     * Verification response.
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function verified()
    {
        return redirect(RouteServiceProvider::HOME)->withMessage('Two Factor verified.');
    }
}