"use server"; import { getAuth } from "@/auth/queries/getauth"; import { lachesis } from "@/lib/prisma"; import { randomUUID } from "crypto"; import { randomBytes } from "crypto"; import { redirect } from "next/navigation"; export async function generateShareToken(id: number): Promise<{ token?: string; id?: string; error?: string; }> { const { user } = await getAuth(); if (!user || !user.id || typeof user.id !== "string") { return { error: "Invalid user or user ID", }; } const gernatetoken = randomBytes(5).readUInt32BE(0).toString(); const token = await lachesis.linkSharingToken.create({ data: { playlogId: id, id: randomUUID(), userId: user.id, token: gernatetoken, createdAt: new Date(), }, }); return { token: token.token }; } export async function shareScore(token: string) { const PublicPage = await lachesis.linkSharingToken.findUnique({ where: { token, }, }); if (!PublicPage) { return { error: "Invalid token or token does not exist", }; } // Check if token has expired const tokenAge = new Date().getTime() - new Date(PublicPage.createdAt).getTime(); const tokenAgeLimit = 1000 * 60 * 60 * 24; // 1 day in milliseconds if (tokenAge > tokenAgeLimit) { await lachesis.linkSharingToken.update({ where: { token, }, data: { tokenExpiredAt: new Date(), }, }); redirect("/"); } return { success: true }; }