Merge pull request #226 from codegefluester/cloud_code_validation
Cloud code validation
This commit is contained in:
@@ -96,3 +96,9 @@ Parse.Cloud.define('foo', function(req, res) {
|
|||||||
Parse.Cloud.define('bar', function(req, res) {
|
Parse.Cloud.define('bar', function(req, res) {
|
||||||
res.error('baz');
|
res.error('baz');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Parse.Cloud.define('requiredParameterCheck', function(req, res) {
|
||||||
|
res.success();
|
||||||
|
}, function(params) {
|
||||||
|
return params.name;
|
||||||
|
});
|
||||||
|
|||||||
@@ -9,6 +9,13 @@ var router = new PromiseRouter();
|
|||||||
|
|
||||||
function handleCloudFunction(req) {
|
function handleCloudFunction(req) {
|
||||||
if (Parse.Cloud.Functions[req.params.functionName]) {
|
if (Parse.Cloud.Functions[req.params.functionName]) {
|
||||||
|
if (Parse.Cloud.Validators[req.params.functionName]) {
|
||||||
|
var result = Parse.Cloud.Validators[req.params.functionName](req.body || {});
|
||||||
|
if (!result) {
|
||||||
|
throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Validation failed.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
var response = createResponseObject(resolve, reject);
|
var response = createResponseObject(resolve, reject);
|
||||||
var request = {
|
var request = {
|
||||||
|
|||||||
5
index.js
5
index.js
@@ -127,14 +127,17 @@ function ParseServer(args) {
|
|||||||
|
|
||||||
function addParseCloud() {
|
function addParseCloud() {
|
||||||
Parse.Cloud.Functions = {};
|
Parse.Cloud.Functions = {};
|
||||||
|
Parse.Cloud.Validators = {};
|
||||||
Parse.Cloud.Triggers = {
|
Parse.Cloud.Triggers = {
|
||||||
beforeSave: {},
|
beforeSave: {},
|
||||||
beforeDelete: {},
|
beforeDelete: {},
|
||||||
afterSave: {},
|
afterSave: {},
|
||||||
afterDelete: {}
|
afterDelete: {}
|
||||||
};
|
};
|
||||||
Parse.Cloud.define = function(functionName, handler) {
|
|
||||||
|
Parse.Cloud.define = function(functionName, handler, validationHandler) {
|
||||||
Parse.Cloud.Functions[functionName] = handler;
|
Parse.Cloud.Functions[functionName] = handler;
|
||||||
|
Parse.Cloud.Validators[functionName] = validationHandler;
|
||||||
};
|
};
|
||||||
Parse.Cloud.beforeSave = function(parseClass, handler) {
|
Parse.Cloud.beforeSave = function(parseClass, handler) {
|
||||||
var className = getClassName(parseClass);
|
var className = getClassName(parseClass);
|
||||||
|
|||||||
@@ -572,6 +572,42 @@ describe('miscellaneous', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('test cloud function parameter validation success', (done) => {
|
||||||
|
// Register a function with validation
|
||||||
|
Parse.Cloud.define('functionWithParameterValidation', (req, res) => {
|
||||||
|
res.success('works');
|
||||||
|
}, (params) => {
|
||||||
|
return params.success === 100;
|
||||||
|
});
|
||||||
|
|
||||||
|
Parse.Cloud.run('functionWithParameterValidation', {"success":100}).then((s) => {
|
||||||
|
delete Parse.Cloud.Functions['functionWithParameterValidation'];
|
||||||
|
done();
|
||||||
|
}, (e) => {
|
||||||
|
fail('Validation should not have failed.');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('test cloud function parameter validation', (done) => {
|
||||||
|
// Register a function with validation
|
||||||
|
Parse.Cloud.define('functionWithParameterValidationFailure', (req, res) => {
|
||||||
|
res.success('noway');
|
||||||
|
}, (params) => {
|
||||||
|
return params.success === 100;
|
||||||
|
});
|
||||||
|
|
||||||
|
Parse.Cloud.run('functionWithParameterValidationFailure', {"success":500}).then((s) => {
|
||||||
|
fail('Validation should not have succeeded');
|
||||||
|
delete Parse.Cloud.Functions['functionWithParameterValidationFailure'];
|
||||||
|
done();
|
||||||
|
}, (e) => {
|
||||||
|
expect(e.code).toEqual(141);
|
||||||
|
expect(e.message).toEqual('Validation failed.');
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('fails on invalid client key', done => {
|
it('fails on invalid client key', done => {
|
||||||
var headers = {
|
var headers = {
|
||||||
'Content-Type': 'application/octet-stream',
|
'Content-Type': 'application/octet-stream',
|
||||||
|
|||||||
Reference in New Issue
Block a user