diff --git a/server/dbconf/derby/derby-user.xml b/server/dbconf/derby/derby-user.xml index ffb19b3e1b..19f5347115 100644 --- a/server/dbconf/derby/derby-user.xml +++ b/server/dbconf/derby/derby-user.xml @@ -33,7 +33,7 @@ FROM PERSON ID = #{id} - AND USERNAME = #{username} + AND LOWER(USERNAME) = LOWER(#{username}) diff --git a/server/dbconf/mysql/mysql-user.xml b/server/dbconf/mysql/mysql-user.xml index cc3f5fc3d1..1b0ea623d2 100644 --- a/server/dbconf/mysql/mysql-user.xml +++ b/server/dbconf/mysql/mysql-user.xml @@ -33,7 +33,7 @@ FROM PERSON AND ID = #{id} - AND USERNAME = #{username} + AND LOWER(USERNAME) = LOWER(#{username}) diff --git a/server/dbconf/oracle/oracle-user.xml b/server/dbconf/oracle/oracle-user.xml index feded8251b..26aa1b9eec 100644 --- a/server/dbconf/oracle/oracle-user.xml +++ b/server/dbconf/oracle/oracle-user.xml @@ -33,7 +33,7 @@ FROM PERSON ID = #{id} - AND USERNAME = #{username} + AND LOWER(USERNAME) = LOWER(#{username}) diff --git a/server/dbconf/postgres/postgres-user.xml b/server/dbconf/postgres/postgres-user.xml index f9dd0d8557..aad9ebece7 100644 --- a/server/dbconf/postgres/postgres-user.xml +++ b/server/dbconf/postgres/postgres-user.xml @@ -29,7 +29,7 @@ FROM PERSON AND ID = #{id} - AND USERNAME = #{username} + AND LOWER(USERNAME) = LOWER(#{username}) diff --git a/server/src/com/mirth/connect/server/controllers/DefaultUserController.java b/server/src/com/mirth/connect/server/controllers/DefaultUserController.java index 26fef00e39..dbd9a89492 100644 --- a/server/src/com/mirth/connect/server/controllers/DefaultUserController.java +++ b/server/src/com/mirth/connect/server/controllers/DefaultUserController.java @@ -103,7 +103,16 @@ public User getUser(Integer userId, String userName) throws ControllerException User user = new User(); user.setId(userId); user.setUsername(userName); - return SqlConfig.getInstance().getReadOnlySqlSessionManager().selectOne("User.getUser", user); + List list = SqlConfig.getInstance().getReadOnlySqlSessionManager().selectList("User.getUser", user); + // If we have multiple results, we want to prefer the case sensitive match + if (userName != null) { + for (User u : list) { + if (userName.equals(u.getUsername())) { + return u; + } + } + } + return list.isEmpty() ? null : list.get(0); } catch (PersistenceException e) { throw new ControllerException(e); } finally { @@ -333,7 +342,7 @@ public LoginStatus authorizeUser(String username, String plainPassword, String s if (loginRequirementsChecker.isPasswordExpired(passwordTime, currentTime)) { // Let 0 be infinite grace period, -1 be no grace period if (passwordRequirements.getGracePeriod() == 0) { - loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS_GRACE_PERIOD, "Your password has expired. Please change your password now."); + loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS_GRACE_PERIOD, "Your password has expired. Please change your password now.", validUser.getUsername()); } else if (passwordRequirements.getGracePeriod() > 0) { // If there has never been a grace time, start it now long gracePeriodStartTime; @@ -351,7 +360,7 @@ public LoginStatus authorizeUser(String username, String plainPassword, String s long graceTimeRemaining = loginRequirementsChecker.getGraceTimeRemaining(gracePeriodStartTime, currentTime); if (graceTimeRemaining > 0) { - loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS_GRACE_PERIOD, "Your password has expired. You are required to change your password in the next " + loginRequirementsChecker.getPrintableGraceTimeRemaining(graceTimeRemaining) + "."); + loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS_GRACE_PERIOD, "Your password has expired. You are required to change your password in the next " + loginRequirementsChecker.getPrintableGraceTimeRemaining(graceTimeRemaining) + ".", validUser.getUsername()); } } @@ -374,7 +383,7 @@ public LoginStatus authorizeUser(String username, String plainPassword, String s // If nothing failed (loginStatus != null), set SUCCESS now if (loginStatus == null) { - loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS, ""); + loginStatus = new LoginStatus(LoginStatus.Status.SUCCESS, "", validUser.getUsername()); // Clear the user's grace period if one exists if (validUser.getGracePeriodStart() != null) {