Completed
Push — master ( 365b59...c70c47 )
by Matze
06:43
created

Controller   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 3
dl 0
loc 85
ccs 24
cts 24
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getOneTimeSecret() 0 13 2
A requestOneTimeSecret() 0 14 3
A deleteOneTimeSecret() 0 9 1
A sendCodeViaMail() 0 8 1
1
<?php
2
3
namespace BrainExe\Core\Authentication\TOTP;
4
5
use BrainExe\Core\Annotations\Controller as ControllerAnnotation;
6
use BrainExe\Core\Annotations\Guest;
7
use BrainExe\Core\Annotations\Route;
8
use BrainExe\Core\Authentication\UserVO;
9
use Symfony\Component\HttpFoundation\Request;
10
11
/**
12
 * @ControllerAnnotation
13
 */
14
class Controller
15
{
16
17
    /**
18
     * @var OneTimePassword
19
     */
20
    private $oneTimePassword;
21
22
    /**
23
     * @param OneTimePassword $oneTimePassword
24
     */
25 6
    public function __construct(OneTimePassword $oneTimePassword)
26
    {
27 6
        $this->oneTimePassword = $oneTimePassword;
28 6
    }
29
30
    /**
31
     * @param Request $request
32
     * @return Data
33
     * @Route("/one_time_password/", name="user.get_one_time_secret", methods="GET")
34
     */
35 2
    public function getOneTimeSecret(Request $request)
36
    {
37
        /** @var UserVO $user */
38 2
        $userVo = $request->attributes->get('user');
39
40 2
        if ($userVo->one_time_secret) {
41 1
            $secretData = $this->oneTimePassword->getData($userVo->one_time_secret);
42
        } else {
43 1
            $secretData = null;
44
        }
45
46 2
        return $secretData;
47
    }
48
49
    /**
50
     * @param Request $request
51
     * @return Data
52
     * @Route("/one_time_password/request/", name="user.request_one_time_secret", methods="POST")
53
     */
54 2
    public function requestOneTimeSecret(Request $request) : Data
55
    {
56
        /** @var UserVO $user */
57 2
        $userVo = $request->attributes->get('user');
58 2
        $newToken = (bool)$request->request->get('new');
59
60 2
        if (!$userVo->one_time_secret || $newToken) {
61 1
            $secretData = $this->oneTimePassword->generateSecret($userVo);
62
        } else {
63 1
            $secretData = $this->oneTimePassword->getData($userVo->one_time_secret);
64
        }
65
66 2
        return $secretData;
67
    }
68
69
    /**
70
     * @param Request $request
71
     * @return bool
72
     * @Route("/one_time_password/", name="user.delete_one_time_secret", methods="DELETE")
73
     */
74 1
    public function deleteOneTimeSecret(Request $request) : bool
75
    {
76
        /** @var UserVO $user */
77 1
        $userVo = $request->attributes->get('user');
78
79 1
        $this->oneTimePassword->deleteOneTimeSecret($userVo);
80
81 1
        return true;
82
    }
83
84
    /**
85
     * @param Request $request
86
     * @return bool
87
     * @Route("/one_time_password/mail/", name="authenticate.send_otp_mil", methods="POST")
88
     * @Guest
89
     */
90 1
    public function sendCodeViaMail(Request $request) : bool
91
    {
92 1
        $userName = $request->request->get('user_name');
93
94 1
        $this->oneTimePassword->sendCodeViaMail($userName);
95
96 1
        return true;
97
    }
98
}
99