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

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

@@ -0,0 +1,27 @@
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,7 +4,7 @@ $settings = [
4 4
     'username' => 'incorrect_username',
5 5
     'password' => 'incorrect_password',
6 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 8
     'dbAuth.mode' => 'optional',
9 9
     'dbAuth.returnedColumns' => 'id,username,password',
10 10
     'jwtAuth.mode' => 'optional',

Loading…
Cancel
Save