const moment = require('moment');
const zxcvbn = require('zxcvbn');
module.exports = {
validate: {
keys: function(obj, keys) {
for (const key_data of keys) {
let [key, error, validator] = Array.isArray(key_data) ? key_data : [key_data];
validator = validator || (x => x);
error = error || "Invalid Request";
if (!Object.prototype.hasOwnProperty.call(obj, key) || !validator(obj[key])) {
logger.log("key", key, "missing or invalid in obj", obj);
return new Promise((_, r) => r(error));
}
}
return new Promise(r => r(obj));
},
email: function(str) {
return typeof str === "string" && str.match(/.+@.+\..+/) !== null;
},
password: function(str) {
return zxcvbn(str);
},
uuid: function(str) {
return typeof str === "string" && str.match(/^([0-9]|[a-f]){8}-([0-9]|[a-f]){4}-4([0-9]|[a-f]){3}-[8,9,a,b]([0-9]|[a-f]){3}-([0-9]|[a-f]){12}$/i) !== null;
}
},
resolve: data => new Promise(r => r(data)),
reject: error => new Promise((_, r) => r(error)),
round: function(num) {
return Math.round((num + Number.EPSILON) * 100) / 100;
},
format_time: function(time) {
return moment(time).format("dddd MMM Do");
},
setIntervalAndTriggerImmediate: function(callback, interval) {
setTimeout(callback);
return setInterval(callback, interval);
}
};