generated from corrad-software/corrad-af-2024
96 lines
2.1 KiB
JavaScript
96 lines
2.1 KiB
JavaScript
import prisma from "../../utils/prisma";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
// Get user ID from route
|
|
const id = parseInt(event.context.params.id);
|
|
|
|
if (isNaN(id)) {
|
|
return {
|
|
statusCode: 400,
|
|
message: "Invalid user ID"
|
|
};
|
|
}
|
|
|
|
// Check if user exists
|
|
const existingUser = await prisma.user.findUnique({
|
|
where: {
|
|
userID: id
|
|
},
|
|
include: {
|
|
userrole: {
|
|
select: {
|
|
userRoleID: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!existingUser) {
|
|
return {
|
|
statusCode: 404,
|
|
message: "User not found"
|
|
};
|
|
}
|
|
|
|
// Check if user has any roles assigned
|
|
if (existingUser.userrole && existingUser.userrole.length > 0) {
|
|
// Delete all associated user roles first
|
|
await prisma.userrole.deleteMany({
|
|
where: {
|
|
userRoleUserID: id
|
|
}
|
|
});
|
|
}
|
|
|
|
// Create a sanitized copy of user data for audit log
|
|
const sanitizedUser = {
|
|
...existingUser,
|
|
userPassword: "[REDACTED]",
|
|
userSecretKey: "[REDACTED]"
|
|
};
|
|
|
|
// Delete user
|
|
await prisma.user.delete({
|
|
where: {
|
|
userID: id
|
|
}
|
|
});
|
|
|
|
// Create audit log
|
|
await prisma.audit.create({
|
|
data: {
|
|
auditIP: getRequestIP(event),
|
|
auditURL: getRequestURL(event),
|
|
auditURLMethod: 'DELETE',
|
|
auditAction: 'DELETE_USER',
|
|
auditDetails: JSON.stringify(sanitizedUser),
|
|
auditUserID: null,
|
|
auditUsername: null
|
|
}
|
|
});
|
|
|
|
return {
|
|
statusCode: 200,
|
|
message: "User deleted successfully"
|
|
};
|
|
} catch (error) {
|
|
console.error("Error deleting user:", error);
|
|
|
|
return {
|
|
statusCode: 500,
|
|
message: "Internal server error",
|
|
error: error.message
|
|
};
|
|
}
|
|
});
|
|
|
|
// Helper functions
|
|
function getRequestIP(event) {
|
|
return event.node.req.headers['x-forwarded-for'] ||
|
|
event.node.req.connection.remoteAddress;
|
|
}
|
|
|
|
function getRequestURL(event) {
|
|
return event.node.req.url;
|
|
}
|