Skip to content

Commit 92ae700

Browse files
fix(fileService): validate signRequestId and filter invalid signer entries
- Replace array_map with foreach to properly filter invalid signer entries - Validate signRequestId as required field (must be integer or numeric string) - Type-cast fields explicitly: displayName, email, statusText to string; status to int - Skip empty array returns for non-array inputs - Preserve identifyMethods when present - Ensures all returned summaries comply with OpenAPI schema contract Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 9f86399 commit 92ae700

1 file changed

Lines changed: 23 additions & 9 deletions

File tree

lib/Service/FileService.php

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -632,27 +632,41 @@ private function syncSingleFileCollection(): void {
632632
* @return list<LibresignSignerSummary>
633633
*/
634634
private function mapSignerDetailsToSummary(array $signers): array {
635-
return array_map(static function ($signer): array {
635+
$summaries = [];
636+
637+
foreach ($signers as $signer) {
636638
$signerData = is_object($signer) ? (array)$signer : $signer;
637639
if (!is_array($signerData)) {
638-
return [];
640+
continue;
641+
}
642+
643+
// Validate and type-cast signRequestId (required field)
644+
$signRequestId = $signerData['signRequestId'] ?? null;
645+
if (is_int($signRequestId)) {
646+
$typedSignRequestId = $signRequestId;
647+
} elseif (is_string($signRequestId) && ctype_digit($signRequestId)) {
648+
$typedSignRequestId = (int)$signRequestId;
649+
} else {
650+
continue;
639651
}
640652

641653
$summary = [
642-
'signRequestId' => $signerData['signRequestId'] ?? null,
643-
'displayName' => $signerData['displayName'] ?? '',
644-
'email' => $signerData['email'] ?? '',
654+
'signRequestId' => $typedSignRequestId,
655+
'displayName' => isset($signerData['displayName']) ? (string)$signerData['displayName'] : '',
656+
'email' => isset($signerData['email']) ? (string)$signerData['email'] : '',
645657
'signed' => $signerData['signed'] ?? null,
646-
'status' => $signerData['status'] ?? 0,
647-
'statusText' => $signerData['statusText'] ?? '',
658+
'status' => isset($signerData['status']) ? (int)$signerData['status'] : 0,
659+
'statusText' => isset($signerData['statusText']) ? (string)$signerData['statusText'] : '',
648660
];
649661

650662
if (isset($signerData['identifyMethods']) && is_array($signerData['identifyMethods'])) {
651663
$summary['identifyMethods'] = $signerData['identifyMethods'];
652664
}
653665

654-
return $summary;
655-
}, $signers);
666+
$summaries[] = $summary;
667+
}
668+
669+
return $summaries;
656670
}
657671

658672
private function computeEnvelopeSignersProgress(): void {

0 commit comments

Comments
 (0)