3 var crypto = require('crypto');
4 var md5 = require('md5');
5 var _ = require('lodash');
7 module.exports = function(sequelize, DataTypes) {
8 var User = sequelize.define('User', {
10 type: DataTypes.STRING,
16 this.setDataValue('name', name);
17 this.setDataValue('defaultuser', name);
21 type: DataTypes.STRING,
23 set: function(email) {
25 this.setDataValue('email', email.toLowerCase());
32 type: DataTypes.ENUM('admin', 'user', 'agent', 'telephone')
35 type: DataTypes.STRING,
40 set: function(password) {
41 this.salt = this.makeSalt();
42 this.setDataValue('password', this.encryptPassword(password));
43 this.setDataValue('md5secret', this.md5Password(this.name + ':asterisk:' + password));
47 type: DataTypes.STRING,
51 type: DataTypes.INTEGER(11),
53 set: function(internal) {
54 this.setDataValue('internal', internal);
55 this.setDataValue('accountcode', internal);
59 type: DataTypes.STRING
62 type: DataTypes.STRING
65 type: DataTypes.STRING
68 type: DataTypes.STRING
71 type: DataTypes.STRING
74 type: DataTypes.STRING
77 type: DataTypes.STRING
80 type: DataTypes.STRING
83 type: DataTypes.INTEGER
86 type: DataTypes.INTEGER
89 type: DataTypes.STRING
92 type: DataTypes.STRING
95 type: DataTypes.STRING
98 type: DataTypes.STRING
101 type: DataTypes.BOOLEAN,
108 type: DataTypes.STRING,
112 type: DataTypes.INTEGER(5),
116 type: DataTypes.INTEGER(11),
120 type: DataTypes.STRING,
124 type: DataTypes.STRING,
128 type: DataTypes.STRING,
132 type: DataTypes.STRING,
136 type: DataTypes.INTEGER(11),
140 type: DataTypes.STRING,
142 defaultValue: 'dynamic'
145 type: DataTypes.ENUM('friend', 'user', 'peer'),
147 defaultValue: 'friend'
150 type: DataTypes.STRING,
152 defaultValue: 'from-sip'
155 type: DataTypes.STRING,
159 type: DataTypes.STRING,
163 type: DataTypes.STRING,
167 type: DataTypes.STRING,
171 type: DataTypes.STRING,
175 type: DataTypes.STRING,
180 type: DataTypes.ENUM('rfc2833', 'info', 'shortinfo', 'inband',
183 defaultValue: 'rfc2833'
186 type: DataTypes.ENUM('yes', 'no', 'nonat', 'update'),
191 type: DataTypes.STRING,
193 defaultValue: 'force_rport,comedia'
196 type: DataTypes.STRING,
200 type: DataTypes.STRING,
204 type: DataTypes.STRING,
209 type: DataTypes.STRING,
214 type: DataTypes.STRING,
216 defaultValue: 'alaw;ulaw;gsm'
219 type: DataTypes.STRING,
221 defaultValue: 'port,invite'
224 type: DataTypes.ENUM('yes', 'no'),
229 type: DataTypes.ENUM('yes', 'no', 'never'),
233 type: DataTypes.ENUM('yes', 'no'),
237 type: DataTypes.ENUM('yes', 'no'),
241 type: DataTypes.INTEGER(11),
245 type: DataTypes.STRING,
249 type: DataTypes.STRING,
251 defaultValue: '"" <>'
254 type: DataTypes.STRING,
258 type: DataTypes.ENUM('yes', 'no'),
263 type: DataTypes.INTEGER(11),
267 type: DataTypes.ENUM('yes', 'no'),
271 type: DataTypes.ENUM('yes', 'no'),
275 type: DataTypes.ENUM('yes', 'no'),
279 type: DataTypes.INTEGER(11),
283 type: DataTypes.ENUM('yes', 'no'),
287 type: DataTypes.STRING,
291 type: DataTypes.ENUM('accept', 'refuse', 'originate'),
295 type: DataTypes.INTEGER(11),
299 type: DataTypes.INTEGER(11),
302 "session-refresher": {
303 type: DataTypes.ENUM('uac', 'uas'),
306 t38pt_usertpsource: {
307 type: DataTypes.STRING,
311 type: DataTypes.STRING,
315 type: DataTypes.STRING,
319 type: DataTypes.STRING,
323 type: DataTypes.ENUM('yes', 'no'),
328 type: DataTypes.STRING,
332 type: DataTypes.INTEGER(11),
336 type: DataTypes.INTEGER(11),
340 type: DataTypes.ENUM('yes', 'no'),
345 type: DataTypes.STRING,
349 type: DataTypes.STRING,
353 type: DataTypes.INTEGER(11),
357 type: DataTypes.INTEGER(11),
361 type: DataTypes.INTEGER(11),
365 type: DataTypes.ENUM('yes', 'no'),
369 type: DataTypes.STRING,
373 type: DataTypes.STRING,
377 type: DataTypes.ENUM('yes', 'no'),
382 type: DataTypes.ENUM('yes', 'no'),
386 type: DataTypes.ENUM('yes', 'no'),
390 type: DataTypes.ENUM('yes', 'no'),
394 type: DataTypes.STRING,
398 type: DataTypes.STRING,
402 type: DataTypes.STRING,
406 type: DataTypes.STRING,
410 type: DataTypes.ENUM('ALLOWED_NOT_SCREENED',
411 'ALLOWED_PASSED_SCREEN', 'ALLOWED_FAILED_SCREEN', 'ALLOWED',
412 'PROHIB_NOT_SCREENED', 'PROHIB_PASSED_SCREEN',
413 'PROHIB_FAILED_SCREEN', 'PROHIB'),
417 type: DataTypes.STRING,
421 type: DataTypes.STRING,
425 type: DataTypes.STRING,
429 type: DataTypes.ENUM('yes', 'no'),
433 type: DataTypes.ENUM('yes', 'no'),
437 type: DataTypes.STRING,
441 type: DataTypes.STRING,
445 type: DataTypes.ENUM('yes', 'no'),
449 type: DataTypes.ENUM('yes', 'no'),
454 type: DataTypes.INTEGER(11),
458 type: DataTypes.INTEGER(11),
463 type: DataTypes.ENUM('yes', 'no'),
467 type: DataTypes.ENUM('yes', 'no'),
471 type: DataTypes.ENUM('yes', 'no'),
475 type: DataTypes.ENUM('yes', 'no'),
479 type: DataTypes.ENUM('yes', 'no'),
484 type: DataTypes.STRING,
491 // profile: function() {
500 * Authenticate - check if the passwords are the same
502 * @param {String} plainText
503 * {function} callBack
506 authenticate: function(plainText) {
507 return this.encryptPassword(plainText) === this.password;
515 makeSalt: function() {
516 return crypto.randomBytes(16).toString('base64');
521 * @param {String} password
525 encryptPassword: function(password) {
526 if (!password || !this.salt) return '';
527 var salt = new Buffer(this.salt, 'base64');
528 return crypto.pbkdf2Sync(password, salt, 10000, 64).toString(
534 * @param {String} password
538 md5Password: function(password) {
539 if (!password) return '';
540 return md5(password);
543 associate: function(models) {
545 User.hasMany(models.ChatMessage);
546 User.hasMany(models.Contact);
547 User.belongsToMany(models.Module, {
548 through: 'user_has_modules'
550 User.belongsToMany(models.Channel, {
551 through: 'user_has_channels'
553 User.belongsToMany(models.Team, {
554 through: models.UserHasTeam
556 User.belongsToMany(models.ChatRoom, {
557 through: models.UserHasChatRoom
559 User.belongsToMany(models.MailQueue, {
560 through: models.UserHasMailQueue
562 User.belongsToMany(models.ChatQueue, {
563 through: models.UserHasChatQueue
565 User.belongsToMany(models.VoiceQueue, {
566 through: models.UserHasVoiceQueue
568 User.hasMany(models.VoiceExtension, {
569 foreignKey: 'UserId',
570 as: 'UserExtensions',