Skip to content

Commit 1e37436

Browse files
committedAug 11, 2023
refactoring and endpoint to check if logged in
1 parent 5c5ad03 commit 1e37436

File tree

6 files changed

+51
-17
lines changed

6 files changed

+51
-17
lines changed
 

‎lib/Controller/AuthController.php

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace RexGraphQL\Controller;
4+
5+
use GraphQL\Service\Auth\AuthService;
6+
use TheCodingMachine\GraphQLite\Annotations\Query;
7+
8+
class AuthController
9+
{
10+
private AuthService $service;
11+
public function __construct()
12+
{
13+
$this->service = new AuthService();
14+
}
15+
16+
#[Query]
17+
public function isRedaxoLoggedIn(): bool
18+
{
19+
return $this->service->isRedaxoLoggedIn();
20+
}
21+
22+
}

‎lib/Endpoint.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,20 @@
33
namespace GraphQL;
44

55
use GraphQL\Error\DebugFlag;
6+
use GraphQL\Service\Auth\AuthService;
67
use GraphQL\Validator\DocumentValidator;
78
use GraphQL\Validator\Rules\QueryDepth;
89
use rex;
910
use rex_extension;
1011
use rex_extension_point;
1112
use rex_response;
1213
use rex_var;
13-
use RexGraphQL\Auth\AuthService;
1414
use Symfony\Component\DependencyInjection\Container;
1515
use TheCodingMachine\GraphQLite\Context\Context;
1616
use TheCodingMachine\GraphQLite\Exceptions\WebonyxErrorHandler;
1717
use TheCodingMachine\GraphQLite\Schema;
1818
use TheCodingMachine\GraphQLite\SchemaFactory;
1919
use Yiisoft\Cache\ArrayCache;
20-
2120
use function is_array;
2221

2322
class Endpoint

‎lib/Extensions.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace GraphQL;
44

5-
use RexGraphQL\Auth\AuthService;
6-
use RexGraphQL\Auth\JwtService;
5+
use GraphQL\Service\Auth\AuthService;
6+
use GraphQL\Service\Auth\JwtService;
77
use RexGraphQL\Connector\Connector;
88
use RexGraphQL\RexGraphQL;
99

‎lib/Auth/AuthService.php ‎lib/Service/Auth/AuthService.php

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php
22

3-
namespace RexGraphQL\Auth;
3+
namespace GraphQL\Service\Auth;
44
use TheCodingMachine\GraphQLite\Security\AuthenticationServiceInterface;
55

6+
67
class AuthService implements AuthenticationServiceInterface
78
{
89

@@ -19,11 +20,11 @@ public function __construct()
1920
public function isLogged(): bool
2021
{
2122
$secret = \rex_addon::get('graphql')->getConfig(self::SHARED_SECRET_CONFIG_KEY);
22-
$bearerToken = static::parseBearerToken();
23+
$bearerToken = static::getBearerToken();
2324
if(!$bearerToken && $secret) {
2425
return false;
2526
}
26-
if(($bearerToken && $this->jwtService->validateToken($bearerToken)) || !$secret) {
27+
if($this->isRedaxoLoggedIn() || !$secret) {
2728
return true;
2829
}
2930
return $bearerToken === $secret;
@@ -34,7 +35,13 @@ public function getUser(): ?object
3435
return null;
3536
}
3637

37-
private static function parseBearerToken(): ?string
38+
public function isRedaxoLoggedIn(): bool
39+
{
40+
$bearerToken = self::getBearerToken();
41+
return $bearerToken && $this->jwtService->validateToken($bearerToken);
42+
}
43+
44+
public static function getBearerToken(): ?string
3845
{
3946
$authHeader = $_SERVER['HTTP_AUTHORIZATION'] ?? null;
4047
if (null === $authHeader) {

‎lib/Auth/JwtService.php ‎lib/Service/Auth/JwtService.php

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
<?php
22

3-
namespace RexGraphQL\Auth;
3+
namespace GraphQL\Service\Auth;
44

55
use Firebase\JWT\JWT;
66
use Firebase\JWT\Key;
7+
use PHPMailer\PHPMailer\Exception;
78

89
class JwtService
910
{
@@ -16,12 +17,17 @@ public function validateToken(string $token): bool
1617
return false;
1718
}
1819
$key = new Key($key, self::KEY_ALGORITHM);
19-
$token = JWT::decode($token, $key);
20-
if($token->userId > 0) {
21-
$user = \rex_user::get($token->userId);
22-
\rex::setProperty('user', $user);
23-
return true;
20+
try {
21+
$token = JWT::decode($token, $key);
22+
if($token->userId > 0) {
23+
$user = \rex_user::get($token->userId);
24+
\rex::setProperty('user', $user);
25+
return true;
26+
}
27+
} catch (\DomainException|\UnexpectedValueException $exception) {
28+
return false;
2429
}
30+
2531
return false;
2632
}
2733

@@ -35,7 +41,7 @@ public function generateToken(): ?string {
3541
$key = $this->getKey();
3642
if($user && $key) {
3743
$payload = [
38-
'userId' => $user->getId()
44+
'userId' => $user->getId(),
3945
];
4046
return JWT::encode($payload, $key, self::KEY_ALGORITHM);
4147
}

‎pages/index.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22

3-
use RexGraphQL\Auth\AuthService;
4-
use RexGraphQL\Auth\JwtService;
3+
use GraphQL\Service\Auth\AuthService;
4+
use GraphQL\Service\Auth\JwtService;
55
use RexGraphQL\RexGraphQL;
66

77
echo rex_view::title($this->getProperty('page')['title']);

0 commit comments

Comments
 (0)