@@ -6,7 +6,7 @@ var validatePresenceOf = function(value) {
6
6
} ;
7
7
8
8
export default function ( sequelize , DataTypes ) {
9
- return sequelize . define ( 'User' , {
9
+ const User = sequelize . define ( 'User' , {
10
10
_id : {
11
11
type : DataTypes . INTEGER ,
12
12
allowNull : false ,
@@ -65,158 +65,153 @@ export default function(sequelize, DataTypes) {
65
65
* Pre-save hooks
66
66
*/
67
67
hooks : {
68
- beforeBulkCreate ( users , fields , fn ) {
69
- var totalUpdated = 0 ;
70
- users . forEach ( user => {
71
- user . updatePassword ( err => {
72
- if ( err ) {
73
- return fn ( err ) ;
74
- }
75
- totalUpdated += 1 ;
76
- if ( totalUpdated === users . length ) {
77
- return fn ( ) ;
78
- }
79
- } ) ;
80
- } ) ;
68
+ beforeBulkCreate ( users , fields ) {
69
+ var promises = [ ] ;
70
+ users . forEach ( user => promises . push ( user . updatePassword ( ) ) ) ;
71
+ return Promise . all ( promises ) ;
81
72
} ,
82
- beforeCreate ( user , fields , fn ) {
83
- user . updatePassword ( fn ) ;
73
+ beforeCreate ( user , fields ) {
74
+ return user . updatePassword ( ) ;
84
75
} ,
85
- beforeUpdate ( user , fields , fn ) {
76
+ beforeUpdate ( user , fields ) {
86
77
if ( user . changed ( 'password' ) ) {
87
- return user . updatePassword ( fn ) ;
78
+ return user . updatePassword ( ) ;
88
79
}
89
- fn ( ) ;
80
+ return Promise . resolve ( user ) ;
90
81
}
91
82
} ,
92
83
93
- /**
94
- * Instance Methods
95
- */
96
- instanceMethods : {
97
- /**
98
- * Authenticate - check if the passwords are the same
99
- *
100
- * @param {String } password
101
- * @param {Function } callback
102
- * @return {Boolean }
103
- * @api public
104
- */
105
- authenticate ( password , callback ) {
106
- if ( ! callback ) {
107
- return this . password === this . encryptPassword ( password ) ;
108
- }
84
+ } );
109
85
110
- var _this = this ;
111
- this . encryptPassword ( password , function ( err , pwdGen ) {
112
- if ( err ) {
113
- callback ( err ) ;
114
- }
86
+ /**
87
+ * Instance Methods
88
+ */
89
+
90
+ /**
91
+ * Authenticate - check if the passwords are the same
92
+ *
93
+ * @param { String } password
94
+ * @param { Function } callback
95
+ * @return { Boolean }
96
+ * @api public
97
+ */
98
+ User.prototype.authenticate = function(password, callback) {
99
+ if ( ! callback ) {
100
+ return this . password === this . encryptPassword ( password ) ;
101
+ }
115
102
116
- if ( _this . password === pwdGen ) {
117
- callback ( null , true ) ;
118
- }
119
- else {
120
- callback ( null , false ) ;
121
- }
122
- } ) ;
123
- } ,
103
+ var _this = this;
104
+ this.encryptPassword(password, function(err, pwdGen) {
105
+ if ( err ) {
106
+ callback ( err ) ;
107
+ }
124
108
125
- /**
126
- * Make salt
127
- *
128
- * @param {Number } [byteSize] - Optional salt byte size, default to 16
129
- * @param {Function } callback
130
- * @return {String }
131
- * @api public
132
- */
133
- makeSalt ( ...args ) {
134
- let byteSize ;
135
- let callback ;
136
- let defaultByteSize = 16 ;
137
-
138
- if ( typeof args [ 0 ] === 'function' ) {
139
- callback = args [ 0 ] ;
140
- byteSize = defaultByteSize ;
141
- } else if ( typeof args [ 1 ] === 'function' ) {
142
- callback = args [ 1 ] ;
143
- } else {
144
- throw new Error ( 'Missing Callback' ) ;
145
- }
109
+ if ( _this . password === pwdGen ) {
110
+ callback ( null , true ) ;
111
+ } else {
112
+ callback ( null , false) ;
113
+ }
114
+ } );
115
+ } ;
116
+
117
+ /**
118
+ * Make salt
119
+ *
120
+ * @param {Number } [byteSize] - Optional salt byte size, default to 16
121
+ * @param {Function } callback
122
+ * @return {String }
123
+ * @api public
124
+ */
125
+ User . prototype . makeSalt = function ( ...args ) {
126
+ let byteSize ;
127
+ let callback ;
128
+ let defaultByteSize = 16 ;
129
+
130
+ if ( typeof args [ 0 ] === 'function' ) {
131
+ callback = args [ 0 ] ;
132
+ byteSize = defaultByteSize ;
133
+ } else if ( typeof args [ 1 ] === 'function' ) {
134
+ callback = args [ 1 ] ;
135
+ } else {
136
+ throw new Error ( 'Missing Callback' ) ;
137
+ }
146
138
147
- if ( ! byteSize ) {
148
- byteSize = defaultByteSize ;
149
- }
139
+ if ( ! byteSize ) {
140
+ byteSize = defaultByteSize ;
141
+ }
150
142
151
- return crypto . randomBytes ( byteSize , function ( err , salt ) {
152
- if ( err ) {
153
- callback ( err ) ;
154
- }
155
- return callback ( null , salt . toString ( 'base64' ) ) ;
156
- } ) ;
157
- } ,
143
+ return crypto . randomBytes ( byteSize , function ( err , salt ) {
144
+ if ( err ) {
145
+ callback ( err ) ;
146
+ }
147
+ return callback ( null , salt . toString ( 'base64' ) ) ;
148
+ } ) ;
149
+ } ;
150
+
151
+ /**
152
+ * Encrypt password
153
+ *
154
+ * @param { String } password
155
+ * @param { Function } callback
156
+ * @return { String }
157
+ * @api public
158
+ */
159
+ User.prototype.encryptPassword = function(password, callback) {
160
+ if ( ! password || ! this . salt ) {
161
+ return callback ? callback ( null ) : null ;
162
+ }
158
163
159
- /**
160
- * Encrypt password
161
- *
162
- * @param {String } password
163
- * @param {Function } callback
164
- * @return {String }
165
- * @api public
166
- */
167
- encryptPassword ( password , callback ) {
168
- if ( ! password || ! this . salt ) {
169
- return callback ? callback ( null ) : null ;
170
- }
164
+ var defaultIterations = 10000;
165
+ var defaultKeyLength = 64;
166
+ var salt = new Buffer(this.salt, 'base64');
171
167
172
- var defaultIterations = 10000 ;
173
- var defaultKeyLength = 64 ;
174
- var salt = new Buffer ( this . salt , 'base64' ) ;
168
+ if(!callback) {
169
+ return crypto . pbkdf2Sync ( password , salt , defaultIterations , defaultKeyLength , 'sha256' )
170
+ . toString ( 'base64' ) ;
171
+ }
175
172
176
- if ( ! callback ) {
177
- return crypto . pbkdf2Sync ( password , salt , defaultIterations , defaultKeyLength , 'sha256' )
178
- . toString ( 'base64' ) ;
173
+ return crypto.pbkdf2(password, salt, defaultIterations, defaultKeyLength, 'sha256',
174
+ function(err, key) {
175
+ if ( err ) {
176
+ callback ( err ) ;
179
177
}
178
+ return callback ( null , key . toString ( 'base64' ) ) ;
179
+ } ) ;
180
+ } ;
181
+
182
+ /**
183
+ * Update password field
184
+ *
185
+ * @param { Function } fn
186
+ * @return { String }
187
+ * @api public
188
+ */
189
+ User.prototype.updatePassword = function() {
190
+ return new Promise ( ( resolve , reject ) => {
191
+ if ( ! this . password ) {
192
+ return resolve ( user ) ;
193
+ }
180
194
181
- return crypto . pbkdf2 ( password , salt , defaultIterations , defaultKeyLength , 'sha256' ,
182
- function ( err , key ) {
183
- if ( err ) {
184
- callback ( err ) ;
185
- }
186
- return callback ( null , key . toString ( 'base64' ) ) ;
187
- } ) ;
188
- } ,
195
+ if ( ! validatePresenceOf ( this . password ) < % if ( filters . oauth ) { % > && authTypes . indexOf ( this . provider ) === - 1 < % } % > ) {
196
+ return reject ( new Error ( 'Invalid password' ) ) ;
197
+ }
189
198
190
- /**
191
- * Update password field
192
- *
193
- * @param {Function } fn
194
- * @return {String }
195
- * @api public
196
- */
197
- updatePassword ( fn ) {
198
- // Handle new/update passwords
199
- if ( ! this . password ) return fn ( null ) ;
200
-
201
- if ( ! validatePresenceOf ( this . password ) < % if ( filters . oauth ) { % > && authTypes . indexOf ( this . provider ) === - 1 < % } % > ) {
202
- fn ( new Error ( 'Invalid password' ) ) ;
199
+ // Make salt with a callback
200
+ return this . makeSalt ( ( saltErr , salt ) => {
201
+ if ( saltErr ) {
202
+ return reject ( saltErr ) ;
203
203
}
204
-
205
- // Make salt with a callback
206
- this . makeSalt ( ( saltErr , salt ) => {
207
- if ( saltErr ) {
208
- return fn ( saltErr ) ;
204
+ this . salt = salt ;
205
+ return this . encryptPassword ( this . password , ( encryptErr , hashedPassword ) => {
206
+ if ( encryptErr ) {
207
+ return reject ( encryptErr ) ;
209
208
}
210
- this . salt = salt ;
211
- this . encryptPassword ( this . password , ( encryptErr , hashedPassword ) => {
212
- if ( encryptErr ) {
213
- fn ( encryptErr ) ;
214
- }
215
- this . password = hashedPassword ;
216
- fn ( null ) ;
217
- } ) ;
209
+ this . password = hashedPassword ;
210
+ return resolve ( this ) ;
218
211
} ) ;
219
- }
220
- }
221
- } );
212
+ } ) ;
213
+ } ) ;
214
+ } ;
215
+
216
+ return User;
222
217
} ;
0 commit comments