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) {