11
11
use DoclerLabs \ApiClientGenerator \Entity \Field ;
12
12
use DoclerLabs \ApiClientGenerator \Entity \Operation ;
13
13
use DoclerLabs \ApiClientGenerator \Entity \Request ;
14
- use DoclerLabs \ApiClientGenerator \Generator \Security \SecurityStrategyAbstract ;
14
+ use DoclerLabs \ApiClientGenerator \Generator \Security \SecurityStrategyInterface ;
15
15
use DoclerLabs \ApiClientGenerator \Input \InvalidSpecificationException ;
16
16
use DoclerLabs \ApiClientGenerator \Input \Specification ;
17
17
use DoclerLabs \ApiClientGenerator \Naming \CopiedNamespace ;
@@ -27,14 +27,14 @@ class RequestGenerator extends MutatorAccessorClassGeneratorAbstract
27
27
28
28
public const SUBDIRECTORY = 'Request/ ' ;
29
29
30
- /** @var SecurityStrategyAbstract [] */
30
+ /** @var SecurityStrategyInterface [] */
31
31
private array $ securityStrategies ;
32
32
33
33
public function __construct (
34
34
string $ baseNamespace ,
35
35
CodeBuilder $ builder ,
36
36
PhpVersion $ phpVersion ,
37
- SecurityStrategyAbstract ...$ securityStrategies
37
+ SecurityStrategyInterface ...$ securityStrategies
38
38
) {
39
39
parent ::__construct ($ baseNamespace , $ builder , $ phpVersion );
40
40
@@ -292,27 +292,22 @@ private function generateGetParametersMethods(
292
292
Operation $ operation ,
293
293
Specification $ specification
294
294
): array {
295
- $ methods = [];
296
- $ fields = $ request ->fields ;
297
- $ methods [] = $ this ->generateGetParametersMethod (
298
- 'getQueryParameters ' ,
299
- $ fields ->getQueryFields ()
300
- );
301
- $ methods [] = $ this ->generateGetRawParametersMethod (
302
- 'getRawQueryParameters ' ,
303
- $ fields ->getQueryFields ()
304
- );
305
- $ methods [] = $ this ->generateGetParametersMethod (
306
- 'getCookies ' ,
307
- $ fields ->getCookieFields ()
308
- );
295
+ $ methods = [];
296
+ $ fields = $ request ->fields ;
297
+
298
+ $ securityQueryFields = $ this ->getSecurityQueryParameters ($ operation , $ specification );
299
+ $ securityCookies = $ this ->getSecurityCookies ($ operation , $ specification );
300
+
301
+ $ methods [] = $ this ->generateGetParametersMethod ('getQueryParameters ' , $ fields ->getQueryFields (), $ securityQueryFields );
302
+ $ methods [] = $ this ->generateGetRawParametersMethod ('getRawQueryParameters ' , $ fields ->getQueryFields (), $ securityQueryFields );
303
+ $ methods [] = $ this ->generateGetParametersMethod ('getCookies ' , $ fields ->getCookieFields (), $ securityCookies );
309
304
$ methods [] = $ this ->generateGetHeadersMethod ($ request , $ fields ->getHeaderFields (), $ operation , $ specification );
310
305
$ methods [] = $ this ->generateGetBody ($ fields ->getBody ());
311
306
312
307
return $ methods ;
313
308
}
314
309
315
- private function generateGetParametersMethod (string $ methodName , array $ fields ): ClassMethod
310
+ private function generateGetParametersMethod (string $ methodName , array $ fields, array $ securityFields ): ClassMethod
316
311
{
317
312
$ returnVal = $ this ->builder ->array ([]);
318
313
$ fieldsArr = [];
@@ -322,7 +317,19 @@ private function generateGetParametersMethod(string $methodName, array $fields):
322
317
}
323
318
324
319
if (!empty ($ fieldsArr )) {
325
- $ returnVal = $ this ->generateParametersFromFields ($ fieldsArr );
320
+ if (empty ($ securityFields )) {
321
+ $ returnVal = $ this ->generateParametersFromFields ($ fieldsArr );
322
+ } else {
323
+ $ returnVal = $ this ->builder ->funcCall (
324
+ 'array_merge ' ,
325
+ [
326
+ $ this ->generateParametersFromFields ($ fieldsArr ),
327
+ $ securityFields ,
328
+ ]
329
+ );
330
+ }
331
+ } else {
332
+ $ returnVal = $ this ->builder ->array ($ securityFields );
326
333
}
327
334
328
335
return $ this
@@ -335,7 +342,7 @@ private function generateGetParametersMethod(string $methodName, array $fields):
335
342
->getNode ();
336
343
}
337
344
338
- private function generateGetRawParametersMethod (string $ methodName , array $ fields ): ClassMethod
345
+ private function generateGetRawParametersMethod (string $ methodName , array $ fields, array $ securityFields ): ClassMethod
339
346
{
340
347
$ fieldsArr = [];
341
348
$ returnType = 'array ' ;
@@ -347,7 +354,7 @@ private function generateGetRawParametersMethod(string $methodName, array $field
347
354
->builder
348
355
->method ($ methodName )
349
356
->makePublic ()
350
- ->addStmt ($ this ->builder ->return ($ this ->builder ->array ($ fieldsArr )))
357
+ ->addStmt ($ this ->builder ->return ($ this ->builder ->array (array_merge ( $ fieldsArr, $ securityFields ) )))
351
358
->setReturnType ($ returnType )
352
359
->composeDocBlock ([], $ returnType )
353
360
->getNode ();
@@ -381,6 +388,7 @@ private function generateGetHeadersMethod(
381
388
Operation $ operation ,
382
389
Specification $ specification
383
390
): ClassMethod {
391
+ $ stmts = $ this ->getSecurityHeadersStmts ($ operation , $ specification );
384
392
$ headers = $ this ->getSecurityHeaders ($ operation , $ specification );
385
393
if (!empty ($ request ->bodyContentTypes )) {
386
394
$ headers ['Content-Type ' ] = $ this ->builder ->localPropertyFetch ('contentType ' );
@@ -403,12 +411,24 @@ private function generateGetHeadersMethod(
403
411
->builder
404
412
->method ('getHeaders ' )
405
413
->makePublic ()
414
+ ->addStmts ($ stmts )
406
415
->addStmt ($ this ->builder ->return ($ returnVal ))
407
416
->setReturnType ($ returnType )
408
417
->composeDocBlock ([], $ returnType )
409
418
->getNode ();
410
419
}
411
420
421
+ private function getSecurityHeadersStmts (Operation $ operation , Specification $ specification ): array
422
+ {
423
+ $ stmts = [];
424
+
425
+ foreach ($ this ->securityStrategies as $ securityStrategy ) {
426
+ $ stmts = array_merge ($ stmts , $ securityStrategy ->getSecurityHeadersStmts ($ operation , $ specification ));
427
+ }
428
+
429
+ return $ stmts ;
430
+ }
431
+
412
432
private function getSecurityHeaders (Operation $ operation , Specification $ specification ): array
413
433
{
414
434
$ headers = [];
@@ -420,6 +440,28 @@ private function getSecurityHeaders(Operation $operation, Specification $specifi
420
440
return $ headers ;
421
441
}
422
442
443
+ private function getSecurityCookies (Operation $ operation , Specification $ specification ): array
444
+ {
445
+ $ cookies = [];
446
+
447
+ foreach ($ this ->securityStrategies as $ securityStrategy ) {
448
+ $ cookies += $ securityStrategy ->getSecurityCookies ($ operation , $ specification );
449
+ }
450
+
451
+ return $ cookies ;
452
+ }
453
+
454
+ private function getSecurityQueryParameters (Operation $ operation , Specification $ specification ): array
455
+ {
456
+ $ queryParameters = [];
457
+
458
+ foreach ($ this ->securityStrategies as $ securityStrategy ) {
459
+ $ queryParameters += $ securityStrategy ->getSecurityQueryParameters ($ operation , $ specification );
460
+ }
461
+
462
+ return $ queryParameters ;
463
+ }
464
+
423
465
private function generateParametersFromFields (array $ fields ): FuncCall
424
466
{
425
467
$ filterCallbackBody = $ this ->builder ->return (
0 commit comments