| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const _ = require('lodash'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  | const createUtils = (strapi) => { | 
					
						
							|  |  |  |   const login = async (userInfo) => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     const sanitizedUserInfo = _.pick(userInfo, ['email', 'id']); | 
					
						
							| 
									
										
										
										
											2021-09-27 17:56:05 +02:00
										 |  |  |     const user = await strapi.query('admin::user').findOne({ where: sanitizedUserInfo }); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     if (!user) { | 
					
						
							|  |  |  |       throw new Error('User not found'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const token = strapi.admin.services.token.createJwtToken(user); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { token, user }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const findUser = strapi.admin.services.user.findOne; | 
					
						
							|  |  |  |   const userExists = strapi.admin.services.user.exists; | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |   const createUser = async (userInfo) => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     const superAdminRole = await strapi.admin.services.role.getSuperAdminWithUsersCount(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (superAdminRole.usersCount === 0) { | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |       const userRoles = _.uniq((userInfo.roles || []).concat(superAdminRole.id)); | 
					
						
							|  |  |  |       Object.assign(userInfo, { roles: userRoles }); | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return strapi.admin.services.user.create({ | 
					
						
							|  |  |  |       registrationToken: null, | 
					
						
							|  |  |  |       isActive: true, | 
					
						
							|  |  |  |       ...userInfo, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   const deleteUserById = strapi.admin.services.user.deleteById; | 
					
						
							|  |  |  |   const deleteUsersById = strapi.admin.services.user.deleteByIds; | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |   const createUserIfNotExists = async (userInfo) => { | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |     const sanitizedUserInfo = _.pick(userInfo, ['email', 'id']); | 
					
						
							|  |  |  |     const exists = await userExists(sanitizedUserInfo); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return !exists ? createUser(userInfo) : null; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |   const registerOrLogin = async (userCredentials) => { | 
					
						
							|  |  |  |     await createUserIfNotExists(userCredentials); | 
					
						
							|  |  |  |     return login(userCredentials); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  |   const createRole = strapi.admin.services.role.create; | 
					
						
							|  |  |  |   const getRole = strapi.admin.services.role.find; | 
					
						
							|  |  |  |   const deleteRolesById = strapi.admin.services.role.deleteByIds; | 
					
						
							|  |  |  |   const getSuperAdminRole = strapi.admin.services.role.getSuperAdmin; | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |   const assignPermissionsToRole = strapi.admin.services.role.assignPermissions; | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     // Auth
 | 
					
						
							|  |  |  |     login, | 
					
						
							|  |  |  |     registerOrLogin, | 
					
						
							|  |  |  |     // Users
 | 
					
						
							|  |  |  |     findUser, | 
					
						
							|  |  |  |     createUser, | 
					
						
							|  |  |  |     createUserIfNotExists, | 
					
						
							|  |  |  |     userExists, | 
					
						
							|  |  |  |     deleteUserById, | 
					
						
							|  |  |  |     deleteUsersById, | 
					
						
							|  |  |  |     // Roles
 | 
					
						
							|  |  |  |     getRole, | 
					
						
							|  |  |  |     getSuperAdminRole, | 
					
						
							|  |  |  |     createRole, | 
					
						
							|  |  |  |     deleteRolesById, | 
					
						
							| 
									
										
										
										
											2020-11-17 15:38:41 +01:00
										 |  |  |     assignPermissionsToRole, | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2020-11-10 14:15:31 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-11 14:15:43 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Execute a test suite only if the condition is true | 
					
						
							|  |  |  |  * @return Jest.Describe | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const describeOnCondition = (bool) => (bool ? describe : describe.skip); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							|  |  |  |   createUtils, | 
					
						
							|  |  |  |   describeOnCondition, | 
					
						
							|  |  |  | }; |