PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / trunk
Booking for Appointments and Events Calendar – Amelia vtrunk
2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / src / Application / Controller / User / LoginCabinetController.php
ameliabooking / src / Application / Controller / User Last commit date
Customer 1 month ago Provider 1 month ago DeleteUserController.php 1 month ago GetCurrentUserController.php 1 month ago GetUserDeleteEffectController.php 1 month ago GetWPUsersController.php 1 month ago LoginCabinetController.php 2 weeks ago LogoutCabinetController.php 2 weeks ago
LoginCabinetController.php
128 lines
1 <?php
2
3 namespace AmeliaBooking\Application\Controller\User;
4
5 use AmeliaBooking\Application\Commands\CommandResult;
6 use AmeliaBooking\Application\Commands\User\LoginCabinetCommand;
7 use AmeliaBooking\Application\Controller\Controller;
8 use AmeliaBooking\Domain\Events\DomainEventBus;
9 use AmeliaVendor\Psr\Http\Message\ServerRequestInterface as Request;
10
11 /**
12 * Class LoginCabinetController
13 *
14 * @package AmeliaBooking\Application\Controller\User
15 */
16 class LoginCabinetController extends Controller
17 {
18 /**
19 * Fields for login that can be received from front-end
20 *
21 * @var array
22 */
23 protected $allowedFields = [
24 'email',
25 'password',
26 'token',
27 'checkIfWpUser',
28 'cabinetType',
29 'changePass',
30 'recaptcha',
31 ];
32
33 /**
34 * Instantiates the Login Cabinet command to hand it over to the Command Handler
35 *
36 * @param Request $request
37 * @param $args
38 *
39 * @return LoginCabinetCommand
40 * @throws \RuntimeException
41 */
42 protected function instantiateCommand(Request $request, $args)
43 {
44 $command = new LoginCabinetCommand($args);
45
46 $requestBody = $request->getParsedBody();
47
48 $this->setCommandFields($command, $requestBody);
49 $command->setToken($request);
50
51 return $command;
52 }
53
54 /**
55 * @param DomainEventBus $eventBus
56 * @param CommandResult $result
57 *
58 * @return void
59 */
60 protected function emitSuccessEvent(DomainEventBus $eventBus, CommandResult $result)
61 {
62 $data = $result->getData();
63
64 if (
65 $result->getResult() !== CommandResult::RESULT_SUCCESS ||
66 !is_array($data) ||
67 empty($data['token'])
68 ) {
69 return;
70 }
71
72 $expires = $this->getTokenExpiration($data['token']);
73
74 $this->setCabinetCookie('ameliaToken', $data['token'], $expires);
75
76 if (!empty($data['user']['email'])) {
77 $this->setCabinetCookie('ameliaUserEmail', $data['user']['email'], $expires);
78 }
79 }
80
81 /**
82 * @param string $name
83 * @param string $value
84 * @param int $expires
85 *
86 * @return void
87 */
88 private function setCabinetCookie($name, $value, $expires)
89 {
90 if (headers_sent()) {
91 return;
92 }
93
94 setcookie(
95 $name,
96 $value,
97 [
98 'expires' => $expires,
99 'path' => '/',
100 'secure' => is_ssl(),
101 'httponly' => false,
102 'samesite' => 'Lax',
103 ]
104 );
105 }
106
107 /**
108 * @param string $token
109 *
110 * @return int
111 */
112 private function getTokenExpiration($token)
113 {
114 $parts = explode('.', $token);
115
116 if (count($parts) < 2) {
117 return 0;
118 }
119
120 $payload = json_decode(
121 base64_decode(strtr($parts[1], '-_', '+/')),
122 true
123 );
124
125 return !empty($payload['exp']) ? (int)$payload['exp'] : 0;
126 }
127 }
128