Passed
Push — task/laravel-breadcrumbs ( 3beccb...a96280 )
by Yonathan
10:46 queued 10s
created

RecoveryCodeController::use()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
c 0
b 0
f 0
dl 0
loc 5
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace App\Http\Controllers\Auth;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Lang;
7
use Facades\App\Services\WhichPortal;
8
use PragmaRX\Google2FALaravel\Support\Authenticator;
9
use Illuminate\Support\Facades\Validator;
10
11
class RecoveryCodeController extends AuthController
12
{
13
    use GenerateRecoveryCodes;
14
15
    public function show(Request $request)
1 ignored issue
show
Coding Style Documentation introduced by
Missing doc comment for function show()
Loading history...
16
    {
17
        $user = $request->user();
18
        $this->generateCodesForUser($user);
19
20
        $settings_url = '';
21
        if (WhichPortal::isAdminPortal()) {
22
            $settings_url = backpack_url('2fa');
23
        } elseif (WhichPortal::isManagerPortal()) {
24
            $settings_url = route('manager.settings.edit');
25
        } elseif (WhichPortal::isApplicantPortal()) {
26
            $settings_url = route('settings.edit');
27
        }
28
29
        return view('auth.recovery_codes', [
30
            'recovery_codes' => Lang::get('common/auth/recovery_codes'),
31
            'codes' => $user->recovery_codes,
32
            'settings_url' => $settings_url,
33
        ]);
34
    }
35
36
    public function generate(Request $request)
1 ignored issue
show
Coding Style Documentation introduced by
Missing doc comment for function generate()
Loading history...
37
    {
38
        $user = $request->user();
39
        $this->generateCodesForUser($user);
40
41
        $recovery_codes_url = '';
42
        if (WhichPortal::isApplicantPortal()) {
43
            $recovery_codes_url = route('recovery_codes.show');
44
        } elseif (WhichPortal::isManagerPortal()) {
45
            $recovery_codes_url = route('manager.recovery_codes.show');
46
        } elseif (WhichPortal::isAdminPortal()) {
47
            $recovery_codes_url = route('admin.recovery_codes.show');
48
        }
49
50
        return redirect($recovery_codes_url);
51
    }
52
53
    public function use(Request $request)
1 ignored issue
show
Coding Style Documentation introduced by
Missing doc comment for function use()
Loading history...
54
    {
55
        return view('auth.use_recovery_code', [
56
            'recover' => Lang::get('common/auth/use_recovery_code'),
57
            'return_url' => session()->get('url.expected'),
58
        ]);
59
    }
60
61
    public function authenticate(Request $request)
1 ignored issue
show
Coding Style Documentation introduced by
Missing doc comment for function authenticate()
Loading history...
62
    {
63
        Validator::make($request->all(), [
64
            'recovery_code' => 'required|string',
65
        ])->validate();
66
        $recovery_code = $request->input('recovery_code');
67
        $user = $request->user();
68
        $valid_codes = collect($user->recovery_codes);
69
        if ($valid_codes->contains($recovery_code)) {
70
            $authenticator = app(Authenticator::class)->boot($request);
71
            $authenticator->login();
72
            $still_valid_codes = $valid_codes->filter(function ($value) use ($recovery_code) {
73
                return $value != $recovery_code;
74
            });
75
            $user->recovery_codes = $still_valid_codes->toArray();
76
            $user->save();
77
            // If authentication passes, remove the expected url from the session.
78
            $expectedUrl = session()->get('url.expected');
79
            session()->remove('url.expected');
80
            return redirect($expectedUrl);
81
        }
82
        return redirect(route('recovery_codes.use'))
83
            ->withErrors(['incorrect' => Lang::get('common/auth/use_recovery_code.incorrect_code')]);
84
    }
85
}
86