Skip to content

Commit b594f4c

Browse files
committed
OXDEV-8525 Check how to refresh token
1 parent 7f182c3 commit b594f4c

3 files changed

Lines changed: 29 additions & 6 deletions

File tree

src/Framework/RequestReader.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use OxidEsales\EshopCommunity\Core\Registry;
1818
use OxidEsales\GraphQL\Base\Exception\UnableToParseToken;
1919
use OxidEsales\GraphQL\Base\Service\JwtConfigurationBuilder;
20+
use OxidEsales\GraphQL\Base\Service\RefreshTokenServiceInterface;
2021
use OxidEsales\GraphQL\Base\Service\TokenValidator;
2122

2223
use function apache_request_headers;
@@ -41,7 +42,7 @@ public function __construct(
4142
*/
4243
public function getAuthToken(): ?UnencryptedToken
4344
{
44-
$authHeader = $this->getAuthorizationHeader();
45+
$authHeader = $this->getAuthorizationHeader() ?: $this->getAuthCookie();
4546

4647
if ($authHeader === null) {
4748
return null;
@@ -64,6 +65,11 @@ public function getAuthToken(): ?UnencryptedToken
6465
throw new UnableToParseToken();
6566
}
6667

68+
// using refresh token might not be necessary
69+
// if ($authHeader === $this->getAuthCookie()) {
70+
// $token = $this->refreshTokenService->refreshTokenCookie($token);
71+
// }
72+
6773
$this->tokenValidator->validateToken($token);
6874

6975
return $token;
@@ -146,10 +152,6 @@ private function getAuthorizationHeader(): ?string
146152
return $value;
147153
}
148154

149-
if ($authCookie = $this->getAuthCookie()) {
150-
return 'Bearer ' . $authCookie;
151-
}
152-
153155
if (function_exists('apache_request_headers')) {
154156
$headers = apache_request_headers();
155157

@@ -167,7 +169,9 @@ private function getAuthorizationHeader(): ?string
167169

168170
private function getAuthCookie(): ?string
169171
{
170-
return (string) Registry::getUtilsServer()->getOxCookie('oxapi_jwt');
172+
$authCookie = (string) Registry::getUtilsServer()->getOxCookie('oxapi_jwt');
173+
// var_dump($authCookie);
174+
return $authCookie ? 'Bearer ' . $authCookie : null;
171175
}
172176

173177
private function getRegularHeaderValue(): ?string

src/Service/RefreshTokenService.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99

1010
namespace OxidEsales\GraphQL\Base\Service;
1111

12+
use Lcobucci\JWT\UnencryptedToken;
13+
use OxidEsales\EshopCommunity\Core\Registry;
1214
use OxidEsales\GraphQL\Base\DataType\UserInterface;
1315
use OxidEsales\GraphQL\Base\Infrastructure\RefreshTokenRepositoryInterface;
1416

@@ -46,4 +48,20 @@ public function refreshToken(string $refreshToken, string $fingerprintHash): str
4648

4749
return $newToken->toString();
4850
}
51+
52+
public function refreshTokenCookie(UnencryptedToken $token): UnencryptedToken
53+
{
54+
$expTime = $token->claims()->get('exp')->getTimestamp();
55+
if ($expTime > time()) {
56+
return $token;
57+
}
58+
59+
$refreshToken = (string) Registry::getUtilsServer()->getOxCookie('oxapi_refresh');
60+
$user = $this->refreshTokenRepository->getTokenUser($refreshToken);
61+
$newToken = $this->tokenService->createTokenForUser($user);
62+
$newExpTime = $newToken->claims()->get('exp')->getTimestamp();
63+
Registry::getUtilsServer()->setOxCookie('oxapi_jwt', $newToken->toString(), $newExpTime,null, null, false);
64+
65+
return $newToken;
66+
}
4967
}

src/Service/TokenValidator.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
namespace OxidEsales\GraphQL\Base\Service;
1111

1212
use Lcobucci\JWT\UnencryptedToken;
13+
use OxidEsales\EshopCommunity\Core\Registry;
1314
use OxidEsales\GraphQL\Base\Exception\InvalidToken;
1415
use OxidEsales\GraphQL\Base\Exception\TokenUserBlocked;
1516
use OxidEsales\GraphQL\Base\Exception\UnknownToken;

0 commit comments

Comments
 (0)