UNPKG

studiocms

Version:

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

78 lines (71 loc) 2.4 kB
import { apiResponseLogger } from 'studiocms:logger'; import { SDKCore } from 'studiocms:sdk'; import { AllResponse, createEffectAPIRoutes, createJsonResponse, Effect, genLogger, OptionsResponse, readAPIContextJson, } from '../../../effect.js'; import type { ConfigFinal, StudioCMSNotificationSettings, } from '../../../virtuals/sdk/modules/config.js'; export const { POST, OPTIONS, ALL } = createEffectAPIRoutes( { POST: (ctx) => genLogger('studiocms/routes/api/dashboard/email-notification-settings-site.POST')( function* () { const sdk = yield* SDKCore; // Get user data const userData = ctx.locals.StudioCMS.security?.userSessionData; // Check if user is logged in if (!userData?.isLoggedIn) { return apiResponseLogger(403, 'Unauthorized'); } // Check if user has permission const isAuthorized = ctx.locals.StudioCMS.security?.userPermissionLevel.isOwner; if (!isAuthorized) { return apiResponseLogger(403, 'Unauthorized'); } yield* readAPIContextJson<unknown>(ctx).pipe( Effect.map((raw) => { const rawData = (raw ?? {}) as Record<string, unknown>; const safe = { emailVerification: typeof rawData.emailVerification === 'boolean' ? rawData.emailVerification : undefined, requireAdminVerification: typeof rawData.requireAdminVerification === 'boolean' ? rawData.requireAdminVerification : undefined, requireEditorVerification: typeof rawData.requireEditorVerification === 'boolean' ? rawData.requireEditorVerification : undefined, oAuthBypassVerification: typeof rawData.oAuthBypassVerification === 'boolean' ? rawData.oAuthBypassVerification : undefined, } as ConfigFinal<StudioCMSNotificationSettings>; return safe; }), Effect.flatMap((data) => sdk.notificationSettings.site.update(data)) ); return apiResponseLogger(200, 'Notification settings updated'); } ), 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 }); }, } );