Procházet zdrojové kódy

Merge remote-tracking branch 'origin/imprv/abolish-old-config-api' into imprv/abolish-crowi-classic-auth

# Conflicts:
#	src/server/models/user.js
Yuki Takei před 6 roky
rodič
revize
72775e454e

+ 69 - 0
src/migrations/20190618104011-add-config-app-installed.js

@@ -0,0 +1,69 @@
+require('module-alias/register');
+const logger = require('@alias/logger')('growi:migrate:add-config-app-installed');
+
+const mongoose = require('mongoose');
+const config = require('@root/config/migrate');
+
+function getModel(modelName) {
+  if (mongoose.modelNames().includes(modelName)) {
+    return mongoose.model(modelName);
+  }
+  return null;
+}
+
+/**
+ * BEFORE
+ *   - Config document { ns: 'crowi', key: 'app:installed' } does not exist
+ * AFTER
+ *   - Config document { ns: 'crowi', key: 'app:installed' } is created
+ *     - value will be true if one or more users exist
+ *     - value will be false if no users exist
+ */
+module.exports = {
+
+  async up(db) {
+    logger.info('Apply migration');
+    mongoose.connect(config.mongoUri, config.mongodb.options);
+
+    const Config = getModel('Config') || require('@server/models/config')();
+    const User = getModel('User') || require('@server/models/user')();
+
+    // find 'app:siteUrl'
+    const appInstalled = await Config.findOne({
+      ns: 'crowi',
+      key: 'app:installed',
+    });
+    // exit if exists
+    if (appInstalled != null) {
+      logger.info('\'app:appInstalled\' is already exists. This migration terminates without any changes.');
+      return;
+    }
+
+    const userCount = await User.count();
+
+    if (userCount > 0) {
+      await Config.create({
+        ns: 'crowi',
+        key: 'app:installed',
+        value: true,
+      });
+    }
+
+    logger.info('Migration has successfully applied');
+  },
+
+  async down(db) {
+    logger.info('Undo migration');
+    mongoose.connect(config.mongoUri, config.mongodb.options);
+
+    const Config = getModel('Config') || require('@server/models/config')();
+
+    // remote 'app:siteUrl'
+    await Config.findOneAndDelete({
+      ns: 'crowi',
+      key: 'app:installed',
+    });
+
+    logger.info('Migration has successfully undoed');
+  },
+};

+ 10 - 7
src/server/models/user.js

@@ -79,16 +79,16 @@ module.exports = function(crowi) {
     validateCrowi();
 
     const Config = crowi.model('Config');
+    const configManager = crowi.configManager;
 
-
-    const config = crowi.getConfig();
-
-    if (!config.crowi) {
+    const isInstalled = configManager.getConfig('crowi', 'app:installed');
+    if (!isInstalled) {
       return STATUS_ACTIVE; // is this ok?
     }
 
     // status decided depends on registrationMode
-    switch (config.crowi['security:registrationMode']) {
+    const registrationMode = configManager.getConfig('crowi', 'security:registrationMode');
+    switch (registrationMode) {
       case Config.SECURITY_REGISTRATION_MODE_OPEN:
         return STATUS_ACTIVE;
       case Config.SECURITY_REGISTRATION_MODE_RESTRICTED:
@@ -620,6 +620,8 @@ module.exports = function(crowi) {
   userSchema.statics.createUsersByInvitation = function(emailList, toSendEmail, callback) {
     validateCrowi();
 
+    const configManager = crowi.configManager;
+
     const User = this;
     const createdUserList = [];
     const mailer = crowi.getMailer();
@@ -663,7 +665,7 @@ module.exports = function(crowi) {
           newUser.createdAt = Date.now();
           newUser.status = STATUS_INVITED;
 
-          const globalLang = crowi.configManager.getConfig('crowi', 'app:globalLang');
+          const globalLang = configManager.getConfig('crowi', 'app:globalLang');
           if (globalLang != null) {
             newUser.lang = globalLang;
           }
@@ -759,7 +761,8 @@ module.exports = function(crowi) {
       newUser.setPassword(password);
     }
 
-    const globalLang = crowi.configManager.getConfig('crowi', 'app:globalLang');
+    const configManager = crowi.configManager;
+    const globalLang = configManager.getConfig('crowi', 'app:globalLang');
     if (globalLang != null) {
       newUser.lang = globalLang;
     }