modified: apps/dispatch/app/_components/left/Report.tsx
renamed: apps/dispatch/app/api/keywords/token/route.ts -> apps/dispatch/app/api/token/route.ts modified: grafana/grafana.db
This commit is contained in:
52
apps/dispatch/app/api/token/route.ts
Normal file
52
apps/dispatch/app/api/token/route.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { getServerSession } from "api/auth/[...nextauth]/auth";
|
||||
import { ROOMS } from "_data/livekitRooms";
|
||||
import { AccessToken } from "livekit-server-sdk";
|
||||
import { NextRequest } from "next/server";
|
||||
import { prisma } from "@repo/db";
|
||||
|
||||
if (!process.env.LIVEKIT_API_KEY) throw new Error("LIVEKIT_API_KEY not set");
|
||||
if (!process.env.LIVEKIT_API_SECRET)
|
||||
throw new Error("LIVEKIT_API_SECRET not set");
|
||||
|
||||
export const GET = async (request: NextRequest) => {
|
||||
const roomName = request.nextUrl.searchParams.get("roomName");
|
||||
|
||||
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("AUDIO"))
|
||||
return Response.json({ message: "Missing permissions" }, { status: 401 });
|
||||
|
||||
const participantName = user.publicId;
|
||||
|
||||
const at = new AccessToken(
|
||||
process.env.LIVEKIT_API_KEY,
|
||||
process.env.LIVEKIT_API_SECRET,
|
||||
{
|
||||
identity: participantName,
|
||||
// Token to expire after 10 minutes
|
||||
ttl: "1d",
|
||||
},
|
||||
);
|
||||
|
||||
at.addGrant({
|
||||
room: roomName,
|
||||
roomJoin: true,
|
||||
canPublish: true,
|
||||
canSubscribe: true,
|
||||
});
|
||||
|
||||
const token = await at.toJwt();
|
||||
|
||||
return Response.json({ token });
|
||||
};
|
||||
Reference in New Issue
Block a user