Procházet zdrojové kódy

add user upper limit check

Seiya Tashiro před 7 roky
rodič
revize
d495efbdc8
1 změnil soubory, kde provedl 18 přidání a 3 odebrání
  1. 18 3
      src/server/models/external-account.js

+ 18 - 3
src/server/models/external-account.js

@@ -92,9 +92,17 @@ class ExternalAccount {
               nameToBeRegistered = '';
             }
 
-            // create a new User with STATUS_ACTIVE
-            debug(`ExternalAccount '${accountId}' is not found, it is going to be registered.`);
-            return User.createUser(nameToBeRegistered, usernameToBeRegistered, mailToBeRegistered, undefined, undefined, User.STATUS_ACTIVE);
+            User.findAllUsers({status: User.statusActivate})
+            .then(userData => {
+              const userUpperLimit = Number(ExternalAccount.crowi.env['USER_UPPER_LIMIT']);
+              const activeUsers = userData.length;
+              if (userUpperLimit !== 0 && userUpperLimit <= activeUsers) {
+                throw new UserUpperLimitException('ユーザーが上限に達したため登録できません。');
+              }
+              // create a new User with STATUS_ACTIVE
+              debug(`ExternalAccount '${accountId}' is not found, it is going to be registered.`);
+              return User.createUser(nameToBeRegistered, usernameToBeRegistered, mailToBeRegistered, undefined, undefined, User.STATUS_ACTIVE);
+            });
           })
           .then(newUser => {
             return this.associate(providerType, accountId, newUser);
@@ -155,6 +163,13 @@ class DuplicatedUsernameException {
   }
 }
 
+class UserUpperLimitException {
+  constructor(message) {
+    this.name = this.constructor.name;
+    this.message = message;
+  }
+}
+
 module.exports = function(crowi) {
   ExternalAccount.crowi = crowi;
   schema.loadClass(ExternalAccount);