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,
|
|
|
|
};
|