Skip to content

Commit 8a0f9be

Browse files
refactor: strengthen validation metadata normalizer typing
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 115937b commit 8a0f9be

1 file changed

Lines changed: 53 additions & 2 deletions

File tree

lib/Service/File/ValidationMetadataNormalizer.php

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,70 @@
99

1010
namespace OCA\Libresign\Service\File;
1111

12+
/**
13+
* @psalm-import-type LibresignValidateMetadata from \OCA\Libresign\ResponseDefinitions
14+
*/
1215
final class ValidationMetadataNormalizer {
1316
/**
1417
* @param array<string, mixed> $metadata
15-
* @return array<string, mixed>
18+
* @psalm-return array<string, mixed>&LibresignValidateMetadata
1619
*/
1720
public static function normalize(array $metadata, string $fileName, int $totalPages): array {
18-
$metadata['p'] = $totalPages;
21+
$metadata['p'] = max(0, $totalPages);
1922

2023
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
2124
if (!isset($metadata['extension']) || !is_string($metadata['extension']) || trim($metadata['extension']) === '') {
2225
$metadata['extension'] = is_string($extension) && $extension !== '' ? strtolower($extension) : 'pdf';
2326
}
2427

28+
if (array_key_exists('original_file_deleted', $metadata) && !is_bool($metadata['original_file_deleted'])) {
29+
unset($metadata['original_file_deleted']);
30+
}
31+
32+
if (array_key_exists('pdfVersion', $metadata) && !is_string($metadata['pdfVersion'])) {
33+
unset($metadata['pdfVersion']);
34+
}
35+
36+
if (array_key_exists('status_changed_at', $metadata) && !is_string($metadata['status_changed_at'])) {
37+
unset($metadata['status_changed_at']);
38+
}
39+
40+
if (array_key_exists('d', $metadata)) {
41+
$normalizedDimensions = self::normalizeDimensions($metadata['d']);
42+
if ($normalizedDimensions === null) {
43+
unset($metadata['d']);
44+
} else {
45+
$metadata['d'] = $normalizedDimensions;
46+
}
47+
}
48+
2549
return $metadata;
2650
}
51+
52+
/**
53+
* @return list<array{w: float, h: float}>|null
54+
*/
55+
private static function normalizeDimensions(mixed $dimensions): ?array {
56+
if (!is_array($dimensions)) {
57+
return null;
58+
}
59+
60+
$normalized = [];
61+
foreach ($dimensions as $dimension) {
62+
if (!is_array($dimension)
63+
|| !array_key_exists('w', $dimension)
64+
|| !array_key_exists('h', $dimension)
65+
|| !is_numeric($dimension['w'])
66+
|| !is_numeric($dimension['h'])) {
67+
continue;
68+
}
69+
70+
$normalized[] = [
71+
'w' => (float)$dimension['w'],
72+
'h' => (float)$dimension['h'],
73+
];
74+
}
75+
76+
return $normalized === [] ? null : $normalized;
77+
}
2778
}

0 commit comments

Comments
 (0)