X-Git-Url: http://git.onelab.eu/?p=myops.git;a=blobdiff_plain;f=web%2Fquery%2Flib%2Fvalidate.js;fp=web%2Fquery%2Flib%2Fvalidate.js;h=a2a56998424305b56e65bf502e9ea8fffcbd7072;hp=0000000000000000000000000000000000000000;hb=85070b3d456667f238051af1a2f1f2a0c12300ab;hpb=607f0e13927eb18075c375fa9ba5527da4fcbb44 diff --git a/web/query/lib/validate.js b/web/query/lib/validate.js new file mode 100644 index 0000000..a2a5699 --- /dev/null +++ b/web/query/lib/validate.js @@ -0,0 +1,49 @@ +// a library for validations +// over time we expect to extract more helpers and move them here. +exports.init = function(newDoc, oldDoc, userCtx, secObj) { + var v = {}; + + v.forbidden = function(message) { + throw({forbidden : message}); + }; + + v.unauthorized = function(message) { + throw({unauthorized : message}); + }; + + v.assert = function(should, message) { + if (!should) v.forbidden(message); + } + + v.isAdmin = function() { + return userCtx.roles.indexOf('_admin') != -1 + }; + + v.require = function() { + for (var i=0; i < arguments.length; i++) { + var field = arguments[i]; + message = "The '"+field+"' field is required."; + if (typeof newDoc[field] == "undefined") v.forbidden(message); + }; + }; + + v.unchanged = function(field) { + if (oldDoc && oldDoc[field] != newDoc[field]) + v.forbidden("You may not change the '"+field+"' field."); + }; + + v.matches = function(field, regex, message) { + if (!newDoc[field].match(regex)) { + message = message || "Format of '"+field+"' field is invalid."; + v.forbidden(message); + } + }; + + // this ensures that the date will be UTC, parseable, and collate correctly + v.dateFormat = function(field) { + message = "Sorry, '"+field+"' is not a valid date format. Try: 2010-02-24T17:00:03.432Z"; + v.matches(field, /\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}(\.\d*)?Z/, message); + } + + return v; +}; \ No newline at end of file