1 | <?php |
||
22 | final class JsonSchemaInterceptor implements MethodInterceptor |
||
23 | { |
||
24 | /** |
||
25 | * @var string |
||
26 | */ |
||
27 | private $schemaDir; |
||
28 | |||
29 | /** |
||
30 | * @var string |
||
31 | */ |
||
32 | private $validateDir; |
||
33 | |||
34 | /** |
||
35 | * @param string $schemaDir |
||
36 | * @param string $validateDir |
||
37 | * |
||
38 | * @Named("schemaDir=json_schema_dir,validateDir=json_validate_dir") |
||
39 | */ |
||
40 | 7 | public function __construct($schemaDir, $validateDir) |
|
45 | |||
46 | /** |
||
47 | * {@inheritdoc} |
||
48 | */ |
||
49 | 7 | public function invoke(MethodInvocation $invocation) |
|
50 | { |
||
51 | /* @var $jsonSchema JsonSchema */ |
||
52 | 7 | $jsonSchema = $invocation->getMethod()->getAnnotation(JsonSchema::class); |
|
53 | |||
54 | 7 | if ($jsonSchema->params) { |
|
55 | 3 | $arguments = $this->getNamedArguments($invocation); |
|
56 | 3 | $this->validateRequest($jsonSchema, $arguments); |
|
57 | } |
||
58 | |||
59 | /** @var $ro ResourceObject */ |
||
60 | 6 | $ro = $invocation->proceed(); |
|
61 | 6 | if ($ro->code !== 200) { |
|
62 | 1 | return $ro; |
|
63 | } |
||
64 | 5 | $this->validateResponse($jsonSchema, $ro); |
|
65 | |||
66 | 2 | return $ro; |
|
67 | } |
||
68 | |||
69 | 3 | private function validateRequest(JsonSchema $jsonSchema, array $arguments) |
|
75 | |||
76 | 5 | private function validateResponse(JsonSchema $jsonSchema, ResourceObject $ro) |
|
82 | |||
83 | 5 | private function validate($scanObject, $schemaFile) |
|
99 | |||
100 | 5 | private function getSchemaFile(JsonSchema $jsonSchema, ResourceObject $ro) : string |
|
116 | |||
117 | 5 | private function validateFileExists(string $schemaFile) |
|
123 | |||
124 | 3 | private function getNamedArguments(MethodInvocation $invocation) |
|
136 | } |
||
137 |