Browse Source

Add SSL redirect middleware for #676

Maurits van der Schee 5 years ago
parent
commit
25c47df2ac

+ 5
- 1
src/Tqdev/PhpCrudApi/Api.php View File

25
 use Tqdev\PhpCrudApi\Middleware\IpAddressMiddleware;
25
 use Tqdev\PhpCrudApi\Middleware\IpAddressMiddleware;
26
 use Tqdev\PhpCrudApi\Middleware\JoinLimitsMiddleware;
26
 use Tqdev\PhpCrudApi\Middleware\JoinLimitsMiddleware;
27
 use Tqdev\PhpCrudApi\Middleware\JwtAuthMiddleware;
27
 use Tqdev\PhpCrudApi\Middleware\JwtAuthMiddleware;
28
-use Tqdev\PhpCrudApi\Middleware\XmlMiddleware;
29
 use Tqdev\PhpCrudApi\Middleware\MultiTenancyMiddleware;
28
 use Tqdev\PhpCrudApi\Middleware\MultiTenancyMiddleware;
30
 use Tqdev\PhpCrudApi\Middleware\PageLimitsMiddleware;
29
 use Tqdev\PhpCrudApi\Middleware\PageLimitsMiddleware;
31
 use Tqdev\PhpCrudApi\Middleware\ReconnectMiddleware;
30
 use Tqdev\PhpCrudApi\Middleware\ReconnectMiddleware;
32
 use Tqdev\PhpCrudApi\Middleware\Router\SimpleRouter;
31
 use Tqdev\PhpCrudApi\Middleware\Router\SimpleRouter;
33
 use Tqdev\PhpCrudApi\Middleware\SanitationMiddleware;
32
 use Tqdev\PhpCrudApi\Middleware\SanitationMiddleware;
33
+use Tqdev\PhpCrudApi\Middleware\SslRedirectMiddleware;
34
 use Tqdev\PhpCrudApi\Middleware\ValidationMiddleware;
34
 use Tqdev\PhpCrudApi\Middleware\ValidationMiddleware;
35
+use Tqdev\PhpCrudApi\Middleware\XmlMiddleware;
35
 use Tqdev\PhpCrudApi\Middleware\XsrfMiddleware;
36
 use Tqdev\PhpCrudApi\Middleware\XsrfMiddleware;
36
 use Tqdev\PhpCrudApi\OpenApi\OpenApiService;
37
 use Tqdev\PhpCrudApi\OpenApi\OpenApiService;
37
 use Tqdev\PhpCrudApi\Record\ErrorCode;
38
 use Tqdev\PhpCrudApi\Record\ErrorCode;
62
         $router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
63
         $router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
63
         foreach ($config->getMiddlewares() as $middleware => $properties) {
64
         foreach ($config->getMiddlewares() as $middleware => $properties) {
64
             switch ($middleware) {
65
             switch ($middleware) {
66
+                case 'sslRedirect':
67
+                    new SslRedirectMiddleware($router, $responder, $properties);
68
+                    break;
65
                 case 'cors':
69
                 case 'cors':
66
                     new CorsMiddleware($router, $responder, $properties);
70
                     new CorsMiddleware($router, $responder, $properties);
67
                     break;
71
                     break;

+ 27
- 0
src/Tqdev/PhpCrudApi/Middleware/SslRedirectMiddleware.php View File

1
+<?php
2
+
3
+namespace Tqdev\PhpCrudApi\Middleware;
4
+
5
+use Psr\Http\Message\ResponseInterface;
6
+use Psr\Http\Message\ServerRequestInterface;
7
+use Psr\Http\Server\RequestHandlerInterface;
8
+use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
9
+use Tqdev\PhpCrudApi\ResponseFactory;
10
+
11
+class SslRedirectMiddleware extends Middleware
12
+{
13
+    public function process(ServerRequestInterface $request, RequestHandlerInterface $next): ResponseInterface
14
+    {
15
+        $uri = $request->getUri();
16
+        $scheme = $uri->getScheme();
17
+        if ($scheme == 'http') {
18
+            $uri = $request->getUri();
19
+            $uri = $uri->withScheme('https');
20
+            $response = ResponseFactory::fromStatus(301);
21
+            $response = $response->withHeader('Location', $uri->__toString());
22
+        } else {
23
+            $response = $next->handle($request);
24
+        }
25
+        return $response;
26
+    }
27
+}

+ 1
- 1
tests/config/base.php View File

4
     'username' => 'incorrect_username',
4
     'username' => 'incorrect_username',
5
     'password' => 'incorrect_password',
5
     'password' => 'incorrect_password',
6
     'controllers' => 'records,columns,cache,openapi,geojson',
6
     'controllers' => 'records,columns,cache,openapi,geojson',
7
-    'middlewares' => 'xml,cors,reconnect,dbAuth,jwtAuth,basicAuth,authorization,sanitation,validation,ipAddress,multiTenancy,pageLimits,joinLimits,customization',
7
+    'middlewares' => 'sslRedirect,xml,cors,reconnect,dbAuth,jwtAuth,basicAuth,authorization,sanitation,validation,ipAddress,multiTenancy,pageLimits,joinLimits,customization',
8
     'dbAuth.mode' => 'optional',
8
     'dbAuth.mode' => 'optional',
9
     'dbAuth.returnedColumns' => 'id,username,password',
9
     'dbAuth.returnedColumns' => 'id,username,password',
10
     'jwtAuth.mode' => 'optional',
10
     'jwtAuth.mode' => 'optional',

Loading…
Cancel
Save