import http from "http"; import getAuthCookieNames from "../package-shared/functions/backend/cookies/get-auth-cookie-names"; import parseCookies from "../package-shared/utils/backend/parseCookies"; import decrypt from "../package-shared/functions/dsql/decrypt"; import EJSON from "../package-shared/utils/ejson"; import { SendOneTimeCodeEmailResponse } from "../package-shared/types"; type Param = { request?: http.IncomingMessage & { [s: string]: any }; cookieString?: string; email?: string; }; /** * # Verify the temp email code sent to the user's email address */ export default async function validateTempEmailCode({ request, email, cookieString, }: Param): Promise { try { const keyNames = getAuthCookieNames(); const oneTimeCodeCookieName = keyNames.oneTimeCodeName; const cookies = parseCookies({ request, cookieString }); const encryptedOneTimeCode = cookies[oneTimeCodeCookieName]; const encryptedPayload = decrypt({ encryptedString: encryptedOneTimeCode, }); const payload = EJSON.parse(encryptedPayload) as | SendOneTimeCodeEmailResponse | undefined; if (payload?.email && !email) { return payload; } if (payload?.email && payload.email === email) { return payload; } return null; } catch (error: any) { console.log("validateTempEmailCode error:", error.message); return null; } }