GrafiteInc/Scaffold

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

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class RecoveryController extends Controller
{
    public function show(Request $request)
    {
        return view('auth.recovery');
    }

    /**
     * Verification for Two Factor Auth
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function verify(Request $request)
    {
        $user = User::where('email', $request->email)->first();

        if ($user) {
            $codes = Str::of($user->two_factor_recovery_codes)->explode(',');

            if ($codes->contains($request->recovery_code)) {
                $user->update([
                    'two_factor_platform' => null,
                    'two_factor_code' => null,
                    'two_factor_expires_at' => null,
                    'two_factor_confirmed_at' => null,
                    'two_factor_recovery_codes' => null,
                ]);

                return $this->verified();
            }
        }

        abort(403, 'Invalid Code.');
    }

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