UNPKG

wejsv2old-plugin-cdp-profile

Version:
242 lines (211 loc) 6.07 kB
/** * modelsAlter hook * * run after we.js load all plugin resources and after sails.js process the model schemes * use it to alter a model or insert extra attributes in other plugin module * * @param {object} sails current sails.js object * @param {Function} cb callback */ var _ = require('lodash'); module.exports = function modelsAlter(sails, cb) { // models scheme are avaible in sails.models['model-name'] // --- REQUIRED MODEL CHECK var errMsg; if (!sails.models.user || !sails.models.term) { errMsg = 'User model is required for we-plugin-cdp-profile'; sails.log.error(errMsg, Object.keys(sails.models)); return cb(errMsg); } sails.models.user.types = _.defaults(sails.models.user.types || {}, { isCPF: function (strCPF) { var Soma; var Resto; Soma = 0; var strRegex = new RegExp(/(^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$)/); if (!strRegex.test(strCPF)) { return false; } strCPF = strCPF.replace(/\.|-/g, ''); if (strCPF == '00000000000') { return false; } for (i = 1; i <= 9; i++) { Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i); } Resto = (Soma * 10) % 11; if ((Resto == 10) || (Resto == 11)) { Resto = 0; } if (Resto != parseInt(strCPF.substring(9, 10))) { return false; } Soma = 0; for (i = 1; i <= 10; i++) { Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (12 - i); } Resto = (Soma * 10) % 11; if ((Resto == 10) || (Resto == 11)) { Resto = 0; } if (Resto != parseInt(strCPF.substring(10, 11))) { return false; } if (strCPF.length > 11) return false; return true; } }); _.defaults(sails.models.user.attributes, { //CPF cpf: { type: 'string', required: true, unique: true, isCPF: true }, fullName: 'string', //Formação educacional major: 'string', //Formação grade: 'string', //Perfis nas redes fbprofile: 'text', instprofile: 'text', lkinprofile: 'text', twitprofile: 'text', youtbprofile: 'text', otherprofile: 'text', //Lattes lattes: 'string', //Interesses interests: { collection: 'term', via: 'interestsCat', dominant: true }, interestsAjd: { collection: 'term', via: 'interestsAjdCat', dominant: true }, //Show BirthDay showBday: { type: 'boolean', defaultsTo: true }, //Show Genre showGenre: { type: 'boolean', defaultsTo: true }, course: { collection: 'Course', via: 'user' }, aboutMe: { type: 'boolean', defaultsTo: false } }); sails.models.user.attributes.toJSON = function (preserve) { var req = this.req; delete this.req; var self = this; var cpf = self.cpf var email = self.email; var obj = self; // remove password hash from view delete obj.password; // delete context cache delete obj._context; // delete cpf delete obj.cpf; // delete email delete obj.email; if (!obj.displayName) { obj.displayName = obj.username; } if (req) { sails.acl.can('view_all_profile_data', req.user, self, function (err, can) { if (err) return sails.log.error('Some unkwnon error happened trying to define user permissions, error -->', err); if (!can) { if (!obj.showGenre) delete obj.gender; if (!obj.showBday) delete obj.birthDate; } else { obj.email = email; obj.cpf = cpf; } }); } else { if (!obj.showGenre) delete obj.gender; if (!obj.showBday) delete obj.birthDate; } if (obj.birthDate !== undefined){ obj.birthDate = new Date(obj.birthDate).toDateString(); }; // ember data type obj.type = 'user'; return obj; }, // Lifecycle Callbacks sails.models.user.beforeCreate = function (user, next) { // never save consumers on create delete user.consumers; // dont allow to set admin and moderator flags delete user.isAdmin; delete user.isModerator; // sanitize user = SanitizeHtmlService.sanitizeAllAttr(user); // regex para limpar o cpf do usuário if (user.cpf) { user.cpf = user.cpf.replace(/[\.-]/g, ''); } // optional password if (user.password) { this.generatePassword(user.password, function (err, hash) { if (err) return next(err); user.password = hash; return next(); }); } else { // ensures that user password are undefined delete user.password; next(); } } sails.models.user.beforeUpdate = function (user, next) { var aboutMeCheck = Boolean(user.displayName && user.fullName && user.birthDate && user.gender && user.locationState && user.city && user.major); if (aboutMeCheck) user.aboutMe = aboutMeCheck; // regex para limpar o cpf do usuário if (user.cpf) { user.cpf = user.cpf.replace(/[^\0-9]/, ''); } // sanitize user = SanitizeHtmlService.sanitizeAllAttr(user); // if has user.newPassword generate the new password if (user.newPassword) { return this.generatePassword(user.newPassword, function (err, hash) { if (err) return next(err); // delete newPassword variable delete user.newPassword; // set new password user.password = hash; return next(); }); } else { return next(); } }, _.defaults(sails.models.term.attributes, { interestsCat: { collection: 'user', via: 'interests' }, interestsAjdCat: { collection: 'user', via: 'interestsAjd' } }); // Always remember to run the callback cb(); };