diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCRealmConstants.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCRealmConstants.java index 17e99510754..34cf55cf7c2 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCRealmConstants.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCRealmConstants.java @@ -63,7 +63,9 @@ public final class JDBCRealmConstants { public static final String GET_PROP_FOR_PROFILE = "GetUserPropertyForProfileSQL"; public static final String GET_PROP_FOR_PROFILE_WITH_ID = "GetUserPropertyForProfileWithIDSQL"; public static final String GET_USERS_FOR_PROP = "GetUserLisForPropertySQL"; + public static final String GET_USERS_FOR_CLAIM_VALUE = "GetUserListForClaimValueSQL"; public static final String GET_USERS_FOR_PROP_WITH_ID = "GetUserLisForPropertyWithIDSQL"; + public static final String GET_USERS_FOR_CLAIM_VALUE_WITH_ID = "GetUserListForClaimValueWithIDSQL"; public static final String GET_PAGINATED_USERS_FOR_PROP = "GetPaginatedUserLisForPropertySQL"; public static final String GET_PAGINATED_USERS_FOR_PROP_WITH_ID = "GetPaginatedUserLisForPropertyWithIDSQL"; public static final String GET_PAGINATED_USERS_FOR_PROP_MSSQL = "GetPaginatedUserLisForPropertySQL-mssql"; @@ -276,10 +278,18 @@ public final class JDBCRealmConstants { "WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND UM_USER_ATTRIBUTE.UM_ATTR_NAME =? " + "AND UM_USER_ATTRIBUTE.UM_ATTR_VALUE LIKE ? AND UM_USER_ATTRIBUTE.UM_PROFILE_ID=? " + "AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; + public static final String GET_USERS_FOR_CLAIM_VALUE_SQL = "SELECT DISTINCT UM_USER_NAME FROM UM_USER, UM_USER_ATTRIBUTE " + + "WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND UM_USER_ATTRIBUTE.UM_ATTR_NAME =? " + + "AND UM_USER_ATTRIBUTE.UM_ATTR_VALUE =? AND UM_USER_ATTRIBUTE.UM_PROFILE_ID=? " + + "AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; public static final String GET_USERS_FOR_PROP_WITH_ID_SQL = "SELECT DISTINCT UM_USER.UM_USER_ID FROM UM_USER, " + "UM_USER_ATTRIBUTE WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND UM_USER_ATTRIBUTE.UM_ATTR_NAME =? " + "AND UM_USER_ATTRIBUTE.UM_ATTR_VALUE LIKE ? AND UM_USER_ATTRIBUTE.UM_PROFILE_ID=? " + "AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; + public static final String GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL = "SELECT DISTINCT UM_USER.UM_USER_ID FROM " + + "UM_USER, UM_USER_ATTRIBUTE WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND " + + "UM_USER_ATTRIBUTE.UM_ATTR_NAME =? AND UM_USER_ATTRIBUTE.UM_ATTR_VALUE =? AND " + + "UM_USER_ATTRIBUTE.UM_PROFILE_ID=? AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; public static final String GET_PAGINATED_USERS_FOR_PROP_SQL = "SELECT UM_USER_NAME FROM UM_USER, " + "UM_USER_ATTRIBUTE WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND UM_USER_ATTRIBUTE.UM_ATTR_NAME " + "=? AND UM_USER_ATTRIBUTE.UM_ATTR_VALUE LIKE ? AND UM_USER_ATTRIBUTE.UM_PROFILE_ID=? AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=? ORDER BY UM_USER_NAME ASC LIMIT ? OFFSET ?"; diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreConstants.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreConstants.java index 003ced7f70c..efce50e2431 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreConstants.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreConstants.java @@ -409,13 +409,23 @@ public class JDBCUserStoreConstants { setAdvancedProperty(JDBCRealmConstants.GET_USERS_FOR_PROP, "Get User List for Property SQL", JDBCRealmConstants.GET_USERS_FOR_PROP_SQL, "", new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); + setAdvancedProperty(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE, "Get User List for Claim Value SQL", + JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_SQL, "", + new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); setAdvancedProperty(JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID, "Get User List for Property With ID SQL", JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID_SQL, "", new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); + setAdvancedProperty(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID, + "Get User List for Claim Value With ID SQL", JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL, "", + new Property[]{USER.getProperty(), SQL.getProperty(), FALSE.getProperty()}); setAdvancedProperty(JDBCCaseInsensitiveConstants.GET_USERS_FOR_PROP_WITH_ID_CASE_INSENSITIVE, "Get User List For Property With ID SQL With Case Insensitive Username", JDBCCaseInsensitiveConstants.GET_USERS_FOR_PROP_WITH_ID_SQL_CASE_INSENSITIVE, "", new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); + setAdvancedProperty(JDBCCaseInsensitiveConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_CASE_INSENSITIVE, + "Get User List For Claim Value With ID SQL With Case Insensitive Username", + JDBCCaseInsensitiveConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL_CASE_INSENSITIVE, "", + new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); setAdvancedProperty(JDBCRealmConstants.GET_PROFILE_NAMES, "Get Profile Names SQL", JDBCRealmConstants.GET_PROFILE_NAMES_SQL, "", new Property[] { USER.getProperty(), SQL.getProperty(), FALSE.getProperty() }); diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreManager.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreManager.java index 195414620ef..e0fbbcd268e 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreManager.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/JDBCUserStoreManager.java @@ -2978,24 +2978,27 @@ public String[] getUserListFromProperties(String property, String value, String if(value == null){ throw new IllegalArgumentException("Filter value cannot be null"); } + + String sqlStmt; if (value.contains(QUERY_FILTER_STRING_ANY)) { // This is to support LDAP like queries. Value having only * is restricted except one *. if (!value.matches("(\\*)\\1+")) { // Convert all the * to % except \*. value = value.replaceAll("(? list = new ArrayList(); try { dbConnection = getDBConnection(); - sqlStmt = realmConfig.getUserStoreProperty(JDBCRealmConstants.GET_USERS_FOR_PROP); prepStmt = dbConnection.prepareStatement(sqlStmt); prepStmt.setString(1, property); prepStmt.setString(2, value); diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCUserStoreManager.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCUserStoreManager.java index 1f518b1d824..587af32107d 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCUserStoreManager.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/UniqueIDJDBCUserStoreManager.java @@ -2299,27 +2299,35 @@ public List doGetUserListFromPropertiesWithID(String property, String va if (value == null) { throw new IllegalArgumentException("Filter value cannot be null"); } + + String sqlStmt; if (value.contains(QUERY_FILTER_STRING_ANY)) { // This is to support LDAP like queries. Value having only * is restricted except one *. if (!value.matches("(\\*)\\1+")) { // Convert all the * to % except \*. value = value.replaceAll("(? userList = new ArrayList<>(); try { dbConnection = getDBConnection(); - if (!isCaseSensitiveUsername() && UID.equals(property)) { - sqlStmt = realmConfig.getUserStoreProperty(JDBCCaseInsensitiveConstants. - GET_USERS_FOR_PROP_WITH_ID_CASE_INSENSITIVE); - } else { - sqlStmt = realmConfig.getUserStoreProperty(JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID); - } prepStmt = dbConnection.prepareStatement(sqlStmt); prepStmt.setString(1, property); prepStmt.setString(2, value); diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/caseinsensitive/JDBCCaseInsensitiveConstants.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/caseinsensitive/JDBCCaseInsensitiveConstants.java index 3f35033fa21..6bd4340e5a7 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/caseinsensitive/JDBCCaseInsensitiveConstants.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/jdbc/caseinsensitive/JDBCCaseInsensitiveConstants.java @@ -50,6 +50,8 @@ public class JDBCCaseInsensitiveConstants { public static final String GET_PROFILE_NAMES_FOR_USER_CASE_INSENSITIVE = "GetUserProfileNamesSQLCaseInsensitive"; public static final String GET_USERS_FOR_PROP_WITH_ID_CASE_INSENSITIVE = "GetUserListForPropertyWithIDSQLCaseInsensitive"; + public static final String GET_USERS_FOR_CLAIM_VALUE_WITH_ID_CASE_INSENSITIVE = + "GetUserListForClaimValueWithIDSQLCaseInsensitive"; public static final String GET_USERID_FROM_USERNAME_CASE_INSENSITIVE = "GetUserIDFromUserNameSQLCaseInsensitive"; public static final String GET_TENANT_ID_FROM_USERNAME_CASE_INSENSITIVE = "GetTenantIDFromUserNameSQLCaseInsensitive"; @@ -148,6 +150,10 @@ public class JDBCCaseInsensitiveConstants { "FROM UM_USER, UM_USER_ATTRIBUTE WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND " + "UM_USER_ATTRIBUTE.UM_ATTR_NAME =? AND LOWER(UM_USER_ATTRIBUTE.UM_ATTR_VALUE) LIKE LOWER(?) AND " + "UM_USER_ATTRIBUTE.UM_PROFILE_ID=? AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; + public static final String GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL_CASE_INSENSITIVE = "SELECT DISTINCT UM_USER" + + ".UM_USER_ID FROM UM_USER, UM_USER_ATTRIBUTE WHERE UM_USER_ATTRIBUTE.UM_USER_ID = UM_USER.UM_ID AND " + + "UM_USER_ATTRIBUTE.UM_ATTR_NAME =? AND LOWER(UM_USER_ATTRIBUTE.UM_ATTR_VALUE)=LOWER(?) AND " + + "UM_USER_ATTRIBUTE.UM_PROFILE_ID=? AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND UM_USER.UM_TENANT_ID=?"; public static final String GET_PROP_FOR_PROFILE_SQL_CASE_INSENSITIVE = "SELECT UM_ATTR_VALUE FROM " + "UM_USER_ATTRIBUTE, UM_USER WHERE UM_USER.UM_ID = UM_USER_ATTRIBUTE.UM_USER_ID AND LOWER(UM_USER" + ".UM_USER_NAME)=LOWER(?) AND UM_ATTR_NAME=? AND UM_PROFILE_ID=? AND UM_USER_ATTRIBUTE.UM_TENANT_ID=? AND " + diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/util/JDBCRealmUtil.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/util/JDBCRealmUtil.java index 717f73dffad..e5c9ff2cbcc 100644 --- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/util/JDBCRealmUtil.java +++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/util/JDBCRealmUtil.java @@ -195,14 +195,26 @@ public static Map getSQL(Map properties) { properties.put(JDBCRealmConstants.GET_USERS_FOR_PROP, JDBCRealmConstants.GET_USERS_FOR_PROP_SQL); } + if (!properties.containsKey(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE)) { + properties.put(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE, + JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_SQL); + } if (!properties.containsKey(JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID)) { properties.put(JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID, JDBCRealmConstants.GET_USERS_FOR_PROP_WITH_ID_SQL); } + if (!properties.containsKey(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID)) { + properties.put(JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID, + JDBCRealmConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL); + } if (!properties.containsKey(JDBCCaseInsensitiveConstants.GET_USERS_FOR_PROP_WITH_ID_CASE_INSENSITIVE)) { properties.put(JDBCCaseInsensitiveConstants.GET_USERS_FOR_PROP_WITH_ID_CASE_INSENSITIVE, JDBCCaseInsensitiveConstants.GET_USERS_FOR_PROP_WITH_ID_SQL_CASE_INSENSITIVE); } + if (!properties.containsKey(JDBCCaseInsensitiveConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_CASE_INSENSITIVE)) { + properties.put(JDBCCaseInsensitiveConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_CASE_INSENSITIVE, + JDBCCaseInsensitiveConstants.GET_USERS_FOR_CLAIM_VALUE_WITH_ID_SQL_CASE_INSENSITIVE); + } if (!properties.containsKey(JDBCRealmConstants.GET_PAGINATED_USERS_FOR_PROP)) { properties.put(JDBCRealmConstants.GET_PAGINATED_USERS_FOR_PROP, JDBCRealmConstants.GET_PAGINATED_USERS_FOR_PROP_SQL);