UNPKG

studiocms

Version:

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

65 lines (64 loc) 2.14 kB
import { developerConfig } from "studiocms:config"; import { apiResponseLogger } from "studiocms:logger"; import { SDKCore } from "studiocms:sdk"; import templateEngine from "studiocms:template-engine"; import { AllResponse, createEffectAPIRoutes, createJsonResponse, Effect, genLogger, OptionsResponse, readAPIContextJson } from "../../../../effect.js"; const { POST, OPTIONS, ALL } = createEffectAPIRoutes( { POST: (ctx) => genLogger("studiocms/routes/api/dashboard/templates.POST")(function* () { const [sdk, { templates }, engine] = yield* Effect.all([ SDKCore, readAPIContextJson(ctx), templateEngine ]); if (developerConfig.demoMode !== false) { return apiResponseLogger(403, "Demo mode is enabled, this action is not allowed."); } const userData = ctx.locals.StudioCMS.security?.userSessionData; if (!userData?.isLoggedIn) { return apiResponseLogger(403, "Unauthorized"); } const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isAdmin; if (!isAuthorized) { return apiResponseLogger(403, "Unauthorized"); } const keys = engine.availableTemplates; const updates = {}; for (const key of keys) { if (key in templates) { updates[key] = templates[key]; } } if (Object.keys(updates).length === 0) { return apiResponseLogger(400, "No valid templates provided for update."); } const updatedConfig = yield* sdk.CONFIG.templateConfig.update(updates); if (!updatedConfig) { return apiResponseLogger(500, "Failed to update templates."); } return apiResponseLogger(200, "Templates updated successfully."); }), 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 };