Skip to content

Commit 25c47df

Browse files
committed
Add SSL redirect middleware for #676
1 parent e0e3c4c commit 25c47df

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

src/Tqdev/PhpCrudApi/Api.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@
2525
use Tqdev\PhpCrudApi\Middleware\IpAddressMiddleware;
2626
use Tqdev\PhpCrudApi\Middleware\JoinLimitsMiddleware;
2727
use Tqdev\PhpCrudApi\Middleware\JwtAuthMiddleware;
28-
use Tqdev\PhpCrudApi\Middleware\XmlMiddleware;
2928
use Tqdev\PhpCrudApi\Middleware\MultiTenancyMiddleware;
3029
use Tqdev\PhpCrudApi\Middleware\PageLimitsMiddleware;
3130
use Tqdev\PhpCrudApi\Middleware\ReconnectMiddleware;
3231
use Tqdev\PhpCrudApi\Middleware\Router\SimpleRouter;
3332
use Tqdev\PhpCrudApi\Middleware\SanitationMiddleware;
33+
use Tqdev\PhpCrudApi\Middleware\SslRedirectMiddleware;
3434
use Tqdev\PhpCrudApi\Middleware\ValidationMiddleware;
35+
use Tqdev\PhpCrudApi\Middleware\XmlMiddleware;
3536
use Tqdev\PhpCrudApi\Middleware\XsrfMiddleware;
3637
use Tqdev\PhpCrudApi\OpenApi\OpenApiService;
3738
use Tqdev\PhpCrudApi\Record\ErrorCode;
@@ -62,6 +63,9 @@ public function __construct(Config $config)
6263
$router = new SimpleRouter($config->getBasePath(), $responder, $cache, $config->getCacheTime(), $config->getDebug());
6364
foreach ($config->getMiddlewares() as $middleware => $properties) {
6465
switch ($middleware) {
66+
case 'sslRedirect':
67+
new SslRedirectMiddleware($router, $responder, $properties);
68+
break;
6569
case 'cors':
6670
new CorsMiddleware($router, $responder, $properties);
6771
break;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

tests/config/base.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
'username' => 'incorrect_username',
55
'password' => 'incorrect_password',
66
'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',
88
'dbAuth.mode' => 'optional',
99
'dbAuth.returnedColumns' => 'id,username,password',
1010
'jwtAuth.mode' => 'optional',

0 commit comments

Comments
 (0)