Validation Handler Update (#6968)
* Initial Commit * Update FunctionsRouter.js * Update FunctionsRouter.js * Change params to fields * Changes requested * Fix failing tests * More tests * More tests * Remove existing functionality * Remove legacy tests * fix array typo * Update triggers.js * Docs * Allow requireUserKeys to be object * validateMasterKey * Improve documentation Co-authored-by: Diamond Lewis <findlewis@gmail.com>
This commit is contained in:
@@ -33,15 +33,6 @@ const addFileDataIfNeeded = async file => {
|
||||
return file;
|
||||
};
|
||||
|
||||
const errorMessageFromError = e => {
|
||||
if (typeof e === 'string') {
|
||||
return e;
|
||||
} else if (e && e.message) {
|
||||
return e.message;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
export class FilesRouter {
|
||||
expressRouter({ maxUploadSize = '20Mb' } = {}) {
|
||||
var router = express.Router();
|
||||
@@ -192,10 +183,11 @@ export class FilesRouter {
|
||||
res.json(saveResult);
|
||||
} catch (e) {
|
||||
logger.error('Error creating a file: ', e);
|
||||
const errorMessage =
|
||||
errorMessageFromError(e) ||
|
||||
`Could not store file: ${fileObject.file._name}.`;
|
||||
next(new Parse.Error(Parse.Error.FILE_SAVE_ERROR, errorMessage));
|
||||
const error = triggers.resolveError(e, {
|
||||
code: Parse.Error.FILE_SAVE_ERROR,
|
||||
message: `Could not store file: ${fileObject.file._name}.`,
|
||||
});
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,8 +219,11 @@ export class FilesRouter {
|
||||
res.end();
|
||||
} catch (e) {
|
||||
logger.error('Error deleting a file: ', e);
|
||||
const errorMessage = errorMessageFromError(e) || `Could not delete file.`;
|
||||
next(new Parse.Error(Parse.Error.FILE_DELETE_ERROR, errorMessage));
|
||||
const error = triggers.resolveError(e, {
|
||||
code: Parse.Error.FILE_DELETE_ERROR,
|
||||
message: 'Could not delete file.',
|
||||
});
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,37 +109,17 @@ export class FunctionsRouter extends PromiseRouter {
|
||||
});
|
||||
},
|
||||
error: function (message) {
|
||||
// parse error, process away
|
||||
if (message instanceof Parse.Error) {
|
||||
return reject(message);
|
||||
}
|
||||
|
||||
const code = Parse.Error.SCRIPT_FAILED;
|
||||
// If it's an error, mark it as a script failed
|
||||
if (typeof message === 'string') {
|
||||
return reject(new Parse.Error(code, message));
|
||||
}
|
||||
const error = new Parse.Error(
|
||||
code,
|
||||
(message && message.message) || message
|
||||
);
|
||||
if (message instanceof Error) {
|
||||
error.stack = message.stack;
|
||||
}
|
||||
const error = triggers.resolveError(message);
|
||||
reject(error);
|
||||
},
|
||||
message: message,
|
||||
};
|
||||
}
|
||||
|
||||
static handleCloudFunction(req) {
|
||||
const functionName = req.params.functionName;
|
||||
const applicationId = req.config.applicationId;
|
||||
const theFunction = triggers.getFunction(functionName, applicationId);
|
||||
const theValidator = triggers.getValidator(
|
||||
req.params.functionName,
|
||||
applicationId
|
||||
);
|
||||
|
||||
if (!theFunction) {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.SCRIPT_FAILED,
|
||||
@@ -160,16 +140,6 @@ export class FunctionsRouter extends PromiseRouter {
|
||||
context: req.info.context,
|
||||
};
|
||||
|
||||
if (theValidator && typeof theValidator === 'function') {
|
||||
var result = theValidator(request);
|
||||
if (!result) {
|
||||
throw new Parse.Error(
|
||||
Parse.Error.VALIDATION_ERROR,
|
||||
'Validation failed.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
const userString =
|
||||
req.auth && req.auth.user ? req.auth.user.id : undefined;
|
||||
@@ -212,6 +182,9 @@ export class FunctionsRouter extends PromiseRouter {
|
||||
}
|
||||
);
|
||||
return Promise.resolve()
|
||||
.then(() => {
|
||||
return triggers.maybeRunValidator(request, functionName);
|
||||
})
|
||||
.then(() => {
|
||||
return theFunction(request, { message });
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user