|
Author: doogie
Date: Wed Apr 18 23:48:58 2012 New Revision: 1327737 URL: http://svn.apache.org/viewvc?rev=1327737&view=rev Log: OPTIMIZE: Refactored LoginServices. Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/login/LoginServices.java Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/login/LoginServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/login/LoginServices.java?rev=1327737&r1=1327736&r2=1327737&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/login/LoginServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/login/LoginServices.java Wed Apr 18 23:48:58 2012 @@ -153,19 +153,6 @@ public class LoginServices { } if (userLogin != null) { - String encodedPassword = useEncryption ? HashCrypt.getDigestHash(password, getHashType()) : password; - String encodedPasswordOldFunnyHexEncode = useEncryption ? HashCrypt.getDigestHashOldFunnyHexEncode(password, getHashType()) : password; - String encodedPasswordUsingDbHashType = encodedPassword; - - String currentPassword = userLogin.getString("currentPassword"); - if (useEncryption && currentPassword != null && currentPassword.startsWith("{")) { - // get encode according to the type in the database - String dbHashType = HashCrypt.getHashTypeFromPrefix(currentPassword); - if (dbHashType != null) { - encodedPasswordUsingDbHashType = HashCrypt.getDigestHash(password, dbHashType); - } - } - String ldmStr = UtilProperties.getPropertyValue("security.properties", "login.disable.minutes"); long loginDisableMinutes = 30; @@ -218,11 +205,7 @@ public class LoginServices { // if the password.accept.encrypted.and.plain property in security is set to true allow plain or encrypted passwords // if this is a system account don't bother checking the passwords // if externalAuth passed; this is run as well - if ((!authFatalError && externalAuth) || (userLogin.get("currentPassword") != null && - (HashCrypt.removeHashTypePrefix(encodedPassword).equals(HashCrypt.removeHashTypePrefix(currentPassword)) || - HashCrypt.removeHashTypePrefix(encodedPasswordOldFunnyHexEncode).equals(HashCrypt.removeHashTypePrefix(currentPassword)) || - HashCrypt.removeHashTypePrefix(encodedPasswordUsingDbHashType).equals(HashCrypt.removeHashTypePrefix(currentPassword)) || - ("true".equals(UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain")) && password.equals(userLogin.getString("currentPassword")))))) { + if ((!authFatalError && externalAuth) || checkPassword(userLogin.getString("currentPassword"), useEncryption, password)) { Debug.logVerbose("[LoginServices.userLogin] : Password Matched", module); // update the hasLoggedOut flag @@ -254,7 +237,7 @@ public class LoginServices { result.put("userLogin", userLogin); result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS); } else { - Debug.logInfo("Entered password [" + encodedPassword + "], Entered password OldFunnyHexEncode [" + encodedPasswordOldFunnyHexEncode + "], db password [" + userLogin.getString("currentPassword") + "]", module); + //Debug.logInfo("Entered password [" + encodedPassword + "], Entered password OldFunnyHexEncode [" + encodedPasswordOldFunnyHexEncode + "], db password [" + userLogin.getString("currentPassword") + "]", module); // password is incorrect, but this may be the result of a stale cache entry, // so lets clear the cache and try again if this is the first pass @@ -906,33 +889,14 @@ public class LoginServices { String errMsg = null; if (!ignoreCurrentPassword) { - - String encodedPassword = useEncryption ? HashCrypt.getDigestHash(currentPassword, getHashType()) : currentPassword; - String encodedPasswordOldFunnyHexEncode = useEncryption ? HashCrypt.getDigestHashOldFunnyHexEncode(currentPassword, getHashType()) : currentPassword; - String encodedPasswordUsingDbHashType = encodedPassword; - - String oldPassword = userLogin.getString("currentPassword"); - if (useEncryption && oldPassword != null && oldPassword.startsWith("{")) { - // get encode according to the type in the database - String dbHashType = HashCrypt.getHashTypeFromPrefix(oldPassword); - if (dbHashType != null) { - encodedPasswordUsingDbHashType = HashCrypt.getDigestHash(currentPassword, dbHashType); - } - } - // if the password.accept.encrypted.and.plain property in security is set to true allow plain or encrypted passwords // if this is a system account don't bother checking the passwords - boolean passwordMatches = (oldPassword != null && - (HashCrypt.removeHashTypePrefix(encodedPassword).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || - HashCrypt.removeHashTypePrefix(encodedPasswordOldFunnyHexEncode).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || - HashCrypt.removeHashTypePrefix(encodedPasswordUsingDbHashType).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || - ("true".equals(UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain")) && currentPassword.equals(oldPassword)))); - + boolean passwordMatches = checkPassword(userLogin.getString("currentPassword"), useEncryption, currentPassword); if ((currentPassword == null) || (userLogin != null && currentPassword != null && !passwordMatches)) { errMsg = UtilProperties.getMessage(resource,"loginservices.old_password_not_correct_reenter", locale); errorMessageList.add(errMsg); } - if (currentPassword.equals(newPassword) || encodedPassword.equals(newPassword)) { + if (checkPassword(userLogin.getString("currentPassword"), useEncryption, newPassword)) { errMsg = UtilProperties.getMessage(resource,"loginservices.new_password_is_equal_to_old_password", locale); errorMessageList.add(errMsg); } @@ -1015,4 +979,33 @@ public class LoginServices { return hashType; } + + private static boolean checkPassword(String oldPassword, boolean useEncryption, String currentPassword) { + boolean passwordMatches = false; + if (oldPassword != null) { + if (useEncryption) { + String encodedPassword = HashCrypt.getDigestHash(currentPassword, getHashType()); + String encodedPasswordOldFunnyHexEncode = HashCrypt.getDigestHashOldFunnyHexEncode(currentPassword, getHashType()); + String encodedPasswordUsingDbHashType = encodedPassword; + if (oldPassword.startsWith("{")) { + // get encode according to the type in the database + String dbHashType = HashCrypt.getHashTypeFromPrefix(oldPassword); + if (dbHashType != null) { + encodedPasswordUsingDbHashType = HashCrypt.getDigestHash(currentPassword, dbHashType); + } + } + passwordMatches = HashCrypt.removeHashTypePrefix(encodedPassword).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || + HashCrypt.removeHashTypePrefix(encodedPasswordOldFunnyHexEncode).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || + HashCrypt.removeHashTypePrefix(encodedPasswordUsingDbHashType).equals(HashCrypt.removeHashTypePrefix(oldPassword)) || + ("true".equals(UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain")) && oldPassword.equals(currentPassword)); + //passwordMatches = HashCrypt.comparePassword(oldPassword, getHashType(), currentPassword); + } else { + passwordMatches = oldPassword.equals(currentPassword); + } + } + if (!passwordMatches && "true".equals(UtilProperties.getPropertyValue("security.properties", "password.accept.encrypted.and.plain"))) { + passwordMatches = currentPassword.equals(oldPassword); + } + return passwordMatches; + } } |
| Free forum by Nabble | Edit this page |
