Skip to content

Commit 909edd7

Browse files
committed
Start with Auth0 support
1 parent 7a230fa commit 909edd7

File tree

5 files changed

+150
-1
lines changed

5 files changed

+150
-1
lines changed

api.php

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1325,6 +1325,20 @@ public function success($result): Response
13251325
return new Response(Response::OK, $result);
13261326
}
13271327

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+
13281342
}
13291343

13301344
// file: src/Tqdev/PhpCrudApi/Database/ColumnConverter.php
@@ -2885,6 +2899,59 @@ public function handle(Request $request): Response
28852899

28862900
}
28872901

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+
28882955
// file: src/Tqdev/PhpCrudApi/Middleware/AuthorizationMiddleware.php
28892956

28902957
class AuthorizationMiddleware extends Middleware
@@ -4944,6 +5011,9 @@ public function __construct(Config $config)
49445011
case 'authorization':
49455012
new AuthorizationMiddleware($router, $responder, $properties, $reflection);
49465013
break;
5014+
case 'auth0':
5015+
new Auth0Middleware($router, $responder, $properties, $reflection);
5016+
break;
49475017
case 'customization':
49485018
new CustomizationMiddleware($router, $responder, $properties, $reflection);
49495019
break;
@@ -5345,6 +5415,8 @@ public static function fromString(String $request): Request
53455415
class Response
53465416
{
53475417
const OK = 200;
5418+
const MOVED_PERMANENTLY = 301;
5419+
const FOUND = 302;
53485420
const UNAUTHORIZED = 401;
53495421
const FORBIDDEN = 403;
53505422
const NOT_FOUND = 404;
@@ -5432,7 +5504,6 @@ public function __toString(): String
54325504
'username' => 'php-crud-api',
54335505
'password' => 'php-crud-api',
54345506
'database' => 'php-crud-api',
5435-
'middlewares' => 'basicAuth',
54365507
]);
54375508
$request = new Request();
54385509
$api = new Api($config);

src/Tqdev/PhpCrudApi/Api.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Tqdev\PhpCrudApi\Controller\RecordController;
1111
use Tqdev\PhpCrudApi\Controller\Responder;
1212
use Tqdev\PhpCrudApi\Database\GenericDB;
13+
use Tqdev\PhpCrudApi\Middleware\Auth0Middleware;
1314
use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
1415
use Tqdev\PhpCrudApi\Middleware\BasicAuthMiddleware;
1516
use Tqdev\PhpCrudApi\Middleware\CorsMiddleware;
@@ -70,6 +71,9 @@ public function __construct(Config $config)
7071
case 'authorization':
7172
new AuthorizationMiddleware($router, $responder, $properties, $reflection);
7273
break;
74+
case 'auth0':
75+
new Auth0Middleware($router, $responder, $properties, $reflection);
76+
break;
7377
case 'customization':
7478
new CustomizationMiddleware($router, $responder, $properties, $reflection);
7579
break;

src/Tqdev/PhpCrudApi/Controller/Responder.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,18 @@ public function success($result): Response
2020
return new Response(Response::OK, $result);
2121
}
2222

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+
2337
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

src/Tqdev/PhpCrudApi/Response.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
class Response
55
{
66
const OK = 200;
7+
const MOVED_PERMANENTLY = 301;
8+
const FOUND = 302;
79
const UNAUTHORIZED = 401;
810
const FORBIDDEN = 403;
911
const NOT_FOUND = 404;

0 commit comments

Comments
 (0)