Workflow and API validation for input file types
(still needs to be ckecked if a pdf is valid)
This commit is contained in:
@@ -99,9 +99,9 @@ export class Impose extends Operator {
|
||||
protected static outputSchema = JoiPDFFileSchema.label(translationObject.outputs.pdfFile.name).description(translationObject.outputs.pdfFile.description);
|
||||
|
||||
static schema = Joi.object({
|
||||
input: Impose.inputSchema.required(),
|
||||
input: Impose.inputSchema,
|
||||
values: Impose.valueSchema.required(),
|
||||
output: Impose.outputSchema.optional()
|
||||
output: Impose.outputSchema
|
||||
}).label(translationObject.operators.nup.friendlyName).description(translationObject.operators.nup.description);
|
||||
|
||||
|
||||
@@ -141,19 +141,4 @@ export class Impose extends Operator {
|
||||
return result;
|
||||
})
|
||||
}
|
||||
|
||||
validate(): { valid: boolean; reason?: string | undefined; } {
|
||||
let baseValidationResults = super.validate();
|
||||
if(!baseValidationResults.valid)
|
||||
return baseValidationResults;
|
||||
|
||||
// TODO: Fully integrate joi in the base and remove this func
|
||||
|
||||
this.actionValues = Impose.valueSchema.validate(this.actionValues);
|
||||
|
||||
if(this.actionValues.error)
|
||||
return { valid: false, reason: this.actionValues }
|
||||
|
||||
return { valid: true }
|
||||
}
|
||||
}
|
||||
@@ -22,9 +22,9 @@ export class Operator {
|
||||
protected static valueSchema: Joi.Schema;
|
||||
protected static outputSchema: Joi.Schema;
|
||||
static schema: Joi.ObjectSchema<{
|
||||
input: Joi.Schema;
|
||||
values: Joi.Schema;
|
||||
output: Joi.Schema;
|
||||
input: any;
|
||||
values: any;
|
||||
output: any;
|
||||
}>;
|
||||
|
||||
actionValues: any;
|
||||
@@ -36,13 +36,6 @@ export class Operator {
|
||||
async run(input: any[], progressCallback: (progress: Progress) => void): Promise<any[]> {
|
||||
return [];
|
||||
}
|
||||
|
||||
validate(): ValidationResult {
|
||||
if(!this.actionValues) {
|
||||
return { valid: false, reason: "The Operators action values were empty."}
|
||||
}
|
||||
return { valid: true };
|
||||
}
|
||||
}
|
||||
|
||||
/** This function should be used if the Operation may take multiple files as inputs and only outputs one file */
|
||||
|
||||
@@ -19,10 +19,11 @@ export function validateOperations(actions: Action[]): { valid: boolean, reason?
|
||||
if(!operator) {
|
||||
return { valid: false, reason: `action.type ${action.type} does not exist` }
|
||||
}
|
||||
const validationResult = new operator(action).validate();
|
||||
const validationResult = operator.schema.validate({values: action.values});
|
||||
|
||||
if(!validationResult.valid) {
|
||||
return validationResult;
|
||||
// TODO: convert everything to joiresult format
|
||||
if(validationResult.error) {
|
||||
return { valid: false, reason: validationResult.error.message};
|
||||
}
|
||||
|
||||
if (action.actions) {
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
import Joi from "joi";
|
||||
import { PdfFile } from "./PdfFile";
|
||||
|
||||
export const JoiPDFFileSchema = Joi.binary().custom((value: Express.Multer.File[] | PdfFile, helpers) => {
|
||||
if (!(value instanceof PdfFile)) {
|
||||
export const JoiPDFFileSchema = Joi.binary().custom((value: Express.Multer.File[] | PdfFile | PdfFile[], helpers) => {
|
||||
if (value instanceof PdfFile) {
|
||||
return value;
|
||||
}
|
||||
else if (Array.isArray(value)) {
|
||||
if(value.every((e) => e instanceof PdfFile))
|
||||
return value;
|
||||
else
|
||||
throw new Error("Some elements in the array are not of type PdfFile");
|
||||
}
|
||||
else {
|
||||
try {
|
||||
return PdfFile.fromMulterFiles(value);
|
||||
} catch (error) {
|
||||
@@ -10,5 +19,4 @@ export const JoiPDFFileSchema = Joi.binary().custom((value: Express.Multer.File[
|
||||
throw new Error('value is not of type PdfFile');
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}, "pdffile validation");
|
||||
Reference in New Issue
Block a user