owltide/server/api/auth/account.post.ts
Hornwitser 0c5b4c756f
All checks were successful
/ build (push) Successful in 1m31s
/ deploy (push) Successful in 16s
Make the first user created an admin
To easily bootstrap of administration of the system make the first
regular user account created into an admin account.
2025-06-28 01:30:39 +02:00

60 lines
1.4 KiB
TypeScript

import { readUsers, writeUsers, nextUserId, type ServerUser } from "~/server/database";
import { broadcastEvent } from "~/server/streams";
export default defineEventHandler(async (event) => {
let session = await getServerSession(event);
if (session) {
throw createError({
status: 409,
message: "Cannot create account while having an active session."
});
}
const formData = await readFormData(event);
const name = formData.get("name");
const users = await readUsers();
let user: ServerUser;
if (typeof name === "string") {
if (name === "") {
throw createError({
status: 400,
message: "Name cannot be blank",
});
}
if (users.some(user => user.name && user.name.toLowerCase() === name.toLowerCase())) {
throw createError({
status: 409,
message: "User already exists",
});
}
const firstUser = users.every(user => user.type === "anonymous");
user = {
id: await nextUserId(),
updatedAt: new Date().toISOString(),
type: firstUser ? "admin" : "regular",
name,
};
} else if (name === null) {
user = {
id: await nextUserId(),
updatedAt: new Date().toISOString(),
type: "anonymous",
};
} else {
throw createError({
status: 400,
message: "Invalid name",
});
}
users.push(user);
await writeUsers(users);
await broadcastEvent({
type: "user-update",
data: user,
});
await setServerSession(event, user);
})