]> git.mxchange.org Git - juser-login-core.git/blobdiff - src/org/mxchange/jusercore/model/user/UserUtils.java
use interface, not class ...
[juser-login-core.git] / src / org / mxchange / jusercore / model / user / UserUtils.java
index 486e20f291a4bf8c4dc3a0431be8eeec7cfbed17..daa47e82df415c0cfade5d38d9aef931e87b66d6 100644 (file)
  */
 package org.mxchange.jusercore.model.user;
 
+import java.io.Serializable;
 import java.security.SecureRandom;
 import java.text.MessageFormat;
 import java.util.Random;
 import org.apache.commons.codec.digest.Crypt;
-import org.mxchange.jcore.BaseFrameworkSystem;
 import org.mxchange.jusercore.container.login.LoginContainer;
 
 /**
@@ -28,12 +28,12 @@ import org.mxchange.jusercore.container.login.LoginContainer;
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
-public class UserUtils extends BaseFrameworkSystem {
+public class UserUtils implements Serializable {
 
        /**
         * Password alphabet
         */
-       private static final String PASSWORD_ALPHABET = "abcdefghijklmnopqrstuvwxzyABCDEFGHIJKLMNOPQRSTUVWXZY0123456789-/?!_+#@";
+       private static final String PASSWORD_ALPHABET = "abcdefghijklmnopqrstuvwxzyABCDEFGHIJKLMNOPQRSTUVWXZY0123456789-/?!_+#@"; //NOI18N
 
        /**
         * Minimum password length
@@ -45,6 +45,11 @@ public class UserUtils extends BaseFrameworkSystem {
         */
        private static final Random RANDOM_NUMBER_GENERATOR;
 
+       /**
+        * Serial number
+        */
+       private static final long serialVersionUID = 18_356_847_120_972L;
+
        /**
         * Static initializer
         */
@@ -64,14 +69,14 @@ public class UserUtils extends BaseFrameworkSystem {
                // Parameter should be valid
                if (null == length) {
                        // Throw NPE
-                       throw new NullPointerException("length is null");
+                       throw new NullPointerException("length is null"); //NOI18N
                } else if (length < PASSWORD_MINIMUM_LENGTH) {
                        // To weak passwords
-                       throw new IllegalArgumentException(MessageFormat.format("Password length {0} is to short, minimum: {1}", length, PASSWORD_MINIMUM_LENGTH));
+                       throw new IllegalArgumentException(MessageFormat.format("Password length {0} is to short, minimum: {1}", length, PASSWORD_MINIMUM_LENGTH)); //NOI18N
                }
 
                // Init variable
-               String password = "";
+               StringBuilder password = new StringBuilder(length);
 
                // Start creating it
                for (int i = 0; i < length; i++) {
@@ -79,14 +84,14 @@ public class UserUtils extends BaseFrameworkSystem {
                        int pos = RANDOM_NUMBER_GENERATOR.nextInt(PASSWORD_ALPHABET.length());
 
                        // Get char at this position and add it to the final password
-                       password += String.valueOf(PASSWORD_ALPHABET.charAt(pos));
+                       password.append(String.valueOf(PASSWORD_ALPHABET.charAt(pos)));
                }
 
                // Should have the wanted length
-               assert (password.length() == length) : "Password length " + password.length() + " doesn't match requested: " + length;
+               assert (password.length() == length) : MessageFormat.format("Password length {0} doesn't match requested: {1}", password.length(), length); //NOI18N
 
                // Return it
-               return password;
+               return password.toString();
        }
 
        /**
@@ -100,10 +105,10 @@ public class UserUtils extends BaseFrameworkSystem {
                // Is it null or empty?
                if (null == userPassword) {
                        // Throw NPE
-                       throw new NullPointerException("userPassword is null");
+                       throw new NullPointerException("userPassword is null"); //NOI18N
                } else if (userPassword.isEmpty()) {
                        // Empty passwords are hardcoded not allowed due to security risks
-                       throw new IllegalArgumentException("userPassword is empty");
+                       throw new IllegalArgumentException("userPassword is empty"); //NOI18N
                }
 
                // Generate large number
@@ -122,8 +127,7 @@ public class UserUtils extends BaseFrameworkSystem {
        /**
         * Checks if password from container matches the updatedUser's password
         * <p>
-        * @param container   Container holding user instance and unencrypted
-        *                    password
+        * @param container Container holding user instance and unencrypted password
         * @param updatedUser Updated user instance from database
         * <p>
         * @return Whether the password matches
@@ -132,19 +136,19 @@ public class UserUtils extends BaseFrameworkSystem {
                // Validate parameters
                if (null == container) {
                        // Throw NPE
-                       throw new NullPointerException("container is null");
+                       throw new NullPointerException("container is null"); //NOI18N
                } else if (null == updatedUser) {
                        // And again NPE ...
-                       throw new NullPointerException("updatedUser is null");
+                       throw new NullPointerException("updatedUser is null"); //NOI18N
                } else if (container.getUser() == null) {
                        // NPE for user in container
-                       throw new NullPointerException("container.user is null");
+                       throw new NullPointerException("container.user is null"); //NOI18N
                } else if (container.getUserPassword() == null) {
                        // NPE for user password in container
-                       throw new NullPointerException("container.userPassword is null");
+                       throw new NullPointerException("container.userPassword is null"); //NOI18N
                } else if (container.getUserPassword().isEmpty()) {
                        // Empty password in container
-                       throw new IllegalArgumentException("container.userPassword is empty");
+                       throw new IllegalArgumentException("container.userPassword is empty"); //NOI18N
                }
 
                // First encrypt password
@@ -154,6 +158,36 @@ public class UserUtils extends BaseFrameworkSystem {
                return encryptedPassword.equals(updatedUser.getUserEncryptedPassword());
        }
 
+       /**
+        * Checks if password from container matches with from user instance.
+        * <p>
+        * @param container Container holding user instance and unencrypted password
+        * <p>
+        * @return Whether it maches
+        */
+       public static boolean ifPasswordMatches (final LoginContainer container) {
+               // Validate parameters
+               if (null == container) {
+                       // Throw NPE
+                       throw new NullPointerException("container is null"); //NOI18N
+               } else if (container.getUser() == null) {
+                       // NPE for user in container
+                       throw new NullPointerException("container.user is null"); //NOI18N
+               } else if (container.getUserPassword() == null) {
+                       // NPE for user password in container
+                       throw new NullPointerException("container.userPassword is null"); //NOI18N
+               } else if (container.getUserPassword().isEmpty()) {
+                       // Empty password in container
+                       throw new IllegalArgumentException("container.userPassword is empty"); //NOI18N
+               }
+
+               // First encrypt password
+               String encryptedPassword = Crypt.crypt(container.getUserPassword(), container.getUser().getUserEncryptedPassword());
+
+               // Is it matching?
+               return encryptedPassword.equals(container.getUser().getUserEncryptedPassword());
+       }
+
        /**
         * No instance from this class
         */