| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * User.js service | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @description: A set of functions similar to controller's actions to avoid code duplication. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  | const bcrypt = require('bcryptjs'); | 
					
						
							| 
									
										
										
										
											2019-07-16 20:11:34 +02:00
										 |  |  | const _ = require('lodash'); | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Promise to add a/an user. | 
					
						
							|  |  |  |    * @return {Promise} | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   async add(values) { | 
					
						
							| 
									
										
										
										
											2017-11-29 16:10:13 +01:00
										 |  |  |     if (values.password) { | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |       values.password = await strapi.plugins[ | 
					
						
							|  |  |  |         'users-permissions' | 
					
						
							|  |  |  |       ].services.user.hashPassword(values); | 
					
						
							| 
									
										
										
										
											2017-11-29 16:10:13 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |     return strapi.query('user', 'users-permissions').create(values); | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Promise to edit a/an user. | 
					
						
							|  |  |  |    * @return {Promise} | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   async edit(params, values) { | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  |     // Note: The current method will return the full response of Mongo.
 | 
					
						
							|  |  |  |     // To get the updated object, you have to execute the `findOne()` method
 | 
					
						
							|  |  |  |     // or use the `findOneOrUpdate()` method with `{ new:true }` option.
 | 
					
						
							| 
									
										
										
										
											2017-11-29 16:10:13 +01:00
										 |  |  |     if (values.password) { | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |       values.password = await strapi.plugins[ | 
					
						
							|  |  |  |         'users-permissions' | 
					
						
							|  |  |  |       ].services.user.hashPassword(values); | 
					
						
							| 
									
										
										
										
											2017-11-29 16:10:13 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-16 16:26:53 +02:00
										 |  |  |     return strapi.query('user', 'users-permissions').update(params, values); | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |    * Promise to fetch a/an user. | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  |    * @return {Promise} | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2019-12-19 18:58:46 +01:00
										 |  |  |   fetch(params, populate) { | 
					
						
							|  |  |  |     return strapi.query('user', 'users-permissions').findOne(params, populate); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Promise to fetch all users. | 
					
						
							|  |  |  |    * @return {Promise} | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   fetchAll(params, populate) { | 
					
						
							|  |  |  |     return strapi.query('user', 'users-permissions').find(params, populate); | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   hashPassword(user = {}) { | 
					
						
							|  |  |  |     return new Promise(resolve => { | 
					
						
							| 
									
										
										
										
											2017-11-29 15:46:28 +01:00
										 |  |  |       if (!user.password || this.isHashed(user.password)) { | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  |         resolve(null); | 
					
						
							|  |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2018-09-22 18:45:49 +05:30
										 |  |  |         bcrypt.hash(`${user.password}`, 10, (err, hash) => { | 
					
						
							| 
									
										
										
										
											2018-04-30 18:26:56 +02:00
										 |  |  |           resolve(hash); | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  |         }); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   isHashed(password) { | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  |     if (typeof password !== 'string' || !password) { | 
					
						
							|  |  |  |       return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return password.split('$').length === 4; | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2017-11-16 14:29:49 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |   /** | 
					
						
							|  |  |  |    * Promise to remove a/an user. | 
					
						
							|  |  |  |    * @return {Promise} | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   async remove(params) { | 
					
						
							|  |  |  |     return strapi.query('user', 'users-permissions').delete(params); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   async removeAll(params, query) { | 
					
						
							| 
									
										
										
										
											2019-07-16 20:11:34 +02:00
										 |  |  |     const toRemove = Object.values(_.omit(query, 'source')); | 
					
						
							| 
									
										
										
										
											2019-07-16 23:27:34 +02:00
										 |  |  |     const { primaryKey } = strapi.query('user', 'users-permissions'); | 
					
						
							|  |  |  |     const filter = { [`${primaryKey}_in`]: toRemove, _limit: 100 }; | 
					
						
							| 
									
										
										
										
											2018-06-06 16:20:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-16 20:11:34 +02:00
										 |  |  |     return strapi.query('user', 'users-permissions').delete(filter); | 
					
						
							| 
									
										
										
										
											2018-06-06 16:20:52 +02:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   validatePassword(password, hash) { | 
					
						
							| 
									
										
										
										
											2017-11-16 14:29:49 +01:00
										 |  |  |     return bcrypt.compareSync(password, hash); | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2017-11-14 11:11:22 +01:00
										 |  |  | }; |