83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import { prisma } from "@repo/db";
|
|
import { RoomManager } from "_helpers/LivekitRoomManager";
|
|
import { getServerSession } from "api/auth/[...nextauth]/auth";
|
|
import { NextRequest } from "next/server";
|
|
|
|
export const GET = async (request: NextRequest) => {
|
|
const session = await getServerSession();
|
|
|
|
if (!session) return Response.json({ message: "Unauthorized" }, { status: 401 });
|
|
const user = await prisma.user.findUnique({
|
|
where: {
|
|
id: session.user.id,
|
|
},
|
|
});
|
|
|
|
const rooms = await RoomManager.listRooms();
|
|
|
|
const roomsWithParticipants = rooms.map(async (room) => {
|
|
const participants = await RoomManager.listParticipants(room.name);
|
|
return {
|
|
room,
|
|
participants,
|
|
};
|
|
});
|
|
|
|
return Response.json(await Promise.all(roomsWithParticipants), { status: 200 });
|
|
};
|
|
|
|
export const DELETE = async (request: NextRequest) => {
|
|
try {
|
|
const identity = request.nextUrl.searchParams.get("identity");
|
|
const roomName = request.nextUrl.searchParams.get("roomName");
|
|
const ban = request.nextUrl.searchParams.get("ban");
|
|
|
|
if (!identity) return Response.json({ message: "Missing User identity" }, { status: 400 });
|
|
if (!roomName) return Response.json({ message: "Missing roomName" }, { status: 400 });
|
|
|
|
const session = await getServerSession();
|
|
|
|
if (!session) return Response.json({ message: "Unauthorized" }, { status: 401 });
|
|
const user = await prisma.user.findUnique({
|
|
where: {
|
|
id: session.user.id,
|
|
},
|
|
});
|
|
|
|
if (!user || !user.permissions.includes("ADMIN_KICK"))
|
|
return Response.json({ message: "Missing permissions" }, { status: 401 });
|
|
|
|
if (ban && !user.permissions.includes("ADMIN_USER")) {
|
|
return Response.json({ message: "Missing permissions to ban user" }, { status: 401 });
|
|
}
|
|
|
|
if (ban) {
|
|
const participant = await RoomManager.getParticipant(roomName, identity);
|
|
const pUser = await prisma.user.findUnique({
|
|
where: {
|
|
id: participant.attributes.userId,
|
|
},
|
|
});
|
|
if (!pUser) return;
|
|
// If the user is banned, we need to remove their permissions
|
|
await prisma.user.update({
|
|
where: { id: session.user.id },
|
|
data: {
|
|
permissions: {
|
|
set: pUser.permissions.filter((p) => p !== "AUDIO"),
|
|
},
|
|
},
|
|
});
|
|
}
|
|
|
|
await RoomManager.removeParticipant(roomName, identity);
|
|
return Response.json(
|
|
{ message: `User ${identity} kicked from room ${roomName}` },
|
|
{ status: 200 },
|
|
);
|
|
} catch (error) {
|
|
console.error("Error in DELETE /api/livekit-participant:", error);
|
|
return Response.json({ message: "Internal Server Error" }, { status: 500 });
|
|
}
|
|
};
|