Skip to content

Commit d92c734

Browse files
authored
Merge pull request #115 from fschmtt/command-array-payload
Allow passing array payload and criteria
2 parents 05c7428 + 768beb6 commit d92c734

37 files changed

+185
-10
lines changed

phpstan.neon

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
parameters:
22
level: 7
3-
checkGenericClassInNonGenericObjectType: false
3+
ignoreErrors:
4+
- identifier: missingType.generics
45
paths:
56
- src
67
- tests

src/Attribute/Since.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Attribute;
88

9+
/**
10+
* @internal
11+
*/
912
#[Attribute]
1013
class Since
1114
{

src/Attribute/Until.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Attribute;
88

9+
/**
10+
* @internal
11+
*/
912
#[Attribute]
1013
class Until
1114
{

src/Exception/JsonDecodeException.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Exception;
88

9+
/**
10+
* @internal
11+
*/
912
class JsonDecodeException extends Exception
1013
{
1114
}

src/Exception/JsonEncodeException.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Exception;
88

9+
/**
10+
* @internal
11+
*/
912
class JsonEncodeException extends Exception
1013
{
1114
}

src/Exception/PropertyDoesNotExistException.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Exception;
88

9+
/**
10+
* @internal
11+
*/
912
class PropertyDoesNotExistException extends Exception
1013
{
1114
}

src/Exception/ReadOnlyException.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Exception;
88

9+
/**
10+
* @internal
11+
*/
912
class ReadOnlyException extends Exception
1013
{
1114
}

src/Exception/SerializerException.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Exception;
88

9+
/**
10+
* @internal
11+
*/
912
class SerializerException extends Exception
1013
{
1114
}

src/Exception/TokenStorageException.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Exception;
66

7+
/**
8+
* @internal
9+
*/
710
class TokenStorageException extends \RuntimeException
811
{
912
}

src/Http/Client.php

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
use Lcobucci\JWT\Token;
1414
use Psr\Http\Message\ResponseInterface;
1515

16+
/**
17+
* @internal
18+
*/
1619
class Client
1720
{
1821
public function __construct(

src/Http/Command.php

+22-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,19 @@
77
use Fschmtt\Keycloak\Collection\Collection;
88
use Fschmtt\Keycloak\Representation\Representation;
99

10+
/**
11+
* @internal
12+
*/
1013
class Command
1114
{
1215
public function __construct(
1316
private readonly string $path,
1417
private readonly Method $method,
1518
/** @var array<string, string> */
1619
private readonly array $parameters = [],
17-
private readonly Representation|Collection|null $payload = null,
20+
/** @var Representation|Collection|array<mixed>|null */
21+
private readonly Representation|Collection|array|null $payload = null,
22+
private readonly ?Criteria $criteria = null,
1823
) {
1924
}
2025

@@ -32,15 +37,29 @@ public function getPath(): string
3237

3338
$values = array_values($this->parameters);
3439

35-
return str_replace(
40+
$path = str_replace(
3641
$placeholders,
3742
$values,
3843
$this->path
3944
);
45+
46+
return $path . $this->getQuery();
4047
}
4148

42-
public function getPayload(): Representation|Collection|null
49+
/**
50+
* @return Representation|Collection|array<mixed>|null
51+
*/
52+
public function getPayload(): Representation|Collection|array|null
4353
{
4454
return $this->payload;
4555
}
56+
57+
public function getQuery(): string
58+
{
59+
if (!$this->criteria) {
60+
return '';
61+
}
62+
63+
return '?' . http_build_query($this->criteria->jsonSerialize());
64+
}
4665
}

src/Http/CommandExecutor.php

+13-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\Json\JsonEncoder;
88
use Fschmtt\Keycloak\Representation\Representation;
99

10+
/**
11+
* @internal
12+
*/
1013
class CommandExecutor
1114
{
1215
public function __construct(
@@ -31,19 +34,25 @@ public function executeCommand(Command $command): void
3134

3235
protected function prepareBody(Command $command): ?string
3336
{
34-
if ($command->getPayload() === null) {
37+
$payload = $command->getPayload();
38+
39+
if ($payload === null) {
3540
return null;
3641
}
3742

3843
$jsonEncoder = new JsonEncoder();
3944

40-
if ($command->getPayload() instanceof Representation) {
41-
return $jsonEncoder->encode($this->propertyFilter->filter($command->getPayload()));
45+
if (is_array($payload)) {
46+
return $jsonEncoder->encode($payload);
47+
}
48+
49+
if ($payload instanceof Representation) {
50+
return $jsonEncoder->encode($this->propertyFilter->filter($payload));
4251
}
4352

4453
$representations = [];
4554

46-
foreach ($command->getPayload() as $representation) {
55+
foreach ($payload as $representation) {
4756
$representations[] = $this->propertyFilter->filter($representation);
4857
}
4958

src/Http/Criteria.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use DateTimeInterface;
88
use Stringable;
99

10+
/**
11+
* @internal
12+
*/
1013
class Criteria
1114
{
1215
/**

src/Http/Method.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Http;
66

7+
/**
8+
* @internal
9+
*/
710
enum Method: string
811
{
912
case GET = 'GET';

src/Http/PropertyFilter.php

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Fschmtt\Keycloak\Representation\Representation;
1010
use ReflectionClass;
1111

12+
/**
13+
* @internal
14+
*/
1215
class PropertyFilter
1316
{
1417
/**

src/Http/Query.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Http;
66

7+
/**
8+
* @internal
9+
*/
710
class Query
811
{
912
public function __construct(

src/Http/QueryExecutor.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\Json\JsonDecoder;
88
use Fschmtt\Keycloak\Serializer\Serializer;
99

10+
/**
11+
* @internal
12+
*/
1013
class QueryExecutor
1114
{
1215
public function __construct(

src/Json/JsonDecoder.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\Exception\JsonDecodeException;
88
use JsonException;
99

10+
/**
11+
* @internal
12+
*/
1013
class JsonDecoder
1114
{
1215
/**

src/Json/JsonEncoder.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\Exception\JsonEncodeException;
88
use JsonException;
99

10+
/**
11+
* @internal
12+
*/
1013
class JsonEncoder
1114
{
1215
/**

src/OAuth/TokenStorage/Filesystem.php

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Lcobucci\JWT\Encoding\JoseEncoder;
1010
use Lcobucci\JWT\Token;
1111

12+
/**
13+
* @internal
14+
*/
1215
class Filesystem implements TokenStorageInterface
1316
{
1417
private string $accessTokenPath;

src/OAuth/TokenStorage/InMemory.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\OAuth\TokenStorageInterface;
88
use Lcobucci\JWT\Token;
99

10+
/**
11+
* @internal
12+
*/
1013
class InMemory implements TokenStorageInterface
1114
{
1215
private ?Token $accessToken = null;

src/Resource/Users.php

+7-2
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ public function removeRealmRoles(string $realm, string $userId, RoleCollection $
204204
);
205205
}
206206

207-
public function executeActionsEmail(string $realm, string $userId): void
207+
/**
208+
* @param list<string>|null $actions
209+
*/
210+
public function executeActionsEmail(string $realm, string $userId, ?array $actions = null, ?Criteria $criteria = null): void
208211
{
209212
$this->commandExecutor->executeCommand(
210213
new Command(
@@ -213,7 +216,9 @@ public function executeActionsEmail(string $realm, string $userId): void
213216
[
214217
'realm' => $realm,
215218
'userId' => $userId,
216-
]
219+
],
220+
$actions,
221+
$criteria,
217222
)
218223
);
219224
}

src/Serializer/ArraySerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Serializer;
66

7+
/**
8+
* @internal
9+
*/
710
class ArraySerializer implements SerializerInterface
811
{
912
public function serializes(): string

src/Serializer/BooleanSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Serializer;
66

7+
/**
8+
* @internal
9+
*/
710
class BooleanSerializer implements SerializerInterface
811
{
912
public function serializes(): string

src/Serializer/CollectionSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use Fschmtt\Keycloak\Collection\Collection;
88
use Fschmtt\Keycloak\Representation\Representation;
99

10+
/**
11+
* @internal
12+
*/
1013
class CollectionSerializer implements SerializerInterface
1114
{
1215
public function serializes(): string

src/Serializer/EnumSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
use BackedEnum;
88
use Fschmtt\Keycloak\Enum\Enum;
99

10+
/**
11+
* @internal
12+
*/
1013
class EnumSerializer implements SerializerInterface
1114
{
1215
public function serializes(): string

src/Serializer/Factory.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Serializer;
66

7+
/**
8+
* @internal
9+
*/
710
class Factory
811
{
912
public function create(): Serializer

src/Serializer/IntegerSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Fschmtt\Keycloak\Serializer;
66

7+
/**
8+
* @internal
9+
*/
710
class IntegerSerializer implements SerializerInterface
811
{
912
public function serializes(): string

src/Serializer/MapSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Fschmtt\Keycloak\Type\Map;
88

9+
/**
10+
* @internal
11+
*/
912
class MapSerializer implements SerializerInterface
1013
{
1114
public function serializes(): string

src/Serializer/RepresentationSerializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
use Fschmtt\Keycloak\Representation\Representation;
88

9+
/**
10+
* @internal
11+
*/
912
class RepresentationSerializer implements SerializerInterface
1013
{
1114
public function serializes(): string

src/Serializer/Serializer.php

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
use Fschmtt\Keycloak\Exception\SerializerException;
1111
use Fschmtt\Keycloak\Representation\Representation;
1212

13+
/**
14+
* @internal
15+
*/
1316
class Serializer implements SerializerInterface
1417
{
1518
private const NATIVE_TYPES = [

0 commit comments

Comments
 (0)