Skip to content

Commit 5576faf

Browse files
refactor: split metadata normalization into focused rules
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 637c7df commit 5576faf

1 file changed

Lines changed: 52 additions & 19 deletions

File tree

lib/Service/File/ValidationMetadataNormalizer.php

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,40 +13,73 @@
1313
* @psalm-import-type LibresignValidateMetadata from \OCA\Libresign\ResponseDefinitions
1414
*/
1515
final class ValidationMetadataNormalizer {
16+
private const OPTIONAL_SCALAR_TYPE_GUARDS = [
17+
'original_file_deleted' => 'is_bool',
18+
'pdfVersion' => 'is_string',
19+
'status_changed_at' => 'is_string',
20+
];
21+
1622
/**
1723
* @param array<string, mixed> $metadata
1824
* @psalm-return array<string, mixed>&LibresignValidateMetadata
1925
*/
2026
public static function normalize(array $metadata, string $fileName, int $totalPages): array {
21-
$metadata['p'] = max(0, $totalPages);
27+
$normalized = $metadata;
28+
$normalized['p'] = self::normalizePageCount($totalPages);
29+
$normalized['extension'] = self::normalizeExtension($normalized, $fileName);
2230

23-
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
24-
if (!isset($metadata['extension']) || !is_string($metadata['extension']) || trim($metadata['extension']) === '') {
25-
$metadata['extension'] = is_string($extension) && $extension !== '' ? strtolower($extension) : 'pdf';
26-
}
31+
self::normalizeOptionalScalarFields($normalized);
32+
self::normalizeDimensionsField($normalized);
33+
34+
return $normalized;
35+
}
36+
37+
private static function normalizePageCount(int $totalPages): int {
38+
return max(0, $totalPages);
39+
}
2740

28-
if (array_key_exists('original_file_deleted', $metadata) && !is_bool($metadata['original_file_deleted'])) {
29-
unset($metadata['original_file_deleted']);
41+
/**
42+
* @param array<string, mixed> $metadata
43+
*/
44+
private static function normalizeExtension(array $metadata, string $fileName): string {
45+
if (isset($metadata['extension']) && is_string($metadata['extension']) && trim($metadata['extension']) !== '') {
46+
return $metadata['extension'];
3047
}
3148

32-
if (array_key_exists('pdfVersion', $metadata) && !is_string($metadata['pdfVersion'])) {
33-
unset($metadata['pdfVersion']);
49+
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
50+
return is_string($extension) && $extension !== '' ? strtolower($extension) : 'pdf';
51+
}
52+
53+
/**
54+
* @param array<string, mixed> $metadata
55+
*/
56+
private static function normalizeOptionalScalarFields(array &$metadata): void {
57+
foreach (self::OPTIONAL_SCALAR_TYPE_GUARDS as $key => $guard) {
58+
if (!array_key_exists($key, $metadata)) {
59+
continue;
60+
}
61+
62+
if (!is_callable($guard) || !$guard($metadata[$key])) {
63+
unset($metadata[$key]);
64+
}
3465
}
66+
}
3567

36-
if (array_key_exists('status_changed_at', $metadata) && !is_string($metadata['status_changed_at'])) {
37-
unset($metadata['status_changed_at']);
68+
/**
69+
* @param array<string, mixed> $metadata
70+
*/
71+
private static function normalizeDimensionsField(array &$metadata): void {
72+
if (!array_key_exists('d', $metadata)) {
73+
return;
3874
}
3975

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-
}
76+
$normalizedDimensions = self::normalizeDimensions($metadata['d']);
77+
if ($normalizedDimensions === null) {
78+
unset($metadata['d']);
79+
return;
4780
}
4881

49-
return $metadata;
82+
$metadata['d'] = $normalizedDimensions;
5083
}
5184

5285
/**

0 commit comments

Comments
 (0)