This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 2872ee6  [OPENMEETINGS-2443] more pwd controls were added
2872ee6 is described below

commit 2872ee632159c785d69d0d431c79b61ceddef0bb
Author: Maxim Solodovnik <solomax...@gmail.com>
AuthorDate: Thu Sep 17 16:49:24 2020 +0700

    [OPENMEETINGS-2443] more pwd controls were added
---
 .../core/util/StrongPasswordValidator.java         |  6 ++-
 .../core/util/TestStrongPasswordValidator.java     | 43 +++++++++++++++-------
 .../db/dao/basic/ConfigurationDao.java             | 14 +++++++
 .../installation/ImportInitvalues.java             |  7 +++-
 .../openmeetings/util/OpenmeetingsVariables.java   | 20 ++++++++++
 .../org/apache/openmeetings/web/room/raw-video.js  | 12 +++---
 6 files changed, 80 insertions(+), 22 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java
index c2c7893..234e4b4 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/StrongPasswordValidator.java
@@ -19,6 +19,8 @@
 package org.apache.openmeetings.core.util;
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getMinPasswdLength;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isPwdCheckDigit;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isPwdCheckSpecial;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.isPwdCheckUpper;
 
 import java.util.Locale;
@@ -49,11 +51,11 @@ public class StrongPasswordValidator implements 
IValidator<String> {
        }
 
        private static boolean noDigit(String password) {
-               return password == null || !password.matches(".*\\d+.*");
+               return password == null || (isPwdCheckDigit() && 
!password.matches(".*\\d+.*"));
        }
 
        private static boolean noSymbol(String password) {
-               return password == null || 
!password.matches(".*[!@#$%^&*\\]\\[]+.*");
+               return password == null || (isPwdCheckSpecial() && 
!password.matches(".*[!@#$%^&*\\]\\[]+.*"));
        }
 
        private static boolean noUpperCase(String password) {
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/util/TestStrongPasswordValidator.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/util/TestStrongPasswordValidator.java
index d1b30d6..fd69c5f 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/util/TestStrongPasswordValidator.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/util/TestStrongPasswordValidator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.core.util;
 
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setPwdCheckDigit;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setPwdCheckSpecial;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.setPwdCheckUpper;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
@@ -39,7 +41,7 @@ import org.mockito.MockedStatic;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
-public class TestStrongPasswordValidator {
+class TestStrongPasswordValidator {
        private static User getUser(String login, String email) {
                User u = new User();
                u.setLogin(login);
@@ -48,6 +50,10 @@ public class TestStrongPasswordValidator {
                return u;
        }
 
+       private static User getUser3() {
+               return getUser("2222", "2222@local");
+       }
+
        private static Stream<Arguments> provideTestArgs() {
                List<Arguments> args = new ArrayList<>();
                for (boolean web : new boolean[] {true, false}) {
@@ -56,7 +62,7 @@ public class TestStrongPasswordValidator {
                        args.add(Arguments.of(null, web, u1, 5));
                        User u2 = getUser("2222", null);
                        args.add(Arguments.of("1", web, u2, 4));
-                       User u3 = getUser("2222", "2222@local");
+                       User u3 = getUser3();
                        args.add(Arguments.of("password", web, u3, 3));
                        args.add(Arguments.of("passWord", web, u3, 2));
                        args.add(Arguments.of("passWord222", web, u3, 2));
@@ -98,28 +104,39 @@ public class TestStrongPasswordValidator {
                });
        }
 
-
        @Test
        void testNoUpper() {
                try {
                        setPwdCheckUpper(false);
-                       runWrapped(() -> {
-                               int expectedErrors = 2;
-                               String pwd = "password";
-                               Validatable<String> pass = new 
Validatable<>(pwd);
-                               User u = getUser("2222", "2222@local");
-                               StrongPasswordValidator validator = new 
StrongPasswordValidator(u);
-                               validator.validate(pass);
-                               assertEquals(expectedErrors, 
pass.getErrors().size(), "Expected exactly " + expectedErrors + " errors, pass: 
'" + pwd + "', user: " + u);
-                       });
+                       test("password", false, getUser3(), 2);
                } finally {
                        setPwdCheckUpper(true);
                }
        }
 
+       @Test
+       void testNoDigit() {
+               try {
+                       setPwdCheckDigit(false);
+                       test("password", false, getUser3(), 2);
+               } finally {
+                       setPwdCheckDigit(true);
+               }
+       }
+
+       @Test
+       void testNoSpecial() {
+               try {
+                       setPwdCheckSpecial(false);
+                       test("password", false, getUser3(), 2);
+               } finally {
+                       setPwdCheckSpecial(true);
+               }
+       }
+
        @ParameterizedTest
        @MethodSource("provideTestArgs")
-       void testNull(String pwd, boolean web, User u, int expectedErrors) {
+       void test(String pwd, boolean web, User u, int expectedErrors) {
                runWrapped(() -> {
                        Validatable<String> pass = new Validatable<>(pwd);
                        StrongPasswordValidator validator = new 
StrongPasswordValidator(web, u);
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
index 82af13d..6fe4fff 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -295,6 +295,12 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                        case CONFIG_PASS_CHECK_UPPER:
                                reloadPwdCheckUpper();
                                break;
+                       case CONFIG_PASS_CHECK_DIGIT:
+                               reloadPwdCheckNumber();
+                               break;
+                       case CONFIG_PASS_CHECK_SPECIAL:
+                               reloadPwdCheckSpecial();
+                               break;
                        case CONFIG_DEFAULT_GROUP_ID:
                                reloadDefaultGroup();
                                break;
@@ -436,6 +442,14 @@ public class ConfigurationDao implements 
IDataProviderDao<Configuration> {
                setPwdCheckUpper(getBool(CONFIG_PASS_CHECK_UPPER, true));
        }
 
+       private void reloadPwdCheckNumber() {
+               setPwdCheckDigit(getBool(CONFIG_PASS_CHECK_DIGIT, true));
+       }
+
+       private void reloadPwdCheckSpecial() {
+               setPwdCheckSpecial(getBool(CONFIG_PASS_CHECK_SPECIAL, true));
+       }
+
        private void reloadDefaultGroup() {
                setDefaultGroup(getLong(CONFIG_DEFAULT_GROUP_ID, null));
        }
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
index 937adcb..60fe1cf 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -72,6 +72,8 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDI
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_AUDIO_RATE;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MP4_VIDEO_PRESET;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MYROOMS_ENABLED;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_CHECK_DIGIT;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_CHECK_SPECIAL;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_CHECK_UPPER;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_FFMPEG;
@@ -154,6 +156,7 @@ public class ImportInitvalues {
        private static final String VER_3_0_3 = "3.0.3";
        private static final String VER_3_3_0 = "3.3.0";
        private static final String VER_5_0_0 = "5.0.0";
+       private static final String VER_5_0_1 = "5.0.1";
        private static final String CLIENT_PLACEHOLDER = "<put your client_id>";
        private static final String SECRET_PLACEHOLDER = "<put your 
client_secret>";
        private static final String EMAIL_PARAM = "email";
@@ -385,7 +388,9 @@ public class ImportInitvalues {
                                + DEFAULT_CSP_STYLE + ")" + cspMore, VER_5_0_0);
                addCfg(list, CONFIG_SMTP_SSL, String.valueOf(false), 
Configuration.Type.BOOL, "Enable SSL", VER_5_0_0);
                addCfg(list, CONFIG_CSP_ENABLED, String.valueOf(true), 
Configuration.Type.BOOL, "Whether or not CSP secure headers are enabled", 
VER_5_0_0);
-               addCfg(list, CONFIG_PASS_CHECK_UPPER, String.valueOf(true), 
Configuration.Type.BOOL, "Whether or not Password MUST contain uppercase 
characters", "5.0.1");
+               addCfg(list, CONFIG_PASS_CHECK_UPPER, String.valueOf(true), 
Configuration.Type.BOOL, "Whether or not Password MUST contain uppercase 
characters", VER_5_0_1);
+               addCfg(list, CONFIG_PASS_CHECK_DIGIT, String.valueOf(true), 
Configuration.Type.BOOL, "Whether or not Password MUST contain numeric", 
VER_5_0_1);
+               addCfg(list, CONFIG_PASS_CHECK_SPECIAL, String.valueOf(true), 
Configuration.Type.BOOL, "Whether or not Password MUST contain special 
character", VER_5_0_1);
                return list;
        }
        public void loadConfiguration(InstallationConfig cfg) {
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
index 69d1b35..5455445 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -52,6 +52,8 @@ public class OpenmeetingsVariables {
        public static final String CONFIG_LOGIN_MIN_LENGTH = 
"user.login.minimum.length";
        public static final String CONFIG_PASS_MIN_LENGTH = 
"user.pass.minimum.length";
        public static final String CONFIG_PASS_CHECK_UPPER = 
"user.pass.check.upper";
+       public static final String CONFIG_PASS_CHECK_DIGIT = 
"user.pass.check.digit";
+       public static final String CONFIG_PASS_CHECK_SPECIAL = 
"user.pass.check.special";
        public static final String CONFIG_IGNORE_BAD_SSL = 
"oauth2.ignore.bad.ssl";
        public static final String CONFIG_REDIRECT_URL_FOR_EXTERNAL = 
"redirect.url.for.external.users";
        public static final String CONFIG_APPOINTMENT_REMINDER_MINUTES = 
"number.minutes.reminder.send";
@@ -130,6 +132,8 @@ public class OpenmeetingsVariables {
        private static int minLoginLength = USER_LOGIN_MINIMUM_LENGTH;
        private static int minPasswdLength = USER_PASSWORD_MINIMUM_LENGTH;
        private static boolean pwdCheckUpper = true;
+       private static boolean pwdCheckDigit = true;
+       private static boolean pwdCheckSpecial = true;
        private static JSONObject roomSettings = new JSONObject();
        private static boolean initComplete = false;
        private static long maxUploadSize = DEFAULT_MAX_UPLOAD_SIZE;
@@ -338,6 +342,22 @@ public class OpenmeetingsVariables {
                pwdCheckUpper = check;
        }
 
+       public static boolean isPwdCheckDigit() {
+               return pwdCheckDigit;
+       }
+
+       public static void setPwdCheckDigit(boolean check) {
+               pwdCheckDigit = check;
+       }
+
+       public static boolean isPwdCheckSpecial() {
+               return pwdCheckSpecial;
+       }
+
+       public static void setPwdCheckSpecial(boolean check) {
+               pwdCheckSpecial = check;
+       }
+
        public static Long getDefaultGroup() {
                return defaultGroup;
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
index 302146d..d6b0112 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js
@@ -169,12 +169,12 @@ var Video = (function() {
                                        level = MicLevel();
                                        level.meter(data.analyser, lm, 
_micActivity, OmUtil.error);
                                }
-                               data.rtcPeer.generateOffer(function(error, 
offerSdp) {
+                               data.rtcPeer.generateOffer(function(genErr, 
offerSdp) {
                                        if (state.disposed || true === 
data.rtcPeer.cleaned) {
                                                return;
                                        }
-                                       if (error) {
-                                               return OmUtil.error('Sender sdp 
offer error ' + error);
+                                       if (genErr) {
+                                               return OmUtil.error('Sender sdp 
offer error ' + genErr);
                                        }
                                        OmUtil.log('Invoking Sender SDP offer 
callback function');
                                        VideoManager.sendMessage({
@@ -216,12 +216,12 @@ var Video = (function() {
                                if (error) {
                                        return OmUtil.error(error);
                                }
-                               data.rtcPeer.generateOffer(function(error, 
offerSdp) {
+                               data.rtcPeer.generateOffer(function(genErr, 
offerSdp) {
                                        if (state.disposed || true === 
data.rtcPeer.cleaned) {
                                                return;
                                        }
-                                       if (error) {
-                                               return OmUtil.error('Receiver 
sdp offer error ' + error);
+                                       if (genErr) {
+                                               return OmUtil.error('Receiver 
sdp offer error ' + genErr);
                                        }
                                        OmUtil.log('Invoking Receiver SDP offer 
callback function');
                                        VideoManager.sendMessage({

Reply via email to