studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
66 lines (65 loc) • 2.22 kB
JavaScript
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
};