AuthorizationController::store()   A
last analyzed

Complexity

Conditions 5
Paths 8

Size

Total Lines 23
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 11
c 1
b 0
f 0
nc 8
nop 2
dl 0
loc 23
rs 9.6111
1
<?php
2
3
namespace tbclla\Revolut\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Routing\Controller;
7
use tbclla\Revolut\Auth\AuthorizationCode;
8
use tbclla\Revolut\Auth\Requests\AuthorizationCodeRequest;
9
use tbclla\Revolut\Auth\TokenManager;
10
11
class AuthorizationController extends Controller
12
{
13
    /**
14
     * @param \illuminate\Http\Request $request
15
     * @param \tbclla\Revolut\Auth\Requests\AuthorizationCodeRequest $authRequest
16
     * @return \illuminate\Http\RedirectResponse
17
     */
18
    public function create(Request $request, AuthorizationCodeRequest $authRequest)
19
    {
20
        // store the state and an optional redirect url
21
        session()->put($authRequest->state, [
22
            'redirect_uri' => $request->after_success
23
        ]);
24
25
        // redirect to Revolut's OAuth flow
26
        return redirect($authRequest->build());
27
    }
28
29
    /**
30
     * @param \illuminate\Http\Request $request
31
     * @param \tbclla\Revolut\Auth\TokenManager $tokenManager
32
     * @return mixed
33
     */
34
    public function store(Request $request, TokenManager $tokenManager)
35
    {
36
        // verify that the request contains the required parameters
37
        if (!$request->state or !$request->code) {
38
            abort(405, 'Invalid Request');
39
        }
40
41
        // verify that the session holds a matching state
42
        if (!session()->has($request->state)) {
43
            abort(405, 'Invalid State');
44
        }
45
46
        $authCode = new AuthorizationCode($request->code);
47
        
48
        $tokenManager->requestAccessToken($authCode);
49
50
        $state = session()->pull($request->state);
51
        
52
        $redirect = $state['redirect_uri'];
53
        
54
        return $redirect
55
            ? redirect($redirect)
56
            : response('Authorization successful', 200);
57
    }
58
}
59