use of org.wso2.carbon.apimgt.core.exception.APIMgtDAOException in project carbon-apimgt by wso2.
the class PolicyDAOImpl method addAPIPipeline.
/**
* Adding pipelines of API policy to database
*
* @param connection connection to db
* @param uuid policy id/ uuid of the policy
* @throws SQLException if error occurred while inserting pipeline to db
*/
private static void addAPIPipeline(Connection connection, List<Pipeline> pipelines, String uuid) throws SQLException, APIMgtDAOException {
final String query = "INSERT INTO AM_CONDITION_GROUP (UUID, QUOTA_TYPE, UNIT_TIME, TIME_UNIT, DESCRIPTION, QUOTA, " + "QUOTA_UNIT) VALUES (?,?,?,?,?,?,?)";
String dbProductName = connection.getMetaData().getDatabaseProductName();
try (PreparedStatement statement = connection.prepareStatement(query, new String[] { DAOUtil.getConvertedAutoGeneratedColumnName(dbProductName, APIMgtConstants.ThrottlePolicyConstants.COLUMN_CONDITION_GROUP_ID) })) {
for (Pipeline pipeline : pipelines) {
statement.setString(1, uuid);
statement.setString(2, pipeline.getQuotaPolicy().getType());
statement.setLong(3, pipeline.getQuotaPolicy().getLimit().getUnitTime());
statement.setString(4, pipeline.getQuotaPolicy().getLimit().getTimeUnit());
statement.setString(5, pipeline.getDescription());
Limit limit = pipeline.getQuotaPolicy().getLimit();
setDefaultThrottlePolicyDetailsPreparedStmt(limit, statement);
statement.executeUpdate();
ResultSet rs = statement.getGeneratedKeys();
if (rs.next()) {
// get the auto increment id
int conditionId = rs.getInt(1);
List<Condition> conditionList = pipeline.getConditions();
for (Condition condition : conditionList) {
if (PolicyConstants.IP_CONDITION_TYPE.equals(condition.getType()) || PolicyConstants.IP_SPECIFIC_TYPE.equals(condition.getType()) || PolicyConstants.IP_RANGE_TYPE.equals(condition.getType())) {
addIPCondition(connection, condition, conditionId);
} else if (PolicyConstants.HEADER_CONDITION_TYPE.equals(condition.getType())) {
addHeaderCondition(connection, condition, conditionId);
} else if (PolicyConstants.JWT_CLAIMS_CONDITION_TYPE.equals(condition.getType())) {
addJWTClaimCondition(connection, condition, conditionId);
} else if (PolicyConstants.QUERY_PARAMS_CONDITION_TYPE.equals(condition.getType())) {
addParamCondition(connection, condition, conditionId);
} else {
// unsupported Condition
throw new IllegalArgumentException("Unsupported Condition type: " + condition.getType());
}
}
} else {
String errorMsg = "Unable to retrieve auto incremented id, hence unable to add Pipeline Condition";
throw new IllegalStateException(errorMsg);
}
}
}
}
use of org.wso2.carbon.apimgt.core.exception.APIMgtDAOException in project carbon-apimgt by wso2.
the class PolicyDAOImpl method isValidApplication.
/**
* validate the blocking application.
*
* @param appName name of the application
* @param uuid uuid of the application
* @return return true/false depends of the success
* @throws APIMgtDAOException if failed validating application
*/
private boolean isValidApplication(String appName, String uuid) throws APIMgtDAOException {
String query = "SELECT 1 FROM AM_APPLICATION WHERE UUID = ? AND NAME = ?";
try (Connection connection = DAOUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(query)) {
connection.setAutoCommit(false);
statement.setString(1, uuid);
statement.setString(2, appName);
try (ResultSet resultSet = statement.executeQuery()) {
return resultSet.next();
}
} catch (SQLException e) {
throw new APIMgtDAOException(DAOUtil.DAO_ERROR_PREFIX + "checking if Block condition with Application Name " + appName + " , Application ID = " + uuid + " exists", e);
}
}
use of org.wso2.carbon.apimgt.core.exception.APIMgtDAOException in project carbon-apimgt by wso2.
the class PolicyDAOImpl method getApiPolicyByUuid.
@Override
public APIPolicy getApiPolicyByUuid(String uuid) throws APIMgtDAOException {
try {
String sqlQuery = "SELECT UUID, NAME, DEFAULT_QUOTA_TYPE, DEFAULT_TIME_UNIT, DEFAULT_UNIT_TIME, " + "DEFAULT_QUOTA, " + "DEFAULT_QUOTA_UNIT, DESCRIPTION, DISPLAY_NAME, IS_DEPLOYED, APPLICABLE_LEVEL from " + "AM_API_POLICY WHERE UUID = ?";
try (Connection connection = DAOUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sqlQuery)) {
preparedStatement.setString(1, uuid);
try (ResultSet resultSet = preparedStatement.executeQuery()) {
if (resultSet.next()) {
APIPolicy apiPolicy = new APIPolicy(resultSet.getString(APIMgtConstants.ThrottlePolicyConstants.COLUMN_NAME));
setCommonPolicyDetails(apiPolicy, resultSet);
apiPolicy.setUserLevel(resultSet.getString(APIMgtConstants.ThrottlePolicyConstants.COLUMN_APPLICABLE_LEVEL));
apiPolicy.setPipelines(getPipelines(apiPolicy.getUuid(), connection));
return apiPolicy;
} else {
// not found
String msg = "API Policy not found for id: " + uuid;
log.warn(msg);
throw new APIMgtDAOException(msg, ExceptionCodes.POLICY_NOT_FOUND);
}
}
}
} catch (SQLException e) {
String errorMsg = "Error in retrieving API policy with id: " + uuid;
log.error(errorMsg, e);
throw new APIMgtDAOException(errorMsg, e);
}
}
use of org.wso2.carbon.apimgt.core.exception.APIMgtDAOException in project carbon-apimgt by wso2.
the class PolicyDAOImpl method addBlockConditions.
@Override
public String addBlockConditions(BlockConditions blockConditions) throws APIMgtDAOException {
boolean status = false;
boolean valid = false;
String uuid = null;
String conditionType = blockConditions.getConditionType();
String conditionValue = blockConditions.getConditionValue();
try {
String query = "INSERT INTO AM_BLOCK_CONDITIONS (TYPE, VALUE, ENABLED, UUID) VALUES (?,?,?,?)";
if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITIONS_API.equals(conditionType)) {
if (isValidContext(conditionValue)) {
valid = true;
} else {
throw new APIMgtDAOException("Couldn't Save Block Condition Due to Invalid API Context : " + conditionValue, ExceptionCodes.BLOCK_CONDITION_UNSUPPORTED_API_CONTEXT);
}
} else if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITIONS_APPLICATION.equals(conditionType)) {
String[] appArray = conditionValue.split(":");
if (appArray.length > 1) {
String appUuid = appArray[0];
String appName = appArray[1];
if (isValidApplication(appName, appUuid)) {
valid = true;
} else {
throw new APIMgtDAOException("Couldn't Save Block Condition Due to Invalid Application : " + appName + ", UUID :" + appUuid, ExceptionCodes.BLOCK_CONDITION_UNSUPPORTED_APP_ID_NAME);
}
}
} else if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITIONS_USER.equals(conditionType)) {
valid = true;
} else if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITIONS_IP.equals(conditionType)) {
valid = true;
} else if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITION_IP_RANGE.equals(conditionType)) {
valid = isIPRangeConditionValid(blockConditions.getStartingIP(), blockConditions.getEndingIP());
}
if (valid) {
try (Connection connection = DAOUtil.getConnection();
PreparedStatement insertPreparedStatement = connection.prepareStatement(query)) {
try {
connection.setAutoCommit(false);
if (!isBlockConditionExist(blockConditions)) {
uuid = UUID.randomUUID().toString();
insertPreparedStatement.setString(1, conditionType);
insertPreparedStatement.setString(2, conditionValue);
insertPreparedStatement.setBoolean(3, blockConditions.isEnabled());
insertPreparedStatement.setString(4, uuid);
insertPreparedStatement.execute();
if (APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITION_IP_RANGE.equals(conditionType)) {
String ipConditionQuery = "INSERT INTO AM_IP_RANGE_CONDITION " + "(STARTING_IP, ENDING_IP, UUID) VALUES (?, ?, ?)";
try (PreparedStatement ipStatement = connection.prepareStatement(ipConditionQuery)) {
ipStatement.setString(1, blockConditions.getStartingIP());
ipStatement.setString(2, blockConditions.getEndingIP());
ipStatement.setString(3, uuid);
ipStatement.execute();
} catch (SQLException e) {
connection.rollback();
}
}
connection.commit();
} else {
throw new APIMgtDAOException("Condition with type: " + conditionType + ", value: " + conditionValue + " already exists", ExceptionCodes.BLOCK_CONDITION_ALREADY_EXISTS);
}
} catch (SQLException e) {
connection.rollback();
throw new APIMgtDAOException(DAOUtil.DAO_ERROR_PREFIX + "adding block condition: " + conditionType + " and " + conditionValue, e);
} finally {
connection.setAutoCommit(DAOUtil.isAutoCommit());
}
}
}
} catch (SQLException e) {
throw new APIMgtDAOException(DAOUtil.DAO_ERROR_PREFIX + "adding block condition: " + conditionType + " and " + conditionValue, e);
}
return uuid;
}
use of org.wso2.carbon.apimgt.core.exception.APIMgtDAOException in project carbon-apimgt by wso2.
the class PolicyDAOImpl method getBlockConditionByUUID.
@Override
public BlockConditions getBlockConditionByUUID(String uuid) throws APIMgtDAOException {
BlockConditions blockCondition = new BlockConditions();
String query = "SELECT CONDITION_ID,TYPE,VALUE,ENABLED,UUID FROM AM_BLOCK_CONDITIONS WHERE UUID =?";
try (Connection connection = DAOUtil.getConnection();
PreparedStatement selectPreparedStatement = connection.prepareStatement(query)) {
selectPreparedStatement.setString(1, uuid);
try (ResultSet resultSet = selectPreparedStatement.executeQuery()) {
if (resultSet.next()) {
blockCondition.setEnabled(resultSet.getBoolean("ENABLED"));
blockCondition.setConditionType(resultSet.getString("TYPE"));
blockCondition.setConditionValue(resultSet.getString("VALUE"));
blockCondition.setConditionId(resultSet.getInt("CONDITION_ID"));
blockCondition.setUuid(resultSet.getString("UUID"));
if (blockCondition.getConditionType().equals(APIMgtConstants.ThrottlePolicyConstants.BLOCKING_CONDITION_IP_RANGE)) {
String ipQuery = "SELECT STARTING_IP, ENDING_IP FROM AM_IP_RANGE_CONDITION WHERE UUID = ?";
try (PreparedStatement selectIpStatement = connection.prepareStatement(ipQuery)) {
selectIpStatement.setString(1, uuid);
try (ResultSet rs = selectIpStatement.executeQuery()) {
if (rs.next()) {
blockCondition.setStartingIP(rs.getString("STARTING_IP"));
blockCondition.setEndingIP(rs.getString("ENDING_IP"));
}
}
}
}
}
}
} catch (SQLException e) {
throw new APIMgtDAOException(DAOUtil.DAO_ERROR_PREFIX + "getting block condition by uuid " + uuid, e);
}
return blockCondition;
}
Aggregations