Yuki Takei 1 год назад
Родитель
Сommit
d599ea1de2

+ 5 - 4
apps/app/src/pages/[[...path]].page.tsx

@@ -31,7 +31,6 @@ import type { ISidebarConfig } from '~/interfaces/sidebar-config';
 import type { CurrentPageYjsData } from '~/interfaces/yjs';
 import type { PageModel, PageDocument } from '~/server/models/page';
 import type { PageRedirectModel } from '~/server/models/page-redirect';
-import { configManager } from '~/server/service/config-manager';
 import { useEditorModeClassName } from '~/services/layout/use-editor-mode-class-name';
 import {
   useCurrentUser,
@@ -449,7 +448,7 @@ async function injectPageData(context: GetServerSidePropsContext, props: Props):
 
   const Page = crowi.model('Page') as PageModel;
   const PageRedirect = mongooseModel('PageRedirect') as PageRedirectModel;
-  const { pageService } = crowi;
+  const { pageService, configManager } = crowi;
 
   let currentPathname = props.currentPathname;
 
@@ -558,7 +557,7 @@ function injectServerConfigurations(context: GetServerSidePropsContext, props: P
   const req: CrowiRequest = context.req as CrowiRequest;
   const { crowi } = req;
   const {
-    searchService, aclService,
+    configManager, searchService, aclService,
   } = crowi;
 
   props.aiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
@@ -610,8 +609,10 @@ function injectServerConfigurations(context: GetServerSidePropsContext, props: P
     // XSS Options
     isEnabledXssPrevention: configManager.getConfig('markdown', 'markdown:rehypeSanitize:isEnabledPrevention'),
     sanitizeType: configManager.getConfig('markdown', 'markdown:rehypeSanitize:option'),
-    customAttrWhitelist: JSON.parse(configManager.getConfig('markdown', 'markdown:rehypeSanitize:attributes')),
     customTagWhitelist: configManager.getConfig('markdown', 'markdown:rehypeSanitize:tagNames'),
+    customAttrWhitelist: configManager.getConfig('markdown', 'markdown:rehypeSanitize:attributes') != null
+      ? JSON.parse(configManager.getConfig('markdown', 'markdown:rehypeSanitize:attributes'))
+      : undefined,
     highlightJsStyleBorder: configManager.getConfig('crowi', 'customize:highlightJsStyleBorder'),
   };
 

+ 13 - 15
apps/app/src/server/service/app.ts

@@ -4,8 +4,9 @@ import loggerFactory from '~/utils/logger';
 
 import S2sMessage from '../models/vo/s2s-message';
 
-import { S2sMessagingService } from './s2s-messaging/base';
-import { S2sMessageHandlable } from './s2s-messaging/handlable';
+import { configManager } from './config-manager';
+import type { S2sMessagingService } from './s2s-messaging/base';
+import type { S2sMessageHandlable } from './s2s-messaging/handlable';
 
 const logger = loggerFactory('growi:service:AppService');
 /**
@@ -15,13 +16,10 @@ export default class AppService implements S2sMessageHandlable {
 
   crowi!: any;
 
-  configManager: any;
-
   s2sMessagingService: S2sMessagingService;
 
   constructor(crowi) {
     this.crowi = crowi;
-    this.configManager = crowi.configManager;
     this.s2sMessagingService = crowi.s2sMessagingService;
   }
 
@@ -34,7 +32,7 @@ export default class AppService implements S2sMessageHandlable {
       return false;
     }
 
-    const isInstalled = this.crowi.configManager.getConfig('crowi', 'app:installed');
+    const isInstalled = configManager.getConfig('crowi', 'app:installed');
 
     return !isInstalled;
   }
@@ -74,7 +72,7 @@ export default class AppService implements S2sMessageHandlable {
   }
 
   getAppTitle() {
-    return this.configManager.getConfig('crowi', 'app:title') || 'GROWI';
+    return configManager.getConfig('crowi', 'app:title') || 'GROWI';
   }
 
   /**
@@ -88,7 +86,7 @@ export default class AppService implements S2sMessageHandlable {
    */
   /* eslint-disable no-else-return */
   getSiteUrl() {
-    const siteUrl = this.configManager.getConfig('crowi', 'app:siteUrl');
+    const siteUrl = configManager.getConfig('crowi', 'app:siteUrl');
     if (siteUrl != null) {
       return pathUtils.removeTrailingSlash(siteUrl);
     }
@@ -99,19 +97,19 @@ export default class AppService implements S2sMessageHandlable {
   /* eslint-enable no-else-return */
 
   getTzoffset() {
-    return -(this.configManager.getConfig('crowi', 'app:timezone') || 9) * 60;
+    return -(configManager.getConfig('crowi', 'app:timezone') || 9) * 60;
   }
 
   getAppConfidential() {
-    return this.configManager.getConfig('crowi', 'app:confidential');
+    return configManager.getConfig('crowi', 'app:confidential');
   }
 
   async isDBInitialized(forceReload) {
     if (forceReload) {
       // load configs
-      await this.configManager.loadConfigs();
+      await configManager.loadConfigs();
     }
-    return this.configManager.getConfigFromDB('crowi', 'app:installed');
+    return configManager.getRawConfigData().db['app:installed'];
   }
 
   async setupAfterInstall(): Promise<void> {
@@ -120,15 +118,15 @@ export default class AppService implements S2sMessageHandlable {
   }
 
   isMaintenanceMode(): boolean {
-    return this.configManager.getConfig('crowi', 'app:isMaintenanceMode');
+    return configManager.getConfig('crowi', 'app:isMaintenanceMode');
   }
 
   async startMaintenanceMode(): Promise<void> {
-    await this.configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isMaintenanceMode': true });
+    await configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isMaintenanceMode': true });
   }
 
   async endMaintenanceMode(): Promise<void> {
-    await this.configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isMaintenanceMode': false });
+    await configManager.updateConfigsInTheSameNamespace('crowi', { 'app:isMaintenanceMode': false });
   }
 
 }

+ 3 - 1
apps/app/src/server/service/config-manager/config-manager.ts

@@ -16,7 +16,9 @@ import { ConfigLoader } from './config-loader';
 
 const logger = loggerFactory('growi:service:ConfigManager');
 
-export class ConfigManager implements IConfigManager<ConfigKey, ConfigValues>, S2sMessageHandlable {
+export type IConfigManagerForApp = IConfigManager<ConfigKey, ConfigValues>
+
+export class ConfigManager implements IConfigManagerForApp, S2sMessageHandlable {
 
   private configLoader: ConfigLoader;