Просмотр исходного кода

Move redirect processing and isMaintenanceMode processing to commons.ts

Shun Miyazawa 3 лет назад
Родитель
Сommit
bff3ba1692

+ 3 - 11
packages/app/src/pages/[[...path]].page.tsx

@@ -581,19 +581,11 @@ export const getServerSideProps: GetServerSideProps = async(context: GetServerSi
   const req = context.req as CrowiRequest<IUserHasId & any>;
   const req = context.req as CrowiRequest<IUserHasId & any>;
   const { user } = req;
   const { user } = req;
 
 
-  const { crowi } = req;
-  const isMaintenanceMode = crowi.appService.isMaintenanceMode();
-  if (isMaintenanceMode) {
-    return {
-      redirect: {
-        destination: '/maintenance',
-        permanent: false,
-      },
-    };
-  }
-
   const result = await getServerSideCommonProps(context);
   const result = await getServerSideCommonProps(context);
 
 
+  if ('redirect' in result) {
+    return { redirect: result.redirect };
+  }
 
 
   // check for presence
   // check for presence
   // see: https://github.com/vercel/next.js/issues/19271#issuecomment-730006862
   // see: https://github.com/vercel/next.js/issues/19271#issuecomment-730006862

+ 0 - 2
packages/app/src/pages/admin/[[...path]].page.tsx

@@ -69,7 +69,6 @@ const pluginUtils = new PluginUtils();
 type Props = CommonProps & {
 type Props = CommonProps & {
   currentUser: any,
   currentUser: any,
 
 
-  isMaintenanceMode: boolean,
   nodeVersion: string,
   nodeVersion: string,
   npmVersion: string,
   npmVersion: string,
   yarnVersion: string,
   yarnVersion: string,
@@ -282,7 +281,6 @@ async function injectServerConfigurations(context: GetServerSidePropsContext, pr
   } = crowi;
   } = crowi;
 
 
   props.siteUrl = appService.getSiteUrl();
   props.siteUrl = appService.getSiteUrl();
-  props.isMaintenanceMode = crowi.appService.isMaintenanceMode();
   props.nodeVersion = crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version.version : null;
   props.nodeVersion = crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version.version : null;
   props.npmVersion = crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version.version : null;
   props.npmVersion = crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version.version : null;
   props.yarnVersion = crowi.runtimeVersions.versions.yarn ? crowi.runtimeVersions.versions.yarn.version.version : null;
   props.yarnVersion = crowi.runtimeVersions.versions.yarn ? crowi.runtimeVersions.versions.yarn.version.version : null;

+ 4 - 10
packages/app/src/pages/maintenance.page.tsx

@@ -83,18 +83,12 @@ async function injectNextI18NextConfigurations(context: GetServerSidePropsContex
 export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
 export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
   const req = context.req as CrowiRequest<IUserHasId & any>;
   const req = context.req as CrowiRequest<IUserHasId & any>;
 
 
-  const { crowi } = req;
-  const isMaintenanceMode = crowi.appService.isMaintenanceMode();
-  if (!isMaintenanceMode) {
-    return {
-      redirect: {
-        destination: '/',
-        permanent: false,
-      },
-    };
+  const result = await getServerSideCommonProps(context);
+
+  if ('redirect' in result) {
+    return { redirect: result.redirect };
   }
   }
 
 
-  const result = await getServerSideCommonProps(context);
   if (!('props' in result)) {
   if (!('props' in result)) {
     throw new Error('invalid getSSP result');
     throw new Error('invalid getSSP result');
   }
   }

+ 22 - 0
packages/app/src/pages/utils/commons.ts

@@ -19,6 +19,7 @@ export type CommonProps = {
   csrfToken: string,
   csrfToken: string,
   isContainerFluid: boolean,
   isContainerFluid: boolean,
   growiVersion: string,
   growiVersion: string,
+  isMaintenanceMode: boolean,
 } & Partial<SSRConfig>;
 } & Partial<SSRConfig>;
 
 
 // eslint-disable-next-line max-len
 // eslint-disable-next-line max-len
@@ -44,8 +45,29 @@ export const getServerSideCommonProps: GetServerSideProps<CommonProps> = async(c
     csrfToken: req.csrfToken(),
     csrfToken: req.csrfToken(),
     isContainerFluid: configManager.getConfig('crowi', 'customize:isContainerFluid') ?? false,
     isContainerFluid: configManager.getConfig('crowi', 'customize:isContainerFluid') ?? false,
     growiVersion: crowi.version,
     growiVersion: crowi.version,
+    isMaintenanceMode: appService.isMaintenanceMode(),
   };
   };
 
 
+  if (!props.isMaintenanceMode && currentPathname === '/maintenance') {
+    return {
+      props,
+      redirect: {
+        destination: '/',
+        permanent: false,
+      },
+    };
+  }
+
+  if (props.isMaintenanceMode && !currentPathname.match('/admin/*') && !(currentPathname === '/maintenance')) {
+    return {
+      props,
+      redirect: {
+        destination: '/maintenance',
+        permanent: false,
+      },
+    };
+  }
+
   return { props };
   return { props };
 };
 };