From 840d2980ab5e69c8472089bd47281e06501662d9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 2 Sep 2016 17:55:55 +0200 Subject: [PATCH] Continued a bit: - introduced ifRegExFoundInString() which uses find() instead of matches() - added slash to password "alphabet" --- .../jusercore/model/user/UserUtils.java | 68 ++++++++++++++----- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/src/org/mxchange/jusercore/model/user/UserUtils.java b/src/org/mxchange/jusercore/model/user/UserUtils.java index b4484a1..52dd218 100644 --- a/src/org/mxchange/jusercore/model/user/UserUtils.java +++ b/src/org/mxchange/jusercore/model/user/UserUtils.java @@ -21,6 +21,7 @@ import java.security.SecureRandom; import java.text.MessageFormat; import java.util.Properties; import java.util.Random; +import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.codec.digest.Crypt; import org.apache.commons.codec.digest.DigestUtils; @@ -37,7 +38,7 @@ public class UserUtils implements Serializable { /** * Password alphabet */ - private static String PASSWORD_ALPHABET; + private static final String PASSWORD_ALPHABET; /** * Password alphabet parts @@ -119,7 +120,7 @@ public class UserUtils implements Serializable { */ public static double calculatePasswordScore (final String password) { // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: password=" + password + " - CALLED!"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: password=" + password + " - CALLED!"); //NOI18N // Should not be null if (null == password) { @@ -137,69 +138,69 @@ public class UserUtils implements Serializable { score += password.length() * calculateEntropyFactor(password) / 100; // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after length"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after length"); //NOI18N //password has 3 numbers - if (Pattern.matches("(.*[0-9].*[0-9].*[0-9].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[0-9].*[0-9].*[0-9].*)+", password)) { //NOI18N score += 5; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after 3 numbers"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after 3 numbers"); //NOI18N //password has 2 symbols - if (Pattern.matches("(.*[!,@,#,$,%,^,&,*,?,_,~,=,.,-,;,:].*[!,@,#,$,%,^,&,*,?,_,~,=,.,-,;,:].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[!,@,#,$,%,^,&,*,/,?,_,~,=,.,-,;,:].*[!,@,#,$,%,^,&,*,/,?,_,~,=,.,-,;,:].*)+", password)) { //NOI18N score += 5; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after 2 symbols"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after 2 symbols"); //NOI18N //password has Upper and Lower chars - if (Pattern.matches("(.*[a-z].*[A-Z])|([A-Z].*[a-z].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[a-z].*[A-Z])|([A-Z].*[a-z].*)+", password)) { //NOI18N score += 10; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after upper/lower"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after upper/lower"); //NOI18N //password has number and chars - if (Pattern.matches("(.*[a-zA-Z].*)+", password) && Pattern.matches("(.*[0-9].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[a-zA-Z].*)+", password) && ifRegExFoundInString("(.*[0-9].*)+", password)) { //NOI18N score += 15; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number+chars"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number+chars"); //NOI18N //password has number and symbol - if (Pattern.matches("(.*[!,@,#,$,%,^,&,*,?,_,~,=,.,-,;,:].*)+", password) && Pattern.matches("(.*[0-9].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[!,@,#,$,%,^,&,*,/,?,_,~,=,.,-,;,:].*)+", password) && ifRegExFoundInString("(.*[0-9].*)+", password)) { //NOI18N score += 15; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number+symbol"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number+symbol"); //NOI18N //password has char and symbol - if (Pattern.matches("(.*[!,@,#,$,%,^,&,*,?,_,~,=,.,-,;,:].*)+", password) && Pattern.matches("(.*[a-zA-Z].*)+", password)) { //NOI18N + if (ifRegExFoundInString("(.*[!,@,#,$,%,^,&,*,/,?,_,~,=,.,-,;,:].*)+", password) && ifRegExFoundInString("(.*[a-zA-Z].*)+", password)) { //NOI18N score += 15; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after char+symbol"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after char+symbol"); //NOI18N //password is just numbers or chars - if (Pattern.matches("^[a-zA-Z]+$", password) || Pattern.matches("^[0-9]+$", password)) { //NOI18N + if (ifRegExFoundInString("^[a-zA-Z]+$", password) || ifRegExFoundInString("^[0-9]+$", password)) { //NOI18N score -= 10; } // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number/char"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - after number/char"); //NOI18N // Larger than 100 is not allowed score = Math.max(Math.min(score, 100.0f), 0.0f); // Log message - System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - EXIT!"); + System.out.println(UserUtils.class.getSimpleName() + ".calculatePasswordScore: score=" + score + " - EXIT!"); //NOI18N // Return it return score; @@ -536,6 +537,37 @@ public class UserUtils implements Serializable { return ifPasswordMatches(container.getUserPassword(), container.getUser()); } + /** + * Checks if the regular expression is found in given string + *

+ * @param pattern Regular expression + * @param str String + *

+ * @return Whether it is found + */ + private static boolean ifRegExFoundInString (final String pattern, final String str) { + // Mus be valid parameters + if (null == pattern) { + // Throw NPE + throw new NullPointerException("pattern is null"); //NOI18N + } else if (pattern.isEmpty()) { + // Is empty + throw new IllegalArgumentException("pattern is empty"); //NOI18N + } else if (null == str) { + // Throw NPE + throw new NullPointerException("str is null"); //NOI18N + } + + // Compile pattern + Pattern r = Pattern.compile(pattern); + + // Get matcher + Matcher m = r.matcher(str); + + // Check if it is found + return m.find(); + } + /** * No instance from this class */ -- 2.39.5