Files
caddy-proxy-manager/app/(dashboard)/users/actions.ts
akanealw 99819b70ff
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
added caddy-proxy-manager for testing
2026-04-21 22:49:08 +00:00

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");
}