Skip to content

Commit 768c2bc

Browse files
refactor: validate full validation payload flow in boundary guards
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent a936d38 commit 768c2bc

1 file changed

Lines changed: 46 additions & 1 deletion

File tree

src/views/Validation.vue

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,11 @@ type ValidationErrorResponse = {
195195
}
196196
}
197197
198+
type ValidationMetadataDimension = {
199+
w: number
200+
h: number
201+
}
202+
198203
function isRecord(value: unknown): value is Record<string, unknown> {
199204
return typeof value === 'object' && value !== null
200205
}
@@ -250,6 +255,33 @@ function isNullableString(value: unknown): value is string | null {
250255
return value === null || typeof value === 'string'
251256
}
252257
258+
function isValidationStatusInfo(value: unknown): value is ValidationStatusInfo {
259+
if (!isRecord(value)) {
260+
return false
261+
}
262+
263+
return (value.id === undefined || typeof value.id === 'number')
264+
&& (value.label === undefined || isString(value.label))
265+
}
266+
267+
function isValidationModificationInfo(value: unknown): value is ValidationModificationInfo {
268+
if (!isRecord(value)) {
269+
return false
270+
}
271+
272+
return (value.status === undefined || typeof value.status === 'number')
273+
&& (value.valid === undefined || typeof value.valid === 'boolean')
274+
}
275+
276+
function isValidationMetadataDimension(value: unknown): value is ValidationMetadataDimension {
277+
if (!isRecord(value)) {
278+
return false
279+
}
280+
281+
return typeof value.w === 'number' && Number.isFinite(value.w)
282+
&& typeof value.h === 'number' && Number.isFinite(value.h)
283+
}
284+
253285
function isRequestedBy(value: unknown): value is ValidationFileRecord['requested_by'] {
254286
if (!isRecord(value)) {
255287
return false
@@ -261,7 +293,15 @@ function isValidationMetadata(value: unknown): value is NonNullable<ValidationFi
261293
if (!isRecord(value)) {
262294
return false
263295
}
264-
return isString(value.extension) && typeof value.p === 'number'
296+
297+
if (!isString(value.extension) || typeof value.p !== 'number') {
298+
return false
299+
}
300+
301+
return (value.d === undefined || (Array.isArray(value.d) && value.d.every(isValidationMetadataDimension)))
302+
&& (value.original_file_deleted === undefined || typeof value.original_file_deleted === 'boolean')
303+
&& (value.pdfVersion === undefined || isString(value.pdfVersion))
304+
&& (value.status_changed_at === undefined || isString(value.status_changed_at))
265305
}
266306
267307
function isValidationSettings(value: unknown): value is NonNullable<ValidationFileRecord['settings']> {
@@ -292,6 +332,11 @@ function isSignerDetailRecord(value: unknown): value is SignerDetailRecord {
292332
&& isString(value.request_sign_date)
293333
&& typeof value.me === 'boolean'
294334
&& Array.isArray(value.visibleElements)
335+
&& (value.signature_validation === undefined || isValidationStatusInfo(value.signature_validation))
336+
&& (value.certificate_validation === undefined || isValidationStatusInfo(value.certificate_validation))
337+
&& (value.modification_validation === undefined || isValidationModificationInfo(value.modification_validation))
338+
&& (value.crl_validation === undefined || isString(value.crl_validation))
339+
&& (value.isLibreSignRootCA === undefined || typeof value.isLibreSignRootCA === 'boolean')
295340
}
296341
297342
function isValidatedChildFileRecord(value: unknown): value is ValidatedChildFileRecord {

0 commit comments

Comments
 (0)