Skip to content

Commit b5b4960

Browse files
OXDEV-9889 Fix code style issues and rename datatype to DTO
1 parent 9ccfaa2 commit b5b4960

11 files changed

Lines changed: 128 additions & 111 deletions

File tree

src/Authentication/OAuth2/Controller/OAuthController.php

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,17 @@
99

1010
class OAuthController extends FrontendController
1111
{
12-
public function render()
12+
public function login(): void
1313
{
1414
$providerCollector = $this->getService(ProviderCollectorInterface::class);
1515

16-
$provider = $providerCollector
17-
->getProvider($_GET['provider'])
18-
->getClient();
19-
20-
Registry::getUtils()->redirect($provider->getAuthorizationUrl(), 302);
16+
$provider = $providerCollector->getProvider($_GET['provider']);
17+
$provider->getClient();
2118

22-
exit;
19+
Registry::getUtils()->redirect($provider->getAuthorizationUrl());
2320
}
2421

25-
public function redirect()
22+
public function redirect(): void
2623
{
2724
$provider = $this
2825
->getService(ProviderCollectorInterface::class)
@@ -32,12 +29,12 @@ public function redirect()
3229

3330
$accessToken = $provider->getAccessToken($_GET['code']);
3431

35-
$userDataType = $provider->getUserInfo($accessToken);
32+
$userDTO = $provider->getUserInfo($accessToken);
3633

3734
$this
3835
->getService(UserServiceInterface::class)
39-
->login($userDataType);
36+
->login($userDTO);
4037

41-
Registry::getUtils()->redirect('', 302);
38+
Registry::getUtils()->redirect('');
4239
}
4340
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
/**
4+
* Copyright © OXID eSales AG. All rights reserved.
5+
* See LICENSE file for license details.
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace OxidEsales\SecurityModule\Authentication\OAuth2\DTO;
11+
12+
class UserDTO implements UserDTOInterface
13+
{
14+
public function __construct(
15+
private readonly ?string $firstName,
16+
private readonly ?string $lastName,
17+
private readonly ?string $email,
18+
) {
19+
}
20+
21+
public function getFirstName(): ?string
22+
{
23+
return $this->firstName;
24+
}
25+
26+
public function getLastName(): ?string
27+
{
28+
return $this->lastName;
29+
}
30+
31+
public function getEmail(): ?string
32+
{
33+
return $this->email;
34+
}
35+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
/**
4+
* Copyright © OXID eSales AG. All rights reserved.
5+
* See LICENSE file for license details.
6+
*/
7+
8+
namespace OxidEsales\SecurityModule\Authentication\OAuth2\DTO;
9+
10+
interface UserDTOInterface
11+
{
12+
public function getFirstName(): ?string;
13+
14+
public function getLastName(): ?string;
15+
16+
public function getEmail(): ?string;
17+
}

src/Authentication/OAuth2/DataType/UserDataType.php

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/Authentication/OAuth2/DataType/UserDataTypeInterface.php

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/Authentication/OAuth2/Service/Provider/Facebook/Facebook.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
namespace OxidEsales\SecurityModule\Authentication\OAuth2\Service\Provider\Facebook;
1111

1212
use League\OAuth2\Client\Provider\AbstractProvider;
13+
use League\OAuth2\Client\Token\AccessToken;
1314
use League\OAuth2\Client\Token\AccessTokenInterface;
1415
use League\OAuth2\Client\Provider\Facebook as FacebookProvider;
15-
use OxidEsales\SecurityModule\Authentication\OAuth2\DataType\UserDataType;
16-
use OxidEsales\SecurityModule\Authentication\OAuth2\DataType\UserDataTypeInterface;
16+
use OxidEsales\SecurityModule\Authentication\OAuth2\DTO\UserDTO;
17+
use OxidEsales\SecurityModule\Authentication\OAuth2\DTO\UserDTOInterface;
1718
use OxidEsales\SecurityModule\Authentication\OAuth2\Service\ModuleSettingsServiceInterface;
1819
use OxidEsales\SecurityModule\Authentication\OAuth2\Service\Provider\ProviderInterface;
1920

@@ -43,21 +44,22 @@ public function getClient(): AbstractProvider
4344
return $this->facebookProvider;
4445
}
4546

46-
public function getAuthorizationUrl(): string
47+
public function getAuthorizationUrl(array $options = []): string
4748
{
48-
return $this->facebookProvider->getAuthorizationUrl();
49+
return $this->facebookProvider->getAuthorizationUrl($options);
4950
}
5051

5152
public function getAccessToken(string $code): AccessTokenInterface
5253
{
5354
return $this->facebookProvider->getAccessToken('authorization_code', ['code' => $code]);
5455
}
5556

56-
public function getUserInfo(AccessTokenInterface $token): UserDataTypeInterface
57+
public function getUserInfo(AccessTokenInterface $token): UserDTOInterface
5758
{
59+
/** @var AccessToken $token */
5860
$user = $this->facebookProvider->getResourceOwner($token);
5961

60-
return new UserDataType(
62+
return new UserDTO(
6163
$user->getFirstName(),
6264
$user->getLastName(),
6365
$user->getEmail(),

src/Authentication/OAuth2/Service/Provider/ProviderInterface.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use League\OAuth2\Client\Provider\AbstractProvider;
66
use League\OAuth2\Client\Token\AccessTokenInterface;
7-
use OxidEsales\SecurityModule\Authentication\OAuth2\DataType\UserDataTypeInterface;
7+
use OxidEsales\SecurityModule\Authentication\OAuth2\DTO\UserDTOInterface;
88

99
interface ProviderInterface
1010
{
@@ -21,7 +21,7 @@ public function getClient(): AbstractProvider;
2121
/**
2222
* Get the authorization URL to redirect the user for login/consent.
2323
*/
24-
public function getAuthorizationUrl(): string;
24+
public function getAuthorizationUrl(array $options = []): string;
2525

2626
/**
2727
* Exchange the authorization code for an access token.
@@ -32,7 +32,7 @@ public function getAccessToken(string $code): AccessTokenInterface;
3232
* Fetch user information (claims) from the provider using the access token.
3333
* Should return standardized data: id, email, name, avatar, etc.
3434
*/
35-
public function getUserInfo(AccessTokenInterface $token): UserDataTypeInterface;
35+
public function getUserInfo(AccessTokenInterface $token): UserDTOInterface;
3636

3737
/**
3838
* Validate the provider response.

src/Authentication/OAuth2/Service/UserService.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
use OxidEsales\Eshop\Application\Model\User;
1313
use OxidEsales\EshopCommunity\Internal\Framework\Session\SessionInterface;
14-
use OxidEsales\SecurityModule\Authentication\OAuth2\DataType\UserDataTypeInterface;
14+
use OxidEsales\SecurityModule\Authentication\OAuth2\DTO\UserDTOInterface;
1515
use OxidEsales\SecurityModule\Authentication\OAuth2\Exception\UserBlockedException;
1616
use OxidEsales\SecurityModule\Authentication\OAuth2\Exception\UserNotFoundException;
1717
use OxidEsales\SecurityModule\Authentication\OAuth2\Factory\UserFactoryInterface;
@@ -24,12 +24,16 @@ public function __construct(
2424
) {
2525
}
2626

27-
public function login(UserDataTypeInterface $userDataType): void
27+
public function login(UserDTOInterface $userDTO): void
2828
{
29+
if (!$userDTO->getEmail()) {
30+
throw new UserNotFoundException();
31+
}
32+
2933
try {
30-
$userModel = $this->getUserByUserEmail($userDataType->getEmail());
34+
$userModel = $this->getUserByUserEmail($userDTO->getEmail());
3135
} catch (UserNotFoundException $e) {
32-
$userModel = $this->createUser($userDataType);
36+
$userModel = $this->createUser($userDTO);
3337
}
3438

3539
if ($userModel->inGroup('oxidblocked')) {
@@ -39,27 +43,29 @@ public function login(UserDataTypeInterface $userDataType): void
3943
$this->session->set('usr', $userModel->getId());
4044
}
4145

42-
public function getUserByUserEmail(string $username): User|bool
46+
public function getUserByUserEmail(string $username): User
4347
{
4448
$userModel = $this->userFactory->create();
4549

4650
$userId = $userModel->getIdByUserName($username);
47-
$userLoaded = $userModel->load($userId);
48-
if (!$userLoaded) {
51+
if (
52+
!$userId ||
53+
!$userModel->load($userId)
54+
) {
4955
throw new UserNotFoundException();
5056
}
5157

5258
return $userModel;
5359
}
5460

55-
public function createUser(userDataTypeInterface $userDataType): User
61+
public function createUser(UserDTOInterface $userDTO): User
5662
{
5763
$user = $this->userFactory->create();
5864
$user->assign([
59-
'OXUSERNAME' => $userDataType->getEmail(),
60-
'OXFNAME' => $userDataType->getFirstName(),
61-
'OXLNAME' => $userDataType->getLastName(),
62-
'OXREGISTER' => time()
65+
'OXUSERNAME' => $userDTO->getEmail(),
66+
'OXFNAME' => $userDTO->getFirstName(),
67+
'OXLNAME' => $userDTO->getLastName(),
68+
'OXREGISTER' => date('Y-m-d H:i:s')
6369
]);
6470
$user->setPassword(bin2hex(random_bytes(20)));
6571
$user->createUser();

src/Authentication/OAuth2/Service/UserServiceInterface.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
namespace OxidEsales\SecurityModule\Authentication\OAuth2\Service;
99

1010
use OxidEsales\Eshop\Application\Model\User;
11-
use OxidEsales\SecurityModule\Authentication\OAuth2\DataType\UserDataTypeInterface;
11+
use OxidEsales\SecurityModule\Authentication\OAuth2\DTO\UserDTOInterface;
1212

1313
interface UserServiceInterface
1414
{
15-
public function login(UserDataTypeInterface $userDataType): void;
15+
public function login(UserDTOInterface $userDTO): void;
1616

17-
public function getUserByUserEmail(string $username): User|bool;
17+
public function getUserByUserEmail(string $username): User;
1818

19-
public function createUser(UserDataTypeInterface $userDataType): User;
19+
public function createUser(UserDTOInterface $userDTO): User;
2020
}

0 commit comments

Comments
 (0)