UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

66 lines (65 loc) 2.22 kB
import { VerifyEmail } from "studiocms:auth/lib"; import { apiResponseLogger } from "studiocms:logger"; import { SDKCore } from "studiocms:sdk"; import { AllResponse, createEffectAPIRoutes, createJsonResponse, Effect, genLogger, OptionsResponse, readAPIContextJson } from "../../../effect.js"; const { POST, OPTIONS, ALL } = createEffectAPIRoutes( { POST: (ctx) => genLogger("studiocms/routes/api/dashboard/resend-verify-email.POST")(function* () { const [sdk, verifier] = yield* Effect.all([SDKCore, VerifyEmail]); if (!ctx.locals.StudioCMS.siteConfig.data.enableMailer) { return apiResponseLogger(400, "Mailer is disabled, this action is disabled."); } const userData = ctx.locals.StudioCMS.security?.userSessionData; if (!userData?.isLoggedIn) { return apiResponseLogger(403, "Unauthorized"); } const isPrivileged = ctx.locals.StudioCMS.security?.userPermissionLevel.isAdmin || ctx.locals.StudioCMS.security?.userPermissionLevel.isOwner; if (!isPrivileged) { return apiResponseLogger(403, "Unauthorized"); } const { userId } = yield* readAPIContextJson(ctx); if (!userId) { return apiResponseLogger(400, "Invalid request"); } const newToken = yield* sdk.AUTH.verifyEmail.create(userId); if (!newToken) { return apiResponseLogger(500, "Failed to create verification token"); } const response = yield* verifier.sendVerificationEmail(userId); if (!response) { return apiResponseLogger(500, "Failed to send verification email"); } if ("error" in response) { return apiResponseLogger(500, response.error); } return apiResponseLogger(200, response.message); }).pipe(VerifyEmail.Provide), OPTIONS: () => Effect.try(() => OptionsResponse({ allowedMethods: ["POST"] })), ALL: () => Effect.try(() => AllResponse()) }, { cors: { methods: ["POST", "OPTIONS"] }, onError: (error) => { console.error("API Error:", error); return createJsonResponse( { error: "Internal Server Error" }, { status: 500 } ); } } ); export { ALL, OPTIONS, POST };