2025-05-10 02:09:06 +02:00
|
|
|
/*!
|
|
|
|
* Copyright (c) 2024 PLANKA Software GmbH
|
|
|
|
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
|
|
|
*/
|
|
|
|
|
2020-02-25 01:31:52 +05:00
|
|
|
const bcrypt = require('bcrypt');
|
2019-08-31 04:07:25 +05:00
|
|
|
|
2023-09-12 01:12:38 +02:00
|
|
|
const buildData = () => {
|
|
|
|
const data = {
|
2025-05-10 02:09:06 +02:00
|
|
|
role: 'admin',
|
|
|
|
isSsoUser: false,
|
|
|
|
isDeactivated: false,
|
2023-09-12 01:12:38 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
if (process.env.DEFAULT_ADMIN_PASSWORD) {
|
|
|
|
data.password = bcrypt.hashSync(process.env.DEFAULT_ADMIN_PASSWORD, 10);
|
|
|
|
}
|
|
|
|
if (process.env.DEFAULT_ADMIN_NAME) {
|
|
|
|
data.name = process.env.DEFAULT_ADMIN_NAME;
|
|
|
|
}
|
|
|
|
if (process.env.DEFAULT_ADMIN_USERNAME) {
|
2024-03-12 20:40:46 +01:00
|
|
|
data.username = process.env.DEFAULT_ADMIN_USERNAME.toLowerCase();
|
2023-09-12 01:12:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.seed = async (knex) => {
|
2025-05-10 02:09:06 +02:00
|
|
|
const email = process.env.DEFAULT_ADMIN_EMAIL && process.env.DEFAULT_ADMIN_EMAIL.toLowerCase();
|
|
|
|
|
|
|
|
if (email) {
|
|
|
|
const data = buildData();
|
|
|
|
|
|
|
|
let userId;
|
|
|
|
try {
|
|
|
|
[{ id: userId }] = await knex('user_account').insert(
|
|
|
|
{
|
|
|
|
...data,
|
|
|
|
email,
|
|
|
|
subscribeToOwnCards: false,
|
|
|
|
subscribeToCardWhenCommenting: true,
|
|
|
|
turnOffRecentCardHighlighting: false,
|
|
|
|
enableFavoritesByDefault: false,
|
|
|
|
defaultEditorMode: 'wysiwyg',
|
|
|
|
defaultHomeView: 'groupedProjects',
|
|
|
|
defaultProjectsOrder: 'byDefault',
|
|
|
|
createdAt: new Date().toISOString(),
|
|
|
|
},
|
|
|
|
'id',
|
|
|
|
);
|
|
|
|
} catch (error) {
|
|
|
|
/* empty */
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!userId) {
|
|
|
|
await knex('user_account').update(data).where('email', email);
|
|
|
|
}
|
2023-09-12 01:12:38 +02:00
|
|
|
}
|
|
|
|
|
2025-05-10 02:09:06 +02:00
|
|
|
const activeUsersLimit = parseInt(process.env.ACTIVE_USERS_LIMIT, 10);
|
|
|
|
|
|
|
|
if (!Number.isNaN(activeUsersLimit)) {
|
|
|
|
let orderByQuery;
|
|
|
|
let orderByQueryValues;
|
|
|
|
|
|
|
|
if (email) {
|
|
|
|
orderByQuery = 'CASE WHEN email = ? THEN 0 WHEN role = ? THEN 1 ELSE 2 END';
|
|
|
|
orderByQueryValues = [email, 'admin'];
|
|
|
|
} else {
|
|
|
|
orderByQuery = 'CASE WHEN role = ? THEN 0 ELSE 1 END';
|
|
|
|
orderByQueryValues = 'admin';
|
|
|
|
}
|
|
|
|
|
|
|
|
const users = await knex('user_account')
|
|
|
|
.select('id')
|
|
|
|
.where('is_deactivated', false)
|
|
|
|
.orderByRaw(orderByQuery, orderByQueryValues)
|
|
|
|
.orderBy('id')
|
|
|
|
.offset(activeUsersLimit);
|
|
|
|
|
|
|
|
if (users.length > 0) {
|
|
|
|
const userIds = users.map(({ id }) => id);
|
|
|
|
|
|
|
|
await knex('user_account')
|
|
|
|
.update({
|
|
|
|
isDeactivated: true,
|
|
|
|
})
|
|
|
|
.whereIn('id', userIds);
|
|
|
|
}
|
2023-09-12 01:12:38 +02:00
|
|
|
}
|
|
|
|
};
|