2020-12-21 17:11:48 +01:00
|
|
|
'use strict';
|
|
|
|
|
2023-01-29 19:24:55 +02:00
|
|
|
const _ = require('lodash');
|
2021-02-02 12:27:24 +01:00
|
|
|
// eslint-disable-next-line node/no-extraneous-require
|
2021-04-29 13:51:12 +02:00
|
|
|
const { features } = require('@strapi/strapi/lib/utils/ee');
|
2021-08-23 22:25:31 +02:00
|
|
|
const executeCEBootstrap = require('../../server/bootstrap');
|
|
|
|
const { getService } = require('../../server/utils');
|
2023-01-02 10:08:16 +01:00
|
|
|
const actions = require('./config/admin-actions');
|
2020-12-21 17:11:48 +01:00
|
|
|
|
2023-01-29 19:24:55 +02:00
|
|
|
const enableUsersToLicenseLimit = async (numberOfUsersToEnable) => {
|
|
|
|
const data = await strapi.db.query('strapi::ee-store').findOne({
|
|
|
|
where: { key: 'ee_disabled_users' },
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!data || !data.value || data.value.length === 0) return;
|
|
|
|
|
|
|
|
const disabledUsers = JSON.parse(data.value);
|
|
|
|
|
|
|
|
const usersToEnable = _.take(disabledUsers, numberOfUsersToEnable);
|
|
|
|
|
|
|
|
usersToEnable.forEach(async (user) => {
|
|
|
|
const data = await strapi.db.query('admin::user').findOne({
|
|
|
|
where: { id: user.id },
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!data) return;
|
|
|
|
|
|
|
|
await strapi.db.query('admin::user').update({
|
|
|
|
where: { id: user.id },
|
|
|
|
data: { isActive: true },
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2023-02-03 10:20:55 +02:00
|
|
|
const remainingDisabledUsers = _.drop(disabledUsers, numberOfUsersToEnable);
|
|
|
|
|
|
|
|
return strapi.db.query('strapi::ee-store').update({
|
|
|
|
where: { id: data.id },
|
|
|
|
data: { value: JSON.stringify(remainingDisabledUsers) },
|
|
|
|
});
|
2023-01-29 19:24:55 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const calculateAdminSeatDifference = async (seatsAllowedByLicense) => {
|
|
|
|
const currentAdminSeats = await strapi.db.query('admin::user').count({
|
|
|
|
where: {
|
|
|
|
isActive: true,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
return currentAdminSeats - seatsAllowedByLicense;
|
|
|
|
};
|
|
|
|
|
|
|
|
const disableUsersAboveLicenseLimit = async (numberOfUsersToDisable) => {
|
|
|
|
const users = await strapi.db.query('admin::user').findMany({
|
|
|
|
where: { isActive: 'true' },
|
|
|
|
orderBy: { createdAt: 'DESC' },
|
|
|
|
populate: { roles: { select: ['id'] } },
|
|
|
|
});
|
|
|
|
|
|
|
|
const usersToDisable = _.take(users, numberOfUsersToDisable);
|
|
|
|
|
|
|
|
usersToDisable.forEach(async (user) => {
|
|
|
|
user.isActive = false;
|
|
|
|
await strapi.db.query('admin::user').update({
|
|
|
|
where: { id: user.id },
|
|
|
|
data: {
|
|
|
|
isActive: false,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
const data = await strapi.db.query('strapi::ee-store').findOne({
|
|
|
|
where: { key: 'ee_disabled_users' },
|
|
|
|
});
|
|
|
|
|
|
|
|
if (data) {
|
|
|
|
return strapi.db.query('strapi::ee-store').update({
|
|
|
|
where: { id: data.id },
|
|
|
|
data: { value: JSON.stringify(usersToDisable) },
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return strapi.db.query('strapi::ee-store').create({
|
|
|
|
data: {
|
|
|
|
key: 'ee_disabled_users',
|
|
|
|
value: JSON.stringify(usersToDisable),
|
|
|
|
},
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
const syncdDisabledUserRecords = async () => {
|
|
|
|
const data = await strapi.db.query('strapi::ee-store').findOne({
|
|
|
|
where: { key: 'ee_disabled_users' },
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!data || !data.value || data.value.length === 0) return;
|
|
|
|
|
|
|
|
const disabledUsers = JSON.parse(data.value);
|
|
|
|
disabledUsers.forEach(async (user) => {
|
|
|
|
const data = await strapi.db.query('admin::user').findOne({
|
|
|
|
where: { id: user.id },
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!data) return;
|
|
|
|
|
2023-02-03 10:20:55 +02:00
|
|
|
return strapi.db.query('admin::user').update({
|
2023-01-29 19:24:55 +02:00
|
|
|
where: { id: user.id },
|
2023-02-03 10:20:55 +02:00
|
|
|
data: { isActive: user.isActive }, // TODO: should this value be hardcoded to 'false' or no?
|
2023-01-29 19:24:55 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2020-12-21 17:11:48 +01:00
|
|
|
module.exports = async () => {
|
2021-03-25 14:59:44 +01:00
|
|
|
const { actionProvider } = getService('permission');
|
|
|
|
|
2021-01-27 11:52:02 +01:00
|
|
|
if (features.isEnabled('sso')) {
|
2023-01-02 10:08:16 +01:00
|
|
|
await actionProvider.registerMany(actions.sso);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (features.isEnabled('audit-logs')) {
|
|
|
|
await actionProvider.registerMany(actions.auditLogs);
|
2021-01-27 11:52:02 +01:00
|
|
|
}
|
2020-12-21 17:11:48 +01:00
|
|
|
|
2022-11-24 19:08:45 +01:00
|
|
|
// TODO: check admin seats
|
2023-01-29 19:24:55 +02:00
|
|
|
await syncdDisabledUserRecords();
|
2022-11-24 19:08:45 +01:00
|
|
|
|
2023-02-03 10:20:55 +02:00
|
|
|
const permittedAdminSeats = 5;
|
2023-01-29 19:24:55 +02:00
|
|
|
|
|
|
|
const adminSeatDifference = await calculateAdminSeatDifference(permittedAdminSeats);
|
|
|
|
|
|
|
|
switch (true) {
|
|
|
|
case adminSeatDifference === 0:
|
|
|
|
break;
|
|
|
|
case adminSeatDifference > 0:
|
|
|
|
await disableUsersAboveLicenseLimit(adminSeatDifference);
|
|
|
|
break;
|
|
|
|
case adminSeatDifference < 0:
|
|
|
|
await enableUsersToLicenseLimit(Math.abs(adminSeatDifference));
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2020-12-21 17:11:48 +01:00
|
|
|
await executeCEBootstrap();
|
|
|
|
};
|