31 lines
796 B
TypeScript
31 lines
796 B
TypeScript
"use server";
|
|
import { getServerSession } from "../../../api/auth/[...nextauth]/auth";
|
|
import { Service } from "../page";
|
|
import { PrismaClient } from "@repo/db";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
export const generateToken = async (service: Service) => {
|
|
const session = await getServerSession();
|
|
if (!session) return null;
|
|
|
|
const key = await crypto.subtle.generateKey(
|
|
{ name: "HMAC", hash: "SHA-256" },
|
|
true,
|
|
["sign"],
|
|
);
|
|
const exportedKey = await crypto.subtle.exportKey("raw", key);
|
|
const accessToken = Array.from(new Uint8Array(exportedKey))
|
|
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
.join("");
|
|
|
|
const code = await prisma.oAuthToken.create({
|
|
data: {
|
|
clientId: service.id,
|
|
userId: session.user.id,
|
|
accessToken: accessToken,
|
|
},
|
|
});
|
|
return code;
|
|
};
|