From dd99e47e70b0d297c90012e7baf931c26f0ff76e Mon Sep 17 00:00:00 2001 From: giancarlo Date: Tue, 7 May 2024 19:07:35 +0700 Subject: [PATCH] Add production environment guards to Keystatic routes Implemented production environment guards in Keystatic routes to prevent access to certain functions in production mode. Updated 'layout.tsx.hbs' to redirect to home if the environment is production, and modified 'keystatic-route-handler.ts' to return 404 status code if attempting to utilize route handlers while in production. --- .../keystatic/src/keystatic-route-handler.ts | 24 ++++++++++++++++++- .../templates/keystatic/layout.tsx.hbs | 9 ++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/cms/keystatic/src/keystatic-route-handler.ts b/packages/cms/keystatic/src/keystatic-route-handler.ts index 41ed54602..081b1075e 100644 --- a/packages/cms/keystatic/src/keystatic-route-handler.ts +++ b/packages/cms/keystatic/src/keystatic-route-handler.ts @@ -2,6 +2,28 @@ import { makeRouteHandler } from '@keystatic/next/route-handler'; import config from './keystatic.config'; -export const keystaticRouteHandlers = makeRouteHandler({ +const handlers = makeRouteHandler({ config, }); + +/** + * @name productionGuard + * @description Guard for production environment. Returns 404 if in production. + * @param routeHandler + */ +function productionGuard(routeHandler: (req: Request) => Promise) { + if (process.env.NODE_ENV === 'production') { + return new Response('Not found', { status: 404 }); + } + + return (req: Request) => routeHandler(req); +} + +/** + * @name keystaticRouteHandlers + * @description Route handlers for keystatic + */ +export const keystaticRouteHandlers = { + POST: productionGuard(handlers.POST), + GET: productionGuard(handlers.GET), +}; diff --git a/turbo/generators/templates/keystatic/layout.tsx.hbs b/turbo/generators/templates/keystatic/layout.tsx.hbs index d78a4226a..ef3a5449b 100644 --- a/turbo/generators/templates/keystatic/layout.tsx.hbs +++ b/turbo/generators/templates/keystatic/layout.tsx.hbs @@ -1,7 +1,10 @@ +import { redirect } from 'next/navigation'; import KeystaticAdmin from '@kit/keystatic/admin'; export default function Layout() { - return ( - - ); + if (process.env.NODE_ENV === 'production') { + redirect('/'); + } + + return ; } \ No newline at end of file