Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config/api-toolkit.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
'description' => '',

'servers' => [
['url' => env('APP_URL', 'http://localhost') . '/api'],
['url' => env('APP_URL', 'http://localhost')],
],

// 'security_schemes' => [
Expand Down
6 changes: 5 additions & 1 deletion src/Console/GenerateOpenApiCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ public function handle(RouteScanner $scanner, Config $config): int
$json = json_encode($document, $flags);
$outputPath = $this->option('output');

file_put_contents(base_path($outputPath), $json);
if (file_put_contents(base_path($outputPath), $json) === false) {
$this->error("Failed to write to {$outputPath}");

return self::FAILURE;
}

$this->info("OpenAPI spec written to {$outputPath}");

Expand Down
71 changes: 27 additions & 44 deletions src/Http/Requests/FormRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,28 +68,10 @@ private function validateQueryParams(): void
$queryRules = $this->queryParamRules();

if (count($queryRules) > 0) {
$queryKeys = array_keys($this->query());

$queryRulesKeys = array_keys($queryRules);

$invalidQueryKeys = array_values(array_diff($queryKeys, $queryRulesKeys));

if (count($invalidQueryKeys) > 0) {
$message = count($invalidQueryKeys) > 1
? sprintf(
'Received unknown parameters: %s',
implode(', ', $invalidQueryKeys),
)
: sprintf(
'Received unknown parameter: %s',
$invalidQueryKeys[0],
);

throw new HttpException(
statusCode: Response::HTTP_BAD_REQUEST,
message: $message,
);
}
$this->rejectUnknownKeys(
array_keys($this->query()),
array_keys($queryRules),
);

/** @var ValidationFactory $factory */
$factory = $this->container->make(ValidationFactory::class);
Expand All @@ -112,28 +94,29 @@ private function validateFormData(): void
$inputKeys = array_keys(array_diff_key($this->input(), $this->query()));

if (count($inputKeys) > 0) {
$rules = $this->rules();

$rulesKeys = array_keys($rules);

$invalidInputKeys = array_values(array_diff($inputKeys, $rulesKeys));

if (count($invalidInputKeys) > 0) {
$message = count($invalidInputKeys) > 1
? sprintf(
'Received unknown parameters: %s',
implode(', ', $invalidInputKeys),
)
: sprintf(
'Received unknown parameter: %s',
$invalidInputKeys[0],
);

throw new HttpException(
statusCode: Response::HTTP_BAD_REQUEST,
message: $message,
);
}
$this->rejectUnknownKeys($inputKeys, array_keys($this->rules()));
}
}

/**
* @param list<string> $submitted
* @param list<string> $allowed
*/
private function rejectUnknownKeys(array $submitted, array $allowed): void
{
$unknown = array_values(array_diff($submitted, $allowed));

if ($unknown === []) {
return;
}

$message = count($unknown) > 1
? sprintf('Received unknown parameters: %s', implode(', ', $unknown))
: sprintf('Received unknown parameter: %s', $unknown[0]);

throw new HttpException(
statusCode: Response::HTTP_BAD_REQUEST,
message: $message,
);
}
}
35 changes: 14 additions & 21 deletions src/Parsers/PageParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,7 @@ public function __construct(
*/
public function isCursor(Request $request): bool
{
$page = $request->query('page', []);

if (! is_array($page)) {
return false;
}
$page = $this->pageArray($request);

return isset($page['cursor']);
}
Expand All @@ -33,12 +29,7 @@ public function isCursor(Request $request): bool
*/
public function getSize(Request $request): int
{
$page = $request->query('page', []);

if (! is_array($page)) {
return $this->defaultSize;
}

$page = $this->pageArray($request);
$size = (int) ($page['size'] ?? $this->defaultSize);

return min(max($size, 1), $this->maxSize);
Expand All @@ -49,11 +40,7 @@ public function getSize(Request $request): int
*/
public function getNumber(Request $request): int
{
$page = $request->query('page', []);

if (! is_array($page)) {
return 1;
}
$page = $this->pageArray($request);

return max((int) ($page['number'] ?? 1), 1);
}
Expand All @@ -63,12 +50,18 @@ public function getNumber(Request $request): int
*/
public function getCursor(Request $request): string | null
{
$page = $request->query('page', []);

if (! is_array($page)) {
return null;
}
$page = $this->pageArray($request);

return $page['cursor'] ?? null;
}

/**
* @return array<string, mixed>
*/
private function pageArray(Request $request): array
{
$page = $request->query('page', []);

return is_array($page) ? $page : [];
}
}
6 changes: 4 additions & 2 deletions src/Resources/Resource.php
Original file line number Diff line number Diff line change
Expand Up @@ -297,11 +297,13 @@ private function resolveMeta($model): array
*/
private function applySparseFieldsets(string $type, array $attributes): array
{
$parser = new FieldParser();

if ($this->parsedFields === null) {
$this->parsedFields = (new FieldParser())->parse($this->request);
$this->parsedFields = $parser->parse($this->request);
}

return (new FieldParser())->filter($attributes, $this->parsedFields[$type] ?? null);
return $parser->filter($attributes, $this->parsedFields[$type] ?? null);
}

/**
Expand Down