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

+ 4 - 4
apps/app/src/server/routes/apiv3/admin-home.js

@@ -1,4 +1,4 @@
-import ConfigLoader from '../../service/config-loader';
+import { configManager } from '~/server/service/config-manager';
 
 
 const express = require('express');
 const express = require('express');
 
 
@@ -88,9 +88,9 @@ module.exports = (crowi) => {
       nodeVersion: crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version.version : '-',
       nodeVersion: crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version.version : '-',
       npmVersion: crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version.version : '-',
       npmVersion: crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version.version : '-',
       pnpmVersion: crowi.runtimeVersions.versions.pnpm ? crowi.runtimeVersions.versions.pnpm.version.version : '-',
       pnpmVersion: crowi.runtimeVersions.versions.pnpm ? crowi.runtimeVersions.versions.pnpm.version.version : '-',
-      envVars: await ConfigLoader.getEnvVarsForDisplay(true),
-      isV5Compatible: crowi.configManager.getConfig('crowi', 'app:isV5Compatible'),
-      isMaintenanceMode: crowi.configManager.getConfig('crowi', 'app:isMaintenanceMode'),
+      envVars: configManager.getManagedEnvVars(),
+      isV5Compatible: configManager.getConfig('crowi', 'app:isV5Compatible'),
+      isMaintenanceMode: configManager.getConfig('crowi', 'app:isMaintenanceMode'),
     };
     };
 
 
     return res.apiv3({ adminHomeParams });
     return res.apiv3({ adminHomeParams });

+ 6 - 0
apps/app/src/server/service/config-manager/config-loader.ts

@@ -1,4 +1,6 @@
 import type { IConfigLoader } from '@growi/core/dist/interfaces';
 import type { IConfigLoader } from '@growi/core/dist/interfaces';
+import * as configUtils from '@growi/core/dist/utils/config-utils';
+import { toBoolean } from '@growi/core/dist/utils/env-utils';
 
 
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
@@ -54,6 +56,10 @@ export class ConfigLoader implements IConfigLoader<ConfigKey, ConfigValues> {
     return dbConfig;
     return dbConfig;
   }
   }
 
 
+  getManagedEnvVars(includeSecret: boolean): Record<string, string> {
+    return configUtils.getManagedEnvVars(Object.values(CONFIG_DEFINITIONS), includeSecret);
+  }
+
   private parseEnvValue(value: string, type: string): unknown {
   private parseEnvValue(value: string, type: string): unknown {
     switch (type) {
     switch (type) {
       case 'number':
       case 'number':

+ 4 - 0
apps/app/src/server/service/config-manager/config-manager.ts

@@ -159,6 +159,10 @@ export class ConfigManager implements IConfigManager<ConfigKey, ConfigValues>, S
     };
     };
   }
   }
 
 
+  getManagedEnvVars(includeSecret = false): Record<string, string> {
+    return this.configLoader.getManagedEnvVars(includeSecret);
+  }
+
   /**
   /**
    * Set S2sMessagingServiceDelegator instance
    * Set S2sMessagingServiceDelegator instance
    * @param s2sMessagingService
    * @param s2sMessagingService

+ 2 - 2
apps/app/src/server/service/export.js

@@ -1,7 +1,7 @@
 import { toArrayIfNot } from '~/utils/array-utils';
 import { toArrayIfNot } from '~/utils/array-utils';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
-import ConfigLoader from './config-loader';
+import { configManager } from './config-manager';
 
 
 const logger = loggerFactory('growi:services:ExportService'); // eslint-disable-line no-unused-vars
 const logger = loggerFactory('growi:services:ExportService'); // eslint-disable-line no-unused-vars
 
 
@@ -101,7 +101,7 @@ class ExportService {
       url: this.appService.getSiteUrl(),
       url: this.appService.getSiteUrl(),
       passwordSeed,
       passwordSeed,
       exportedAt: new Date(),
       exportedAt: new Date(),
-      envVars: await ConfigLoader.getEnvVarsForDisplay(),
+      envVars: configManager.getManagedEnvVars(),
     };
     };
 
 
     writeStream.write(JSON.stringify(metaData));
     writeStream.write(JSON.stringify(metaData));

+ 6 - 0
packages/core/src/interfaces/config-manager.ts

@@ -74,4 +74,10 @@ export interface IConfigManager<K extends string, V extends Record<K, any>> {
     env: Record<K, V[K]>;
     env: Record<K, V[K]>;
     db: Record<K, V[K] | null>;
     db: Record<K, V[K] | null>;
   };
   };
+
+  /**
+   * Get environment variables managed with ConfigDefinitions
+   */
+  getManagedEnvVars(includeSecret: boolean): Record<string, string>;
+
 }
 }

+ 29 - 0
packages/core/src/utils/config-utils.ts

@@ -0,0 +1,29 @@
+import type { ConfigDefinition } from '../interfaces/config-manager';
+
+export function getManagedEnvVars(
+    definitions: ConfigDefinition<unknown>[],
+    includeSecret: boolean,
+): Record<string, string> {
+  const envVars: Record<string, string> = {};
+
+  for (const metadata of definitions) {
+    const { envVarName } = metadata;
+    if (envVarName == null) {
+      continue;
+    }
+
+    const envVarValue = process.env[envVarName];
+    if (envVarValue == null) {
+      continue;
+    }
+
+    // skip secret
+    if (metadata.isSecret && !includeSecret) {
+      continue;
+    }
+
+    envVars[envVarName] = envVarValue;
+  }
+
+  return envVars;
+}