54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import { createId } from "@homarr/db";
|
|
import { credentialsAdminGroup } from "@homarr/definitions";
|
|
import { logger } from "@homarr/log";
|
|
|
|
import { mapAndDecryptUsers } from "../../mappers/map-user";
|
|
import type { OldmarrImportUser } from "../../user-schema";
|
|
import { createDbInsertCollection } from "./common";
|
|
|
|
export const createUserInsertCollection = (importUsers: OldmarrImportUser[], encryptionToken: string | null) => {
|
|
const insertCollection = createDbInsertCollection(["users", "groups", "groupMembers", "groupPermissions"]);
|
|
|
|
logger.info(`Preparing users for insert collection count=${importUsers.length}`);
|
|
|
|
if (encryptionToken === null) {
|
|
logger.debug("Skipping user decryption due to missing token");
|
|
return insertCollection;
|
|
}
|
|
|
|
const preparedUsers = mapAndDecryptUsers(importUsers, encryptionToken);
|
|
preparedUsers.forEach((user) => insertCollection.users.push(user));
|
|
logger.debug(`Added users to insert collection count=${insertCollection.users.length}`);
|
|
|
|
if (!preparedUsers.some((user) => user.isAdmin)) {
|
|
logger.warn("No admin users found, skipping admin group creation");
|
|
return insertCollection;
|
|
}
|
|
|
|
const adminGroupId = createId();
|
|
insertCollection.groups.push({
|
|
id: adminGroupId,
|
|
name: credentialsAdminGroup,
|
|
});
|
|
|
|
insertCollection.groupPermissions.push({
|
|
groupId: adminGroupId,
|
|
permission: "admin",
|
|
});
|
|
|
|
const admins = preparedUsers.filter((user) => user.isAdmin);
|
|
|
|
admins.forEach((user) => {
|
|
insertCollection.groupMembers.push({
|
|
groupId: adminGroupId,
|
|
userId: user.id,
|
|
});
|
|
});
|
|
|
|
logger.info(
|
|
`Added admin group and permissions to insert collection adminGroupId=${adminGroupId} adminUsersCount=${admins.length}`,
|
|
);
|
|
|
|
return insertCollection;
|
|
};
|