Skip to content

Commit 43f4000

Browse files
committed
Add custom controllers as proposed in #546
1 parent 661c312 commit 43f4000

File tree

6 files changed

+40
-17
lines changed

6 files changed

+40
-17
lines changed

api.php

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7590,7 +7590,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
75907590
use Psr\Http\Message\ResponseInterface;
75917591
use Psr\Http\Message\ServerRequestInterface;
75927592
use Psr\Http\Server\RequestHandlerInterface;
7593-
use Tqdev\PhpCrudApi\Controller\Responder;
75947593
use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
75957594
use Tqdev\PhpCrudApi\Record\ErrorCode;
75967595
use Tqdev\PhpCrudApi\RequestUtils;
@@ -7616,7 +7615,7 @@ private function getVerifiedClaims(string $token, int $time, int $leeway, int $t
76167615
if (isset($header['kid'])) {
76177616
$kid = $header['kid'];
76187617
}
7619-
if (!$secrets[$kid]) {
7618+
if (!isset($secrets[$kid])) {
76207619
return array();
76217620
}
76227621
$secret = $secrets[$kid];
@@ -7684,14 +7683,14 @@ private function getClaims(string $token): array
76847683
$leeway = (int) $this->getProperty('leeway', '5');
76857684
$ttl = (int) $this->getProperty('ttl', '30');
76867685
$secrets = $this->getMapProperty('secrets', '');
7686+
if (!$secrets) {
7687+
$secrets = [$this->getProperty('secret', '')];
7688+
}
76877689
$requirements = array(
76887690
'alg' => $this->getArrayProperty('algorithms', ''),
76897691
'aud' => $this->getArrayProperty('audiences', ''),
76907692
'iss' => $this->getArrayProperty('issuers', ''),
76917693
);
7692-
if (!$secrets) {
7693-
return array();
7694-
}
76957694
return $this->getVerifiedClaims($token, $time, $leeway, $ttl, $secrets, $requirements);
76967695
}
76977696

@@ -8178,12 +8177,17 @@ class OpenApiBuilder
81788177
private $openapi;
81798178
private $records;
81808179
private $columns;
8180+
private $builders;
81818181

8182-
public function __construct(ReflectionService $reflection, array $base, array $controllers)
8182+
public function __construct(ReflectionService $reflection, array $base, array $controllers, array $builders)
81838183
{
81848184
$this->openapi = new OpenApiDefinition($base);
81858185
$this->records = in_array('records', $controllers) ? new OpenApiRecordsBuilder($this->openapi, $reflection) : null;
81868186
$this->columns = in_array('columns', $controllers) ? new OpenApiColumnsBuilder($this->openapi) : null;
8187+
$this->builders = array();
8188+
foreach ($builders as $className) {
8189+
$this->builders[] = new $className($this->openapi, $reflection);
8190+
}
81878191
}
81888192

81898193
private function getServerUrl(): string
@@ -8208,6 +8212,9 @@ public function build(): OpenApiDefinition
82088212
if ($this->columns) {
82098213
$this->columns->build();
82108214
}
8215+
foreach ($this->builders as $builder) {
8216+
$builder->build();
8217+
}
82118218
return $this->openapi;
82128219
}
82138220
}
@@ -8216,8 +8223,6 @@ public function build(): OpenApiDefinition
82168223
// file: src/Tqdev/PhpCrudApi/OpenApi/OpenApiColumnsBuilder.php
82178224
namespace Tqdev\PhpCrudApi\OpenApi {
82188225

8219-
use Tqdev\PhpCrudApi\Column\ReflectionService;
8220-
use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
82218226
use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
82228227

82238228
class OpenApiColumnsBuilder
@@ -8786,9 +8791,9 @@ class OpenApiService
87868791
{
87878792
private $builder;
87888793

8789-
public function __construct(ReflectionService $reflection, array $base, array $controllers)
8794+
public function __construct(ReflectionService $reflection, array $base, array $controllers, array $customBuilders)
87908795
{
8791-
$this->builder = new OpenApiBuilder($reflection, $base, $controllers);
8796+
$this->builder = new OpenApiBuilder($reflection, $base, $controllers, $customBuilders);
87928797
}
87938798

87948799
public function get(): OpenApiDefinition
@@ -10078,7 +10083,7 @@ public function __construct(Config $config)
1007810083
new CacheController($router, $responder, $cache);
1007910084
break;
1008010085
case 'openapi':
10081-
$openApi = new OpenApiService($reflection, $config->getOpenApiBase(), $config->getControllers());
10086+
$openApi = new OpenApiService($reflection, $config->getOpenApiBase(), $config->getControllers(), $config->getCustomOpenApiBuilders());
1008210087
new OpenApiController($router, $responder, $openApi);
1008310088
break;
1008410089
case 'geojson':
@@ -10182,6 +10187,7 @@ class Config
1018210187
'middlewares' => 'cors',
1018310188
'controllers' => 'records,geojson,openapi',
1018410189
'customControllers' => '',
10190+
'customOpenApiBuilders' => '',
1018510191
'cacheType' => 'TempFile',
1018610192
'cachePath' => '',
1018710193
'cacheTime' => 10,
@@ -10314,6 +10320,11 @@ public function getCustomControllers(): array
1031410320
return array_filter(array_map('trim', explode(',', $this->values['customControllers'])));
1031510321
}
1031610322

10323+
public function getCustomOpenApiBuilders(): array
10324+
{
10325+
return array_filter(array_map('trim', explode(',', $this->values['customOpenApiBuilders'])));
10326+
}
10327+
1031710328
public function getCacheType(): string
1031810329
{
1031910330
return $this->values['cacheType'];

src/Tqdev/PhpCrudApi/Api.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public function __construct(Config $config)
121121
new CacheController($router, $responder, $cache);
122122
break;
123123
case 'openapi':
124-
$openApi = new OpenApiService($reflection, $config->getOpenApiBase(), $config->getControllers());
124+
$openApi = new OpenApiService($reflection, $config->getOpenApiBase(), $config->getControllers(), $config->getCustomOpenApiBuilders());
125125
new OpenApiController($router, $responder, $openApi);
126126
break;
127127
case 'geojson':

src/Tqdev/PhpCrudApi/Config.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Config
1414
'middlewares' => 'cors',
1515
'controllers' => 'records,geojson,openapi',
1616
'customControllers' => '',
17+
'customOpenApiBuilders' => '',
1718
'cacheType' => 'TempFile',
1819
'cachePath' => '',
1920
'cacheTime' => 10,
@@ -146,6 +147,11 @@ public function getCustomControllers(): array
146147
return array_filter(array_map('trim', explode(',', $this->values['customControllers'])));
147148
}
148149

150+
public function getCustomOpenApiBuilders(): array
151+
{
152+
return array_filter(array_map('trim', explode(',', $this->values['customOpenApiBuilders'])));
153+
}
154+
149155
public function getCacheType(): string
150156
{
151157
return $this->values['cacheType'];

src/Tqdev/PhpCrudApi/OpenApi/OpenApiBuilder.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,17 @@ class OpenApiBuilder
1010
private $openapi;
1111
private $records;
1212
private $columns;
13+
private $builders;
1314

14-
public function __construct(ReflectionService $reflection, array $base, array $controllers)
15+
public function __construct(ReflectionService $reflection, array $base, array $controllers, array $builders)
1516
{
1617
$this->openapi = new OpenApiDefinition($base);
1718
$this->records = in_array('records', $controllers) ? new OpenApiRecordsBuilder($this->openapi, $reflection) : null;
1819
$this->columns = in_array('columns', $controllers) ? new OpenApiColumnsBuilder($this->openapi) : null;
20+
$this->builders = array();
21+
foreach ($builders as $className) {
22+
$this->builders[] = new $className($this->openapi, $reflection);
23+
}
1924
}
2025

2126
private function getServerUrl(): string
@@ -40,6 +45,9 @@ public function build(): OpenApiDefinition
4045
if ($this->columns) {
4146
$this->columns->build();
4247
}
48+
foreach ($this->builders as $builder) {
49+
$builder->build();
50+
}
4351
return $this->openapi;
4452
}
4553
}

src/Tqdev/PhpCrudApi/OpenApi/OpenApiColumnsBuilder.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
namespace Tqdev\PhpCrudApi\OpenApi;
44

5-
use Tqdev\PhpCrudApi\Column\ReflectionService;
6-
use Tqdev\PhpCrudApi\Middleware\Communication\VariableStore;
75
use Tqdev\PhpCrudApi\OpenApi\OpenApiDefinition;
86

97
class OpenApiColumnsBuilder

src/Tqdev/PhpCrudApi/OpenApi/OpenApiService.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ class OpenApiService
99
{
1010
private $builder;
1111

12-
public function __construct(ReflectionService $reflection, array $base, array $controllers)
12+
public function __construct(ReflectionService $reflection, array $base, array $controllers, array $customBuilders)
1313
{
14-
$this->builder = new OpenApiBuilder($reflection, $base, $controllers);
14+
$this->builder = new OpenApiBuilder($reflection, $base, $controllers, $customBuilders);
1515
}
1616

1717
public function get(): OpenApiDefinition

0 commit comments

Comments
 (0)