Replace all async reads and writes to the JSON database with the sync reads and writes to prevent a data corruption race condition where two requests are processed at the same time and write to the same file, or one reads while the other writes causing read of partially written data.
22 lines
632 B
TypeScript
22 lines
632 B
TypeScript
/*
|
|
SPDX-FileCopyrightText: © 2025 Hornwitser <code@hornwitser.no>
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
import { readUsers } from "~/server/database"
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const session = await requireServerSessionWithUser(event);
|
|
const users = readUsers();
|
|
|
|
if (session.access === "admin") {
|
|
return users.map(serverUserToApi);
|
|
}
|
|
if (session.access === "crew") {
|
|
return users.filter(u => u.type === "crew" || u.type === "admin").map(serverUserToApi);
|
|
}
|
|
throw createError({
|
|
status: 403,
|
|
statusText: "Forbidden",
|
|
message: "You do not have permission to list users",
|
|
});
|
|
})
|