Some checks failed
Build and Push Docker Images (Trusted) / build-and-push (., docker/caddy/Dockerfile, caddy) (push) Has been cancelled
Build and Push Docker Images (Trusted) / build-and-push (., docker/l4-port-manager/Dockerfile, l4-port-manager) (push) Has been cancelled
Build and Push Docker Images (Trusted) / build-and-push (., docker/web/Dockerfile, web) (push) Has been cancelled
Tests / test (push) Has been cancelled
96 lines
2.2 KiB
TypeScript
Executable File
96 lines
2.2 KiB
TypeScript
Executable File
"use server";
|
|
|
|
import { revalidatePath } from "next/cache";
|
|
import { requireAdmin } from "@/src/lib/auth";
|
|
import {
|
|
updateUserProfile,
|
|
updateUserRole,
|
|
updateUserStatus,
|
|
deleteUser,
|
|
type User,
|
|
} from "@/src/lib/models/user";
|
|
import { logAuditEvent } from "@/src/lib/audit";
|
|
|
|
export async function updateUserRoleAction(userId: number, role: User["role"]) {
|
|
const session = await requireAdmin();
|
|
const actorId = Number(session.user.id);
|
|
|
|
if (actorId === userId) {
|
|
throw new Error("Cannot change your own role");
|
|
}
|
|
|
|
await updateUserRole(userId, role);
|
|
|
|
logAuditEvent({
|
|
userId: actorId,
|
|
action: "update",
|
|
entityType: "user",
|
|
entityId: userId,
|
|
summary: `Changed user ${userId} role to ${role}`,
|
|
});
|
|
|
|
revalidatePath("/users");
|
|
}
|
|
|
|
export async function updateUserStatusAction(userId: number, status: string) {
|
|
const session = await requireAdmin();
|
|
const actorId = Number(session.user.id);
|
|
|
|
if (actorId === userId) {
|
|
throw new Error("Cannot change your own status");
|
|
}
|
|
|
|
await updateUserStatus(userId, status);
|
|
|
|
logAuditEvent({
|
|
userId: actorId,
|
|
action: "update",
|
|
entityType: "user",
|
|
entityId: userId,
|
|
summary: `Changed user ${userId} status to ${status}`,
|
|
});
|
|
|
|
revalidatePath("/users");
|
|
}
|
|
|
|
export async function updateUserInfoAction(userId: number, formData: FormData) {
|
|
const session = await requireAdmin();
|
|
const actorId = Number(session.user.id);
|
|
|
|
const name = formData.get("name") ? String(formData.get("name")).trim() : undefined;
|
|
const email = formData.get("email") ? String(formData.get("email")).trim() : undefined;
|
|
|
|
await updateUserProfile(userId, { name, email });
|
|
|
|
logAuditEvent({
|
|
userId: actorId,
|
|
action: "update",
|
|
entityType: "user",
|
|
entityId: userId,
|
|
summary: `Updated user ${userId} profile`,
|
|
});
|
|
|
|
revalidatePath("/users");
|
|
}
|
|
|
|
export async function deleteUserAction(userId: number) {
|
|
const session = await requireAdmin();
|
|
const actorId = Number(session.user.id);
|
|
|
|
if (actorId === userId) {
|
|
throw new Error("Cannot delete your own account");
|
|
}
|
|
|
|
await deleteUser(userId);
|
|
|
|
logAuditEvent({
|
|
userId: actorId,
|
|
action: "delete",
|
|
entityType: "user",
|
|
entityId: userId,
|
|
summary: `Deleted user ${userId}`,
|
|
});
|
|
|
|
revalidatePath("/users");
|
|
}
|