Skip to content

Commit e55f20f

Browse files
committed
refactor: centralize validation localization mapping
Signed-off-by: Vitor Mattos <[email protected]>
1 parent 644a673 commit e55f20f

2 files changed

Lines changed: 44 additions & 70 deletions

File tree

lib/Handler/SignEngine/Pkcs12Handler.php

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,11 @@ private function enrichLeafWithNativeData(array $result, array $metadata, array
301301
}
302302

303303
if (isset($validation['signatureValidation']) && is_array($validation['signatureValidation'])) {
304-
$leaf['signature_validation'] = $this->getLocalizedSignatureValidation($validation['signatureValidation']);
304+
$leaf['signature_validation'] = $this->pdfSignatureValidationService->localizeSignatureValidation($validation['signatureValidation']);
305305
}
306306

307307
if (isset($validation['certificateValidation']) && is_array($validation['certificateValidation'])) {
308-
$leaf['certificate_validation'] = $this->getLocalizedCertificateValidation($validation['certificateValidation']);
308+
$leaf['certificate_validation'] = $this->pdfSignatureValidationService->localizeCertificateValidation($validation['certificateValidation']);
309309
}
310310

311311
if (!isset($leaf['certificate_validation'])) {
@@ -318,74 +318,6 @@ private function enrichLeafWithNativeData(array $result, array $metadata, array
318318
return $result;
319319
}
320320

321-
/**
322-
* Keep LibreSign-side l10n compatibility regardless of upstream validator labels.
323-
*/
324-
private function getLocalizedSignatureValidation(array $validation): array {
325-
$id = (int)($validation['id'] ?? 6);
326-
327-
return match ($id) {
328-
1 => [
329-
'id' => 1,
330-
'label' => $this->l10n->t('Signature is valid.'),
331-
],
332-
2 => [
333-
'id' => 2,
334-
'label' => $this->l10n->t('Signature is invalid.'),
335-
],
336-
3 => [
337-
'id' => 3,
338-
'label' => $this->l10n->t('Digest mismatch.'),
339-
],
340-
5 => [
341-
'id' => 5,
342-
'label' => $this->l10n->t('Signature has not yet been verified.'),
343-
],
344-
default => [
345-
'id' => 6,
346-
'label' => $this->l10n->t('Unknown validation failure.'),
347-
],
348-
};
349-
}
350-
351-
/**
352-
* Keep LibreSign-side l10n compatibility regardless of upstream validator labels.
353-
*/
354-
private function getLocalizedCertificateValidation(array $validation): array {
355-
$id = (int)($validation['id'] ?? 7);
356-
357-
return match ($id) {
358-
1 => [
359-
'id' => 1,
360-
'label' => $this->l10n->t('Certificate is trusted.'),
361-
],
362-
2 => [
363-
'id' => 2,
364-
'label' => $this->l10n->t("Certificate issuer isn't trusted."),
365-
],
366-
3 => [
367-
'id' => 3,
368-
'label' => $this->l10n->t('Certificate issuer is unknown.'),
369-
],
370-
4 => [
371-
'id' => 4,
372-
'label' => $this->l10n->t('Certificate has been revoked.'),
373-
],
374-
5 => [
375-
'id' => 5,
376-
'label' => $this->l10n->t('Certificate has expired'),
377-
],
378-
6 => [
379-
'id' => 6,
380-
'label' => $this->l10n->t('Certificate has not yet been verified.'),
381-
],
382-
default => [
383-
'id' => 7,
384-
'label' => $this->l10n->t('Unknown issue with certificate or corrupted data.'),
385-
],
386-
};
387-
}
388-
389321
/**
390322
* @param resource $resource
391323
* @return list<array>

lib/Service/Signature/PdfSignatureValidationService.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,48 @@ public function setTrustedRoots(array $certificates): void {
6969
$this->validator->setTrustedRoots($certificates);
7070
}
7171

72+
/**
73+
* Normalize a signature validation payload by id/reason to the canonical LibreSign shape.
74+
*
75+
* @param array{id?: int|string, reason?: mixed} $validation
76+
*/
77+
public function localizeSignatureValidation(array $validation): array {
78+
$id = (int)($validation['id'] ?? 6);
79+
$reason = is_string($validation['reason'] ?? null) ? $validation['reason'] : null;
80+
81+
$state = match ($id) {
82+
1 => ValidationState::SIGNATURE_VALID,
83+
2 => ValidationState::SIGNATURE_INVALID,
84+
3 => ValidationState::DIGEST_MISMATCH,
85+
5 => ValidationState::NOT_VERIFIED,
86+
default => ValidationState::UNKNOWN_FAILURE,
87+
};
88+
89+
return $this->mapSignatureValidation(new ValidationResult($state, $reason));
90+
}
91+
92+
/**
93+
* Normalize a certificate validation payload by id/reason to the canonical LibreSign shape.
94+
*
95+
* @param array{id?: int|string, reason?: mixed} $validation
96+
*/
97+
public function localizeCertificateValidation(array $validation): array {
98+
$id = (int)($validation['id'] ?? 7);
99+
$reason = is_string($validation['reason'] ?? null) ? $validation['reason'] : null;
100+
101+
$state = match ($id) {
102+
1 => ValidationState::CERT_TRUSTED,
103+
2 => ValidationState::CERT_ISSUER_NOT_TRUSTED,
104+
3 => ValidationState::CERT_ISSUER_UNKNOWN,
105+
4 => ValidationState::CERT_REVOKED,
106+
5 => ValidationState::CERT_EXPIRED,
107+
6 => ValidationState::CERT_NOT_VERIFIED,
108+
default => ValidationState::UNKNOWN_FAILURE,
109+
};
110+
111+
return $this->mapCertificateValidation(new ValidationResult($state, $reason));
112+
}
113+
72114
/**
73115
* Validate PDF signatures from file resource.
74116
*

0 commit comments

Comments
 (0)