Browse Source

Start with Auth0 support

Maurits van der Schee 6 years ago
parent
commit
909edd7503

+ 72
- 1
api.php View File

@@ -1325,6 +1325,20 @@ class Responder
1325 1325
         return new Response(Response::OK, $result);
1326 1326
     }
1327 1327
 
1328
+    public function redirect(String $url): Response
1329
+    {
1330
+        $response = new Response(Response::FOUND, '');
1331
+        $response->addHeader('Location', $url);
1332
+        return $response;
1333
+    }
1334
+
1335
+    public function html(String $url): Response
1336
+    {
1337
+        $response = new Response(Response::FOUND, '');
1338
+        $response->addHeader('Location', $url);
1339
+        return $response;
1340
+    }
1341
+
1328 1342
 }
1329 1343
 
1330 1344
 // file: src/Tqdev/PhpCrudApi/Database/ColumnConverter.php
@@ -2885,6 +2899,59 @@ class SimpleRouter implements Router
2885 2899
 
2886 2900
 }
2887 2901
 
2902
+// file: src/Tqdev/PhpCrudApi/Middleware/Auth0Middleware.php
2903
+
2904
+class Auth0Middleware extends Middleware
2905
+{
2906
+
2907
+    private function getFullUrl(String $path)
2908
+    {
2909
+        list($scheme, $default) = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? array('https', 443) : array('http', 80);
2910
+        $port = ($_SERVER['SERVER_PORT'] == $default) ? '' : (':' . $_SERVER['SERVER_PORT']);
2911
+        return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . $path;
2912
+    }
2913
+
2914
+    private function login(Request $request): Response
2915
+    {
2916
+        $domain = $this->getProperty('domain', '');
2917
+        $clientId = $this->getProperty('clientId', '');
2918
+        $redirectUri = $this->getFullUrl('/callback');
2919
+        $url = "https://$domain/authorize?response_type=token&client_id=$clientId&redirect_uri=$redirectUri";
2920
+        return $this->responder->redirect($url);
2921
+    }
2922
+
2923
+    private function callback(Request $request): Response
2924
+    {
2925
+        $response = $this->responder->success('<h1>test</h1>');
2926
+        $response->addHeader('Content-Type', 'text/html');
2927
+        return $response;
2928
+    }
2929
+
2930
+    private function logout(Request $request): Response
2931
+    {
2932
+        session_destroy();
2933
+        $url = $this->getFullUrl('/login');
2934
+        return $this->responder->redirect($url);
2935
+    }
2936
+
2937
+    public function handle(Request $request): Response
2938
+    {
2939
+        if (session_status() == PHP_SESSION_NONE) {
2940
+            session_start();
2941
+        }
2942
+        $path = $request->getPathSegment(1);
2943
+        switch ($path) {
2944
+            case 'login':
2945
+                return $this->login($request);
2946
+            case 'callback':
2947
+                return $this->callback($request);
2948
+            case 'logout':
2949
+                return $this->logout($request);
2950
+        }
2951
+        return $this->next->handle($request);
2952
+    }
2953
+}
2954
+
2888 2955
 // file: src/Tqdev/PhpCrudApi/Middleware/AuthorizationMiddleware.php
2889 2956
 
2890 2957
 class AuthorizationMiddleware extends Middleware
@@ -4944,6 +5011,9 @@ class Api
4944 5011
                 case 'authorization':
4945 5012
                     new AuthorizationMiddleware($router, $responder, $properties, $reflection);
4946 5013
                     break;
5014
+                case 'auth0':
5015
+                    new Auth0Middleware($router, $responder, $properties, $reflection);
5016
+                    break;
4947 5017
                 case 'customization':
4948 5018
                     new CustomizationMiddleware($router, $responder, $properties, $reflection);
4949 5019
                     break;
@@ -5345,6 +5415,8 @@ class Request
5345 5415
 class Response
5346 5416
 {
5347 5417
     const OK = 200;
5418
+    const MOVED_PERMANENTLY = 301;
5419
+    const FOUND = 302;
5348 5420
     const UNAUTHORIZED = 401;
5349 5421
     const FORBIDDEN = 403;
5350 5422
     const NOT_FOUND = 404;
@@ -5432,7 +5504,6 @@ $config = new Config([
5432 5504
     'username' => 'php-crud-api',
5433 5505
     'password' => 'php-crud-api',
5434 5506
     'database' => 'php-crud-api',
5435
-    'middlewares' => 'basicAuth',
5436 5507
 ]);
5437 5508
 $request = new Request();
5438 5509
 $api = new Api($config);

+ 4
- 0
src/Tqdev/PhpCrudApi/Api.php View File

@@ -10,6 +10,7 @@ use Tqdev\PhpCrudApi\Controller\OpenApiController;
10 10
 use Tqdev\PhpCrudApi\Controller\RecordController;
11 11
 use Tqdev\PhpCrudApi\Controller\Responder;
12 12
 use Tqdev\PhpCrudApi\Database\GenericDB;
13
+use Tqdev\PhpCrudApi\Middleware\Auth0Middleware;
13 14
 use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
14 15
 use Tqdev\PhpCrudApi\Middleware\BasicAuthMiddleware;
15 16
 use Tqdev\PhpCrudApi\Middleware\CorsMiddleware;
@@ -70,6 +71,9 @@ class Api
70 71
                 case 'authorization':
71 72
                     new AuthorizationMiddleware($router, $responder, $properties, $reflection);
72 73
                     break;
74
+                case 'auth0':
75
+                    new Auth0Middleware($router, $responder, $properties, $reflection);
76
+                    break;
73 77
                 case 'customization':
74 78
                     new CustomizationMiddleware($router, $responder, $properties, $reflection);
75 79
                     break;

+ 14
- 0
src/Tqdev/PhpCrudApi/Controller/Responder.php View File

@@ -20,4 +20,18 @@ class Responder
20 20
         return new Response(Response::OK, $result);
21 21
     }
22 22
 
23
+    public function redirect(String $url): Response
24
+    {
25
+        $response = new Response(Response::FOUND, '');
26
+        $response->addHeader('Location', $url);
27
+        return $response;
28
+    }
29
+
30
+    public function html(String $url): Response
31
+    {
32
+        $response = new Response(Response::FOUND, '');
33
+        $response->addHeader('Location', $url);
34
+        return $response;
35
+    }
36
+
23 37
 }

+ 58
- 0
src/Tqdev/PhpCrudApi/Middleware/Auth0Middleware.php View File

@@ -0,0 +1,58 @@
1
+<?php
2
+namespace Tqdev\PhpCrudApi\Middleware;
3
+
4
+use Tqdev\PhpCrudApi\Controller\Responder;
5
+use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
6
+use Tqdev\PhpCrudApi\Request;
7
+use Tqdev\PhpCrudApi\Response;
8
+
9
+class Auth0Middleware extends Middleware
10
+{
11
+
12
+    private function getFullUrl(String $path)
13
+    {
14
+        list($scheme, $default) = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? array('https', 443) : array('http', 80);
15
+        $port = ($_SERVER['SERVER_PORT'] == $default) ? '' : (':' . $_SERVER['SERVER_PORT']);
16
+        return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . $path;
17
+    }
18
+
19
+    private function login(Request $request): Response
20
+    {
21
+        $domain = $this->getProperty('domain', '');
22
+        $clientId = $this->getProperty('clientId', '');
23
+        $redirectUri = $this->getFullUrl('/callback');
24
+        $url = "https://$domain/authorize?response_type=token&client_id=$clientId&redirect_uri=$redirectUri";
25
+        return $this->responder->redirect($url);
26
+    }
27
+
28
+    private function callback(Request $request): Response
29
+    {
30
+        $response = $this->responder->success('<h1>test</h1>');
31
+        $response->addHeader('Content-Type', 'text/html');
32
+        return $response;
33
+    }
34
+
35
+    private function logout(Request $request): Response
36
+    {
37
+        session_destroy();
38
+        $url = $this->getFullUrl('/login');
39
+        return $this->responder->redirect($url);
40
+    }
41
+
42
+    public function handle(Request $request): Response
43
+    {
44
+        if (session_status() == PHP_SESSION_NONE) {
45
+            session_start();
46
+        }
47
+        $path = $request->getPathSegment(1);
48
+        switch ($path) {
49
+            case 'login':
50
+                return $this->login($request);
51
+            case 'callback':
52
+                return $this->callback($request);
53
+            case 'logout':
54
+                return $this->logout($request);
55
+        }
56
+        return $this->next->handle($request);
57
+    }
58
+}

+ 2
- 0
src/Tqdev/PhpCrudApi/Response.php View File

@@ -4,6 +4,8 @@ namespace Tqdev\PhpCrudApi;
4 4
 class Response
5 5
 {
6 6
     const OK = 200;
7
+    const MOVED_PERMANENTLY = 301;
8
+    const FOUND = 302;
7 9
     const UNAUTHORIZED = 401;
8 10
     const FORBIDDEN = 403;
9 11
     const NOT_FOUND = 404;

Loading…
Cancel
Save