2
0
Эх сурвалжийг харах

WIP: abolish the old Config API

Yuki Takei 6 жил өмнө
parent
commit
15426340b6

+ 1 - 0
config/logger/config.dev.js

@@ -13,6 +13,7 @@ module.exports = {
   // 'growi:routes:login': 'debug',
   'growi:routes:login-passport': 'debug',
   'growi:service:PassportService': 'debug',
+  // 'growi:service:ConfigManager': 'debug',
   'growi:lib:search': 'debug',
   // 'growi:service:GlobalNotification': 'debug',
   // 'growi:lib:importer': 'debug',

+ 4 - 4
src/server/crowi/express-init.js

@@ -23,10 +23,10 @@ module.exports = function(crowi, app) {
   const env = crowi.node_env;
 
   // Old type config API
-  const config = crowi.getConfig();
   const Config = crowi.model('Config');
   // New type config API
   const configManager = crowi.configManager;
+  const getConfig = configManager.getConfig;
 
   const User = crowi.model('User');
   const lngDetector = new i18nMiddleware.LanguageDetector();
@@ -56,7 +56,7 @@ module.exports = function(crowi, app) {
 
   app.use((req, res, next) => {
     const now = new Date();
-    const tzoffset = -(config.crowi['app:timezone'] || 9) * 60;
+    const tzoffset = -(getConfig('crowi', 'app:timezone') || 9) * 60;
     // for datez
 
     const Page = crowi.model('Page');
@@ -127,7 +127,7 @@ module.exports = function(crowi, app) {
   });
 
   // passport
-  if (Config.isEnabledPassport(config)) {
+  if (Config.isEnabledPassport()) {
     debug('initialize Passport');
     app.use(passport.initialize());
     app.use(passport.session());
@@ -143,7 +143,7 @@ module.exports = function(crowi, app) {
   app.use(middlewares.csrfKeyGenerator());
 
   // switch loginChecker
-  if (Config.isEnabledPassport(config)) {
+  if (Config.isEnabledPassport()) {
     app.use(middlewares.loginCheckerForPassport);
   }
   else {

+ 15 - 14
src/server/crowi/index.js

@@ -73,7 +73,6 @@ Crowi.prototype.init = async function() {
   await this.setupDatabase();
   await this.setupModels();
   await this.setupSessionConfig();
-  await this.setupAppConfig();
   await this.setupConfigManager();
 
   await Promise.all([
@@ -180,23 +179,25 @@ Crowi.prototype.setupSessionConfig = function() {
   }));
 };
 
-Crowi.prototype.setupAppConfig = function() {
-  return new Promise((resolve, reject) => {
-    this.model('Config', require('../models/config')(this));
-    const Config = this.model('Config');
-    Config.loadAllConfig((err, doc) => {
-      if (err) {
-        return reject();
-      }
+// Crowi.prototype.setupAppConfig = function() {
+//   return new Promise((resolve, reject) => {
+//     this.model('Config', require('../models/config')(this));
+//     const Config = this.model('Config');
+//     Config.loadAllConfig((err, doc) => {
+//       if (err) {
+//         return reject();
+//       }
 
-      this.setConfig(doc);
+//       this.setConfig(doc);
 
-      return resolve();
-    });
-  });
-};
+//       return resolve();
+//     });
+//   });
+// };
 
 Crowi.prototype.setupConfigManager = async function() {
+  this.model('Config', require('../models/config')(this));
+
   const ConfigManager = require('../service/config-manager');
   this.configManager = new ConfigManager(this.model('Config'));
   return this.configManager.loadConfigs();

+ 48 - 51
src/server/models/config.js

@@ -139,21 +139,23 @@ module.exports = function(crowi) {
   }
 
   function getValueForCrowiNS(config, key) {
-    // return the default value if undefined
-    if (undefined === config.crowi || undefined === config.crowi[key]) {
-      return getDefaultCrowiConfigs()[key];
-    }
+    crowi.configManager.getConfig('crowi', key);
+    // // return the default value if undefined
+    // if (undefined === config.crowi || undefined === config.crowi[key]) {
+    //   return getDefaultCrowiConfigs()[key];
+    // }
 
-    return config.crowi[key];
+    // return config.crowi[key];
   }
 
   function getValueForMarkdownNS(config, key) {
-    // return the default value if undefined
-    if (undefined === config.markdown || undefined === config.markdown[key]) {
-      return getDefaultMarkdownConfigs()[key];
-    }
+    crowi.configManager.getConfig('markdown', key);
+    // // return the default value if undefined
+    // if (undefined === config.markdown || undefined === config.markdown[key]) {
+    //   return getDefaultMarkdownConfigs()[key];
+    // }
 
-    return config.markdown[key];
+    // return config.markdown[key];
   }
 
   /**
@@ -197,20 +199,20 @@ module.exports = function(crowi) {
   configSchema.statics.updateConfigCache = function(ns, config) {
     validateCrowi();
 
-    const originalConfig = crowi.getConfig();
-    const newNSConfig = originalConfig[ns] || {};
-    Object.keys(config).forEach((key) => {
-      if (config[key] || config[key] === '' || config[key] === false) {
-        newNSConfig[key] = config[key];
-      }
-    });
+    // const originalConfig = crowi.getConfig();
+    // const newNSConfig = originalConfig[ns] || {};
+    // Object.keys(config).forEach((key) => {
+    //   if (config[key] || config[key] === '' || config[key] === false) {
+    //     newNSConfig[key] = config[key];
+    //   }
+    // });
 
-    originalConfig[ns] = newNSConfig;
-    crowi.setConfig(originalConfig);
+    // originalConfig[ns] = newNSConfig;
+    // crowi.setConfig(originalConfig);
 
-    // initialize custom css/script
-    Config.initCustomCss(originalConfig);
-    Config.initCustomScript(originalConfig);
+    // // initialize custom css/script
+    // Config.initCustomCss(originalConfig);
+    // Config.initCustomScript(originalConfig);
   };
 
   // Execute only once for installing application
@@ -283,36 +285,36 @@ module.exports = function(crowi) {
   configSchema.statics.getConfig = function(callback) {
   };
 
-  configSchema.statics.loadAllConfig = function(callback) {
-    const Config = this;
+  // configSchema.statics.loadAllConfig = function(callback) {
+  //   const Config = this;
 
 
-    const config = {};
-    config.crowi = {}; // crowi namespace
+  //   const config = {};
+  //   config.crowi = {}; // crowi namespace
 
-    Config.find()
-      .sort({ ns: 1, key: 1 })
-      .exec((err, doc) => {
-        doc.forEach((el) => {
-          if (!config[el.ns]) {
-            config[el.ns] = {};
-          }
-          config[el.ns][el.key] = JSON.parse(el.value);
-        });
+  //   Config.find()
+  //     .sort({ ns: 1, key: 1 })
+  //     .exec((err, doc) => {
+  //       doc.forEach((el) => {
+  //         if (!config[el.ns]) {
+  //           config[el.ns] = {};
+  //         }
+  //         config[el.ns][el.key] = JSON.parse(el.value);
+  //       });
 
-        debug('Config loaded', config);
+  //       debug('Config loaded', config);
 
-        // initialize custom css/script
-        Config.initCustomCss(config);
-        Config.initCustomScript(config);
+  //       // initialize custom css/script
+  //       Config.initCustomCss(config);
+  //       Config.initCustomScript(config);
 
-        return callback(null, config);
-      });
-  };
+  //       return callback(null, config);
+  //     });
+  // };
 
-  configSchema.statics.appTitle = function(config) {
+  configSchema.statics.appTitle = function() {
     const key = 'app:title';
-    return getValueForCrowiNS(config, key) || 'GROWI';
+    return getValueForCrowiNS(null, key) || 'GROWI';
   };
 
   configSchema.statics.globalLang = function(config) {
@@ -320,14 +322,9 @@ module.exports = function(crowi) {
     return getValueForCrowiNS(config, key);
   };
 
-  configSchema.statics.isEnabledPassport = function(config) {
-    // always true if growi installed cleanly
-    if (Object.keys(config.crowi).length === 0) {
-      return true;
-    }
-
+  configSchema.statics.isEnabledPassport = function() {
     const key = 'security:isEnabledPassport';
-    return getValueForCrowiNS(config, key);
+    return getValueForCrowiNS(null, key);
   };
 
   configSchema.statics.isEnabledPassportLdap = function(config) {

+ 2 - 0
src/server/service/config-manager.js

@@ -20,6 +20,8 @@ class ConfigManager {
     this.configModel = configModel;
     this.configLoader = new ConfigLoader(this.configModel);
     this.configObject = null;
+
+    this.getConfig = this.getConfig.bind(this);
   }
 
   /**

+ 5 - 5
src/server/service/rest-qiita-API.js

@@ -19,9 +19,9 @@ class RestQiitaAPIService {
 
   constructor(crowi) {
     this.crowi = crowi;
-    this.config = crowi.getConfig();
-    this.team = this.config.crowi['importer:qiita:team_name'];
-    this.token = this.config.crowi['importer:qiita:access_token'];
+    this.configManager = crowi.configManager;
+    this.team = this.configManager.getConfig('crowi', 'importer:qiita:team_name');
+    this.token = this.configManager.getConfig('crowi', 'importer:qiita:access_token');
     this.axios = getAxios(this.team, this.token);
   }
 
@@ -31,8 +31,8 @@ class RestQiitaAPIService {
    * @param {string} token
    */
   async reset() {
-    this.team = this.config.crowi['importer:qiita:team_name'];
-    this.token = this.config.crowi['importer:qiita:access_token'];
+    this.team = this.configManager.getConfig('crowi', 'importer:qiita:team_name');
+    this.token = this.configManager.getConfig('crowi', 'importer:qiita:access_token');
     this.axios = getAxios(this.team, this.token);
   }
 

+ 5 - 3
src/server/util/importer.js

@@ -7,10 +7,12 @@
 module.exports = (crowi) => {
   const logger = require('@alias/logger')('growi:util:importer');
   const esa = require('esa-nodejs');
-  const config = crowi.getConfig();
   const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
   const restQiitaAPIService = crowi.getRestQiitaAPIService();
 
+  const configManager = crowi.configManager;
+  const getConfig = configManager.getConfig;
+
   const importer = {};
   let esaClient = {};
 
@@ -19,8 +21,8 @@ module.exports = (crowi) => {
    */
   importer.initializeEsaClient = () => {
     esaClient = esa({
-      team:        config.crowi['importer:esa:team_name'],
-      accessToken: config.crowi['importer:esa:access_token'],
+      team:        getConfig('crowi', 'importer:esa:team_name'),
+      accessToken: getConfig('crowi', 'importer:esa:access_token'),
     });
     logger.debug('initialize esa importer');
   };

+ 15 - 14
src/server/util/mailer.js

@@ -6,24 +6,25 @@ module.exports = function(crowi) {
   const debug = require('debug')('growi:lib:mailer');
   const nodemailer = require('nodemailer');
   const swig = require('swig-templates');
+
   const Config = crowi.model('Config');
-  const config = crowi.getConfig();
-  const mailConfig = {};
+  const configManager = crowi.configManager;
 
+  const mailConfig = {};
   let mailer = {};
 
   function createSMTPClient(option) {
     debug('createSMTPClient option', option);
     if (!option) {
       option = { // eslint-disable-line no-param-reassign
-        host: config.crowi['mail:smtpHost'],
-        port: config.crowi['mail:smtpPort'],
+        host: configManager.getConfig('crowi', 'mail:smtpHost'),
+        port: configManager.getConfig('crowi', 'mail:smtpPort'),
       };
 
-      if (config.crowi['mail:smtpUser'] && config.crowi['mail:smtpPassword']) {
+      if (configManager.getConfig('crowi', 'mail:smtpUser') && configManager.getConfig('crowi', 'mail:smtpPassword')) {
         option.auth = {
-          user: config.crowi['mail:smtpUser'],
-          pass: config.crowi['mail:smtpPassword'],
+          user: configManager.getConfig('crowi', 'mail:smtpUser'),
+          pass: configManager.getConfig('crowi', 'mail:smtpPassword'),
         };
       }
       if (option.port === 465) {
@@ -41,8 +42,8 @@ module.exports = function(crowi) {
   function createSESClient(option) {
     if (!option) {
       option = { // eslint-disable-line no-param-reassign
-        accessKeyId: config.crowi['aws:accessKeyId'],
-        secretAccessKey: config.crowi['aws:secretAccessKey'],
+        accessKeyId: configManager.getConfig('crowi', 'aws:accessKeyId'),
+        secretAccessKey: configManager.getConfig('crowi', 'aws:secretAccessKey'),
       };
     }
 
@@ -54,17 +55,17 @@ module.exports = function(crowi) {
   }
 
   function initialize() {
-    if (!config.crowi['mail:from']) {
+    if (!configManager.getConfig('crowi', 'mail:from')) {
       mailer = undefined;
       return;
     }
 
-    if (config.crowi['mail:smtpHost'] && config.crowi['mail:smtpPort']
+    if (configManager.getConfig('crowi', 'mail:smtpHost') && configManager.getConfig('crowi', 'mail:smtpPort')
     ) {
       // SMTP 設定がある場合はそれを優先
       mailer = createSMTPClient();
     }
-    else if (config.crowi['aws:accessKeyId'] && config.crowi['aws:secretAccessKey']) {
+    else if (configManager.getConfig('crowi', 'aws:accessKeyId') && configManager.getConfig('crowi', 'aws:secretAccessKey')) {
       // AWS 設定がある場合はSESを設定
       mailer = createSESClient();
     }
@@ -72,8 +73,8 @@ module.exports = function(crowi) {
       mailer = undefined;
     }
 
-    mailConfig.from = config.crowi['mail:from'];
-    mailConfig.subject = `${Config.appTitle(config)}からのメール`;
+    mailConfig.from = configManager.getConfig('crowi', 'mail:from');
+    mailConfig.subject = `${Config.appTitle()}からのメール`;
 
     debug('mailer initialized');
   }