51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import prisma from "../db";
|
|
import { addUserRoles, createUser, getRoleByName, listUser } from "../services/keycloak";
|
|
|
|
export async function initFirstAdmin() {
|
|
let users = await (async () => {
|
|
let list = await listUser();
|
|
while (!list) {
|
|
list = await listUser();
|
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
}
|
|
return list;
|
|
})();
|
|
|
|
if (users.length === 0) {
|
|
const role = await getRoleByName("system");
|
|
const userId = await createUser("admin", "1234", {
|
|
firstName: "Admin",
|
|
lastName: "System",
|
|
email: "admin@jws.local",
|
|
requiredActions: ["UPDATE_PASSWORD"],
|
|
enabled: true,
|
|
});
|
|
|
|
if (!userId || typeof userId !== "string") {
|
|
throw new Error("Error create user with keycloak service.");
|
|
}
|
|
|
|
if (role) await addUserRoles(userId, [role]);
|
|
|
|
await prisma.user.create({
|
|
data: {
|
|
id: userId,
|
|
email: "admin@jws.local",
|
|
gender: "",
|
|
address: "",
|
|
addressEN: "",
|
|
userType: "USER",
|
|
userRole: "system",
|
|
telephoneNo: "",
|
|
firstName: "Admin",
|
|
firstNameEN: "Admin",
|
|
lastName: "System",
|
|
lastNameEN: "System",
|
|
statusOrder: 0,
|
|
username: "admin",
|
|
citizenId: "",
|
|
citizenIssue: new Date(),
|
|
},
|
|
});
|
|
}
|
|
}
|