Skip to content

Commit

Permalink
fix suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
Yoshani committed Jul 23, 2024
1 parent 76b1b8a commit 012de8e
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 122 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.carbon.identity.entitlement.dao;

/**
* DB related constant values
* DB related constant values.
*/
public class DAOConstants {

Expand All @@ -28,6 +29,7 @@ private DAOConstants() {

public static final String LIMIT = "LIMIT";
public static final String KEY = "KEY";
public static final String STATUS_COUNT = "COUNT";

public static class EntitlementTableColumns {

Expand Down Expand Up @@ -65,17 +67,17 @@ private EntitlementTableColumns() {
// IDN_XACML_POLICY_SET_REFERENCE table
public static final String SET_REFERENCE = "SET_REFERENCE";

// IND_XACML_SUBSCRIBER table
// IDN_XACML_SUBSCRIBER table
public static final String SUBSCRIBER_ID = "SUBSCRIBER_ID";
public static final String ENTITLEMENT_MODULE_NAME = "ENTITLEMENT_MODULE_NAME";

// IND_XACML_SUBSCRIBER_PROPERTY table
// IDN_XACML_SUBSCRIBER_PROPERTY table
public static final String PROPERTY_ID = "PROPERTY_ID";
public static final String DISPLAY_NAME = "DISPLAY_NAME";
public static final String IS_REQUIRED = "IS_REQUIRED";
public static final String DISPLAY_ORDER = "DISPLAY_ORDER";
public static final String IS_SECRET = "IS_SECRET";
public static final String MODULE = "MODULE";
public static final String MODULE = "PROPERTY_MODULE";
public static final String PROPERTY_VALUE = "PROPERTY_VALUE";

// IDN_XACML_STATUS table
Expand All @@ -87,15 +89,14 @@ private EntitlementTableColumns() {
public static final String TIME_INSTANCE = "TIME_INSTANCE";
public static final String MESSAGE = "MESSAGE";
public static final String POLICY_VERSION = "POLICY_VERSION";
public static final String STATUS_COUNT = "COUNT";

// IDN_XACML_CONFIG table
public static final String CONFIG_KEY = "CONFIG_KEY";
public static final String CONFIG_VALUE = "CONFIG_VALUE";
}

/**
* SQL queries for XACML policy storage and management
* SQL queries for XACML policy storage and management.
*/
public static class SQLQueries {

Expand All @@ -104,7 +105,7 @@ private SQLQueries() {
}

/**
* DB queries related to PAP policy store
* DB queries related to PAP policy store.
*/
public static final String CREATE_PAP_POLICY_SQL = "INSERT INTO IDN_XACML_POLICY (POLICY_ID, VERSION, " +
"TENANT_ID, IS_IN_PDP, IS_IN_PAP, POLICY, IS_ACTIVE, POLICY_TYPE, POLICY_EDITOR, POLICY_ORDER, " +
Expand All @@ -115,7 +116,7 @@ private SQLQueries() {
"(REFERENCE, POLICY_ID, VERSION, TENANT_ID) VALUES (:REFERENCE;, :POLICY_ID;, :VERSION;, :TENANT_ID;)";
public static final String CREATE_PAP_POLICY_SET_REFS_SQL = "INSERT INTO IDN_XACML_POLICY_SET_REFERENCE " +
"(SET_REFERENCE, POLICY_ID, VERSION, TENANT_ID) VALUES (:SET_REFERENCE;, :POLICY_ID;, :VERSION;, " +
":TENANT_ID);";
":TENANT_ID;)";
public static final String CREATE_PAP_POLICY_ATTRIBUTES_SQL = "INSERT INTO IDN_XACML_POLICY_ATTRIBUTE " +
"(ATTRIBUTE_ID, ATTRIBUTE_VALUE, DATA_TYPE, CATEGORY, POLICY_ID, VERSION, TENANT_ID) VALUES " +
"(:ATTRIBUTE_ID;, :ATTRIBUTE_VALUE;, :DATA_TYPE;, :CATEGORY;, :POLICY_ID;, :VERSION;, :TENANT_ID;)";
Expand All @@ -138,8 +139,8 @@ private SQLQueries() {
"SELECT DATA_ORDER, DATA FROM IDN_XACML_POLICY_EDITOR_DATA WHERE POLICY_ID=:POLICY_ID; AND " +
"VERSION=:VERSION; AND TENANT_ID=:TENANT_ID;";
public static final String GET_PAP_POLICY_META_DATA_SQL = "SELECT ATTRIBUTE_ID, ATTRIBUTE_VALUE, DATA_TYPE, " +
"CATEGORY FROM IDN_XACML_POLICY_ATTRIBUTE WHERE POLICY_ID=:POLICY_ID; AND VERSION=:VERSION; " +
"AND TENANT_ID=:TENANT_ID;";
"CATEGORY FROM IDN_XACML_POLICY_ATTRIBUTE WHERE POLICY_ID=:POLICY_ID; " +
"AND VERSION=:VERSION; AND TENANT_ID=:TENANT_ID;";
public static final String GET_PAP_POLICY_BY_VERSION_SQL = "SELECT POLICY_ID, LAST_MODIFIED_TIME, " +
"LAST_MODIFIED_USER, IS_ACTIVE, POLICY_ORDER, POLICY_TYPE, POLICY_EDITOR, POLICY, TENANT_ID, VERSION " +
"FROM IDN_XACML_POLICY WHERE IS_IN_PAP = :IS_IN_PAP; AND TENANT_ID = :TENANT_ID; AND " +
Expand All @@ -163,7 +164,7 @@ private SQLQueries() {
"AND VERSION=:VERSION;";

/**
* DB queries related to PDP policy store
* DB queries related to PDP policy store.
*/
public static final String CREATE_POLICY_COMBINING_ALGORITHM_SQL = "INSERT INTO IDN_XACML_CONFIG " +
"(CONFIG_VALUE, TENANT_ID, CONFIG_KEY) VALUES (:CONFIG_VALUE;, :TENANT_ID;, :CONFIG_KEY;)";
Expand All @@ -181,7 +182,7 @@ private SQLQueries() {
public static final String GET_ACTIVE_STATUS_AND_ORDER_SQL = "SELECT IS_ACTIVE, POLICY_ORDER FROM " +
"IDN_XACML_POLICY WHERE POLICY_ID=:POLICY_ID; AND TENANT_ID=:TENANT_ID; AND IS_IN_PDP=:IS_IN_PDP;";
public static final String GET_POLICY_COMBINING_ALGORITHM_SQL =
"SELECT CONFIG_VALUE FROM IDN_XACML_CONFIG WHERE TENANT_ID=:TENANT_ID; AND CONFIG_KEY=:CONFIG_KEY;";
"SELECT CONFIG_VALUE FROM IDN_XACML_CONFIG WHERE CONFIG_KEY=:CONFIG_KEY; AND TENANT_ID=:TENANT_ID;";
public static final String UPDATE_ACTIVE_STATUS_SQL =
"UPDATE IDN_XACML_POLICY SET IS_ACTIVE=:IS_ACTIVE; WHERE POLICY_ID=:POLICY_ID; " +
"AND TENANT_ID=:TENANT_ID; AND VERSION=:VERSION;";
Expand All @@ -197,27 +198,27 @@ private SQLQueries() {
"IS_ACTIVE=:IS_ACTIVE;, POLICY_ORDER=:POLICY_ORDER; WHERE POLICY_ID=:POLICY_ID; AND " +
"TENANT_ID=:TENANT_ID; AND VERSION=:VERSION;";
public static final String UPDATE_POLICY_COMBINING_ALGORITHM_SQL = "UPDATE IDN_XACML_CONFIG SET " +
"CONFIG_VALUE=:CONFIG_VALUE; WHERE TENANT_ID=:TENANT_ID; AND CONFIG_KEY=:CONFIG_KEY;";
"CONFIG_VALUE=:CONFIG_VALUE; WHERE CONFIG_KEY=:CONFIG_KEY; AND TENANT_ID=:TENANT_ID;";
public static final String DELETE_UNUSED_POLICY_SQL =
"DELETE FROM IDN_XACML_POLICY WHERE POLICY_ID=:POLICY_ID; " +
"AND TENANT_ID=:TENANT_ID; AND IS_IN_PAP=:IS_IN_PAP; AND IS_IN_PDP=:IS_IN_PDP;";

/**
* DB queries related to subscribers
* DB queries related to subscribers.
*/
public static final String CREATE_SUBSCRIBER_SQL =
"INSERT INTO IDN_XACML_SUBSCRIBER (SUBSCRIBER_ID, TENANT_ID, " +
"ENTITLEMENT_MODULE_NAME) VALUES (:SUBSCRIBER_ID;,:TENANT_ID;,:ENTITLEMENT_MODULE_NAME;)";
public static final String CREATE_SUBSCRIBER_PROPERTIES_SQL = "INSERT INTO IDN_XACML_SUBSCRIBER_PROPERTY " +
"(PROPERTY_ID, DISPLAY_NAME, PROPERTY_VALUE, IS_REQUIRED, DISPLAY_ORDER, IS_SECRET, MODULE, SUBSCRIBER_ID, " +
"(PROPERTY_ID, DISPLAY_NAME, PROPERTY_VALUE, IS_REQUIRED, DISPLAY_ORDER, IS_SECRET, PROPERTY_MODULE, SUBSCRIBER_ID, " +
"TENANT_ID) VALUES (:PROPERTY_ID;, :DISPLAY_NAME;, :PROPERTY_VALUE;, :IS_REQUIRED;, :DISPLAY_ORDER;, " +
":IS_SECRET;, :MODULE;, :SUBSCRIBER_ID;, :TENANT_ID;)";
":IS_SECRET;, :PROPERTY_MODULE;, :SUBSCRIBER_ID;, :TENANT_ID;)";
public static final String GET_SUBSCRIBER_EXISTENCE_SQL =
"SELECT SUBSCRIBER_ID FROM IDN_XACML_SUBSCRIBER WHERE SUBSCRIBER_ID=:SUBSCRIBER_ID; AND " +
"TENANT_ID=:TENANT_ID;";
"SELECT SUBSCRIBER_ID FROM IDN_XACML_SUBSCRIBER WHERE SUBSCRIBER_ID=:SUBSCRIBER_ID; " +
"AND TENANT_ID=:TENANT_ID;";
public static final String GET_SUBSCRIBER_SQL = "SELECT s.SUBSCRIBER_ID, s.TENANT_ID, s" +
".ENTITLEMENT_MODULE_NAME, p.PROPERTY_ID, p.DISPLAY_NAME, p.PROPERTY_VALUE, p.IS_REQUIRED, " +
"p.DISPLAY_ORDER, p.IS_SECRET, p.MODULE FROM IDN_XACML_SUBSCRIBER s INNER JOIN " +
"p.DISPLAY_ORDER, p.IS_SECRET, p.PROPERTY_MODULE FROM IDN_XACML_SUBSCRIBER s INNER JOIN " +
"IDN_XACML_SUBSCRIBER_PROPERTY p ON s.SUBSCRIBER_ID = p.SUBSCRIBER_ID AND s.TENANT_ID = p.TENANT_ID " +
"WHERE s.SUBSCRIBER_ID = :SUBSCRIBER_ID; AND s.TENANT_ID = :TENANT_ID;";
public static final String GET_SUBSCRIBER_IDS_SQL = "SELECT SUBSCRIBER_ID FROM IDN_XACML_SUBSCRIBER WHERE " +
Expand All @@ -226,13 +227,13 @@ private SQLQueries() {
"ENTITLEMENT_MODULE_NAME=:ENTITLEMENT_MODULE_NAME; WHERE SUBSCRIBER_ID=:SUBSCRIBER_ID; " +
"AND TENANT_ID=:TENANT_ID;";
public static final String UPDATE_SUBSCRIBER_PROPERTIES_SQL = "UPDATE IDN_XACML_SUBSCRIBER_PROPERTY SET " +
"PROPERTY_VALUE=:PROPERTY_VALUE; WHERE SUBSCRIBER_ID=:SUBSCRIBER_ID; AND TENANT_ID=:TENANT_ID; AND " +
"PROPERTY_ID=:PROPERTY_ID;";
"PROPERTY_VALUE=:PROPERTY_VALUE; WHERE SUBSCRIBER_ID=:SUBSCRIBER_ID; AND PROPERTY_ID=:PROPERTY_ID; AND " +
"TENANT_ID=:TENANT_ID;";
public static final String DELETE_SUBSCRIBER_SQL = "DELETE FROM IDN_XACML_SUBSCRIBER WHERE " +
"SUBSCRIBER_ID=:SUBSCRIBER_ID; AND TENANT_ID=:TENANT_ID;";

/**
* DB queries related to status
* DB queries related to status.
*/
public static final String CREATE_POLICY_STATUS_SQL = "INSERT INTO IDN_XACML_STATUS (TYPE, IS_SUCCESS, " +
"USERNAME, TARGET, TARGET_ACTION, TIME_INSTANCE, MESSAGE, POLICY_ID, POLICY_TENANT_ID, POLICY_VERSION) " +
Expand Down Expand Up @@ -283,7 +284,7 @@ private SQLQueries() {
"AND SUBSCRIBER_TENANT_ID=:TENANT_ID; ORDER BY STATUS_ID ASC) WHERE ROWNUM <= :LIMIT;)";

/**
* DB queries related to policy version management
* DB queries related to policy version management.
*/

public static final String GET_LATEST_POLICY_VERSION_SQL =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,22 +25,15 @@
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.database.utils.jdbc.NamedPreparedStatement;
import org.wso2.carbon.identity.core.util.IdentityDatabaseUtil;
import org.wso2.carbon.identity.core.util.IdentityTenantUtil;
import org.wso2.carbon.identity.entitlement.EntitlementException;
import org.wso2.carbon.identity.entitlement.EntitlementUtil;
import org.wso2.carbon.identity.entitlement.PDPConstants;
import org.wso2.carbon.identity.entitlement.internal.EntitlementServiceComponent;
import org.wso2.carbon.identity.entitlement.pdp.EntitlementEngine;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import static org.wso2.carbon.identity.entitlement.PDPConstants.Algorithms.DENY_OVERRIDES;
import static org.wso2.carbon.identity.entitlement.PDPConstants.Algorithms.FIRST_APPLICABLE;
import static org.wso2.carbon.identity.entitlement.PDPConstants.Algorithms.ONLY_ONE_APPLICABLE;
import static org.wso2.carbon.identity.entitlement.PDPConstants.POLICY_COMBINING_PREFIX_1;
import static org.wso2.carbon.identity.entitlement.PDPConstants.POLICY_COMBINING_PREFIX_3;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.CONFIG_KEY;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.CONFIG_VALUE;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.TENANT_ID;
Expand All @@ -61,28 +54,12 @@ public class JDBCConfigDAOImpl implements ConfigDAO {
public PolicyCombiningAlgorithm getGlobalPolicyAlgorithm() {

int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
Connection connection = IdentityDatabaseUtil.getDBConnection(false);

try {
try (Connection connection = IdentityDatabaseUtil.getDBConnection(false)) {
String algorithm = getPolicyCombiningAlgorithm(connection, tenantId);
return EntitlementUtil.resolveGlobalPolicyAlgorithm(algorithm);

if (StringUtils.isBlank(algorithm)) {
// read algorithm from entitlement.properties file
algorithm = EntitlementServiceComponent.getEntitlementConfig().getEngineProperties().
getProperty(PDPConstants.PDP_GLOBAL_COMBINING_ALGORITHM);
LOG.info(String.format(
"Using Global policy combining algorithm that is defined in configuration file in " +
"tenant %s.", IdentityTenantUtil.getTenantDomain(tenantId)));
} else {
if (FIRST_APPLICABLE.equals(algorithm) || ONLY_ONE_APPLICABLE.equals(algorithm)) {
algorithm = POLICY_COMBINING_PREFIX_1 + algorithm;
} else {
algorithm = POLICY_COMBINING_PREFIX_3 + algorithm;
}
}
return EntitlementUtil.getPolicyCombiningAlgorithm(algorithm);

} catch (EntitlementException e) {
} catch (SQLException | EntitlementException e) {
LOG.warn(e);
}

Expand Down Expand Up @@ -111,15 +88,12 @@ public void setGlobalPolicyAlgorithm(String policyCombiningAlgorithm) throws Ent

try (NamedPreparedStatement setPolicyCombiningAlgoPrepStmt = new NamedPreparedStatement(connection,
query)) {
setPolicyCombiningAlgoPrepStmt.setString(CONFIG_KEY, PDPConstants.GLOBAL_POLICY_COMBINING_ALGORITHM);
setPolicyCombiningAlgoPrepStmt.setString(CONFIG_VALUE, policyCombiningAlgorithm);
setPolicyCombiningAlgoPrepStmt.setInt(TENANT_ID, tenantId);
setPolicyCombiningAlgoPrepStmt.setString(CONFIG_KEY, PDPConstants.GLOBAL_POLICY_COMBINING_ALGORITHM);
setPolicyCombiningAlgoPrepStmt.executeUpdate();
}

// performing cache invalidation
EntitlementEngine.getInstance().invalidatePolicyCache();

IdentityDatabaseUtil.commitTransaction(connection);

} catch (SQLException e) {
Expand Down Expand Up @@ -152,9 +126,8 @@ private String getPolicyCombiningAlgorithm(Connection connection, int tenantId)

try (NamedPreparedStatement getPolicyCombiningAlgoPrepStmt = new NamedPreparedStatement(connection,
GET_POLICY_COMBINING_ALGORITHM_SQL)) {
getPolicyCombiningAlgoPrepStmt.setInt(TENANT_ID, tenantId);
getPolicyCombiningAlgoPrepStmt.setString(CONFIG_KEY, PDPConstants.GLOBAL_POLICY_COMBINING_ALGORITHM);

getPolicyCombiningAlgoPrepStmt.setInt(TENANT_ID, tenantId);
try (ResultSet rs = getPolicyCombiningAlgoPrepStmt.executeQuery()) {
if (rs.next()) {
algorithm = rs.getString(CONFIG_VALUE);
Expand All @@ -163,8 +136,6 @@ private String getPolicyCombiningAlgorithm(Connection connection, int tenantId)

} catch (SQLException e) {
LOG.debug("Error while getting Global Policy Combining Algorithm from policy data store.", e);
} finally {
IdentityDatabaseUtil.closeConnection(connection);
}
return algorithm;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,11 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.IS_SUCCESS;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.MESSAGE;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.POLICY_ID;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.POLICY_VERSION;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.STATUS_COUNT;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.STATUS_TYPE;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.SUBSCRIBER_ID;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.EntitlementTableColumns.TARGET;
Expand All @@ -70,6 +67,7 @@
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.SQLQueries.GET_POLICY_STATUS_SQL;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.SQLQueries.GET_SUBSCRIBER_STATUS_COUNT_SQL;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.SQLQueries.GET_SUBSCRIBER_STATUS_SQL;
import static org.wso2.carbon.identity.entitlement.dao.DAOConstants.STATUS_COUNT;

public class JDBCSimplePAPStatusDataHandler implements PAPStatusDataHandler {

Expand All @@ -92,22 +90,22 @@ public void init(Properties properties) {
/**
* Handles the status data.
*
* @param about indicates what is related with this admin status action.
* @param key key value of the status.
* @param statusHolder <code>StatusHolder</code>.
* @param about indicates what is related with this admin status action.
* @param key key value of the status.
* @param statusHolders <code>StatusHolder</code>.
* @throws EntitlementException throws, if fails to handle.
*/
@Override
public void handle(String about, String key, List<StatusHolder> statusHolder) throws EntitlementException {
public void handle(String about, String key, List<StatusHolder> statusHolders) throws EntitlementException {

// If the action is DELETE_POLICY, delete the policy or the subscriber status
for (StatusHolder holder : statusHolder) {
for (StatusHolder holder : statusHolders) {
if (EntitlementConstants.StatusTypes.DELETE_POLICY.equals(holder.getType())) {
deletePersistedData(about, key);
return;
}
}
persistStatus(about, key, statusHolder);
persistStatus(about, key, statusHolders);
}

/**
Expand Down Expand Up @@ -144,27 +142,16 @@ public StatusHolder[] getStatusData(String about, String key, String type, Strin
: EntitlementConstants.Status.ABOUT_SUBSCRIBER;

List<StatusHolder> holders = readStatus(key, statusAboutType);
List<StatusHolder> filteredHolders = new ArrayList<>();
if (!holders.isEmpty()) {
searchString = searchString.replace("*", ".*");
Pattern pattern = Pattern.compile(searchString, Pattern.CASE_INSENSITIVE);
for (StatusHolder holder : holders) {
String id = EntitlementConstants.Status.ABOUT_POLICY.equals(about)
? holder.getUser()
: holder.getTarget();
Matcher matcher = pattern.matcher(id);
if (!matcher.matches()) {
continue;
}
if (!EntitlementConstants.Status.ABOUT_POLICY.equals(about) || type == null ||
type.equals(holder.getType())) {
filteredHolders.add(holder);
}
}
}
return filteredHolders.toArray(new StatusHolder[0]);
return EntitlementUtil.filterStatus(holders, searchString, about, type);
}

/**
* Deletes all status records.
*
* @param about whether the status is about a policy or publisher.
* @param key key value of the status.
* @throws EntitlementException if fails to delete.
*/
private synchronized void deletePersistedData(String about, String key) throws EntitlementException {

Connection connection = IdentityDatabaseUtil.getDBConnection(true);
Expand Down
Loading

0 comments on commit 012de8e

Please sign in to comment.