diff --git a/phileas-core/pom.xml b/phileas-core/pom.xml
index 369dc71c1..fc11768a9 100644
--- a/phileas-core/pom.xml
+++ b/phileas-core/pom.xml
@@ -119,12 +119,6 @@
${junit.version}
test
-
- io.findify
- s3mock_2.12
- 0.2.6
- test
-
ai.grakn
redis-mock
diff --git a/phileas-core/src/main/java/ai/philterd/phileas/services/PhileasFilterService.java b/phileas-core/src/main/java/ai/philterd/phileas/services/PhileasFilterService.java
index b1c39e851..cf7cb3f61 100644
--- a/phileas-core/src/main/java/ai/philterd/phileas/services/PhileasFilterService.java
+++ b/phileas-core/src/main/java/ai/philterd/phileas/services/PhileasFilterService.java
@@ -31,7 +31,17 @@
import ai.philterd.phileas.model.responses.BinaryDocumentFilterResponse;
import ai.philterd.phileas.model.responses.FilterResponse;
import ai.philterd.phileas.model.serializers.PlaceholderDeserializer;
-import ai.philterd.phileas.model.services.*;
+import ai.philterd.phileas.model.services.AlertService;
+import ai.philterd.phileas.model.services.AnonymizationCacheService;
+import ai.philterd.phileas.model.services.Classification;
+import ai.philterd.phileas.model.services.DocumentProcessor;
+import ai.philterd.phileas.model.services.FilterService;
+import ai.philterd.phileas.model.services.MetricsService;
+import ai.philterd.phileas.model.services.PolicyService;
+import ai.philterd.phileas.model.services.PostFilter;
+import ai.philterd.phileas.model.services.Redacter;
+import ai.philterd.phileas.model.services.SentimentDetector;
+import ai.philterd.phileas.model.services.SplitService;
import ai.philterd.phileas.processors.unstructured.UnstructuredDocumentProcessor;
import ai.philterd.phileas.service.ai.sentiment.OpenNLPSentimentDetector;
import ai.philterd.phileas.services.alerts.AlertServiceFactory;
@@ -39,9 +49,12 @@
import ai.philterd.phileas.services.disambiguation.VectorBasedSpanDisambiguationService;
import ai.philterd.phileas.services.metrics.NoOpMetricsService;
import ai.philterd.phileas.services.policies.LocalPolicyService;
-import ai.philterd.phileas.services.policies.S3PolicyService;
import ai.philterd.phileas.services.policies.utils.PolicyUtils;
-import ai.philterd.phileas.services.postfilters.*;
+import ai.philterd.phileas.services.postfilters.IgnoredPatternsFilter;
+import ai.philterd.phileas.services.postfilters.IgnoredTermsFilter;
+import ai.philterd.phileas.services.postfilters.TrailingNewLinePostFilter;
+import ai.philterd.phileas.services.postfilters.TrailingPeriodPostFilter;
+import ai.philterd.phileas.services.postfilters.TrailingSpacePostFilter;
import ai.philterd.phileas.services.split.SplitFactory;
import ai.philterd.services.pdf.PdfRedacter;
import ai.philterd.services.pdf.PdfTextExtractor;
@@ -55,7 +68,15 @@
import org.apache.logging.log4j.Logger;
import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public class PhileasFilterService implements FilterService {
@@ -86,12 +107,10 @@ public PhileasFilterService(final PhileasConfiguration phileasConfiguration, fin
this.filterCache = new ConcurrentHashMap<>();
// Configure the deserialization.
- final GsonBuilder gsonBuilder = new GsonBuilder();
- gsonBuilder.registerTypeAdapter(String.class, new PlaceholderDeserializer());
- final Gson gson = gsonBuilder.create();
+ final Gson gson = new GsonBuilder().registerTypeAdapter(String.class, new PlaceholderDeserializer()).create();
// Set the policy services.
- this.policyService = buildPolicyService(phileasConfiguration);
+ this.policyService = new LocalPolicyService(phileasConfiguration);
this.policyUtils = new PolicyUtils(policyService, gson);
// Set the anonymization cache service.
@@ -362,28 +381,6 @@ private List getBoundingBoxes(final Policy policy, final MimeType m
}
- private PolicyService buildPolicyService(final PhileasConfiguration phileasConfiguration) throws IOException {
-
- final PolicyService policyService;
- final String s3Bucket = phileasConfiguration.policiesS3Bucket();
-
- // If an S3 bucket is provided then instantiate an S3PolicyService.
- if(StringUtils.isNotEmpty(s3Bucket)) {
-
- LOGGER.info("Initializing configuration for policies S3 bucket.");
- policyService = new S3PolicyService(phileasConfiguration, false);
-
- } else {
-
- LOGGER.info("Using local storage for policies.");
- policyService = new LocalPolicyService(phileasConfiguration);
-
- }
-
- return policyService;
-
- }
-
private List getPostFiltersForPolicy(final Policy policy) throws IOException {
LOGGER.debug("Reloading policies.");
diff --git a/phileas-core/src/test/java/ai/philterd/test/phileas/services/registry/S3PolicyServiceTest.java b/phileas-core/src/test/java/ai/philterd/test/phileas/services/policies/LocalPolicyServiceTest.java
similarity index 54%
rename from phileas-core/src/test/java/ai/philterd/test/phileas/services/registry/S3PolicyServiceTest.java
rename to phileas-core/src/test/java/ai/philterd/test/phileas/services/policies/LocalPolicyServiceTest.java
index 744a4d945..b91f62683 100644
--- a/phileas-core/src/test/java/ai/philterd/test/phileas/services/registry/S3PolicyServiceTest.java
+++ b/phileas-core/src/test/java/ai/philterd/test/phileas/services/policies/LocalPolicyServiceTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package ai.philterd.test.phileas.services.registry;
+package ai.philterd.test.phileas.services.policies;
import ai.philterd.phileas.model.configuration.PhileasConfiguration;
import ai.philterd.phileas.model.policy.Identifiers;
@@ -23,22 +23,16 @@
import ai.philterd.phileas.model.policy.filters.strategies.rules.AgeFilterStrategy;
import ai.philterd.phileas.model.policy.filters.strategies.rules.CreditCardFilterStrategy;
import ai.philterd.phileas.model.services.PolicyService;
-import ai.philterd.phileas.services.policies.S3PolicyService;
+import ai.philterd.phileas.services.policies.LocalPolicyService;
import com.google.gson.Gson;
-import io.findify.s3mock.S3Mock;
-import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import redis.embedded.RedisServer;
+import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -46,106 +40,32 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
-public class S3PolicyServiceTest {
+public class LocalPolicyServiceTest {
- private static final Logger LOGGER = LogManager.getLogger(S3PolicyServiceTest.class);
+ private static final Logger LOGGER = LogManager.getLogger(LocalPolicyServiceTest.class);
- private Gson gson = new Gson();
- private RedisServer redisServer;
- private S3Mock api;
-
- private static boolean isExternalRedis = false;
+ private final Gson gson = new Gson();
private PhileasConfiguration getConfiguration() throws IOException {
- final Properties properties = new Properties();
-
- final String redisHost = System.getenv("PHILTER_REDIS_HOST");
- final String redisPort = System.getenv("PHILTER_REDIS_PORT");
- final String redisSsl = System.getenv("PHILTER_REDIS_SSL");
- final String redisToken = System.getenv("PHILTER_REDIS_AUTH_TOKEN");
- final String redisClustered = System.getenv("PHILTER_REDIS_CLUSTERED");
-
- properties.setProperty("filter.policies", "s3");
- properties.setProperty("filter.policies.s3.bucket", "policies");
- properties.setProperty("filter.policies.s3.prefix", "test/");
- properties.setProperty("cache.redis.enabled", "true");
-
- if(StringUtils.isNotEmpty(redisHost)) {
-
- LOGGER.info("Using redis host: {}", redisHost);
-
- properties.setProperty("cache.redis.host", redisHost);
- properties.setProperty("cache.redis.port", redisPort);
- properties.setProperty("cache.redis.ssl", redisSsl);
- properties.setProperty("cache.redis.auth.token", redisToken);
- properties.setProperty("cache.redis.cluster", "true");
- properties.setProperty("cache.redis.cluster", redisClustered);
-
- } else {
-
- LOGGER.info("Using local redis host.");
-
- properties.setProperty("cache.redis.host", "localhost");
- properties.setProperty("cache.redis.port", "31000");
- properties.setProperty("cache.redis.ssl", "false");
- properties.setProperty("cache.redis.auth.token", "");
- properties.setProperty("cache.redis.cluster", "false");
+ final String tempDirectory = Files.createTempDirectory("phileas-policies").toFile().getAbsolutePath();
- }
+ final Properties properties = new Properties();
+ properties.setProperty("filter.policies.directory", tempDirectory);
+ properties.setProperty("cache.redis.enabled", "false");
return new PhileasConfiguration(properties);
}
- @BeforeAll
- public static void beforeClass() {
-
- assumeFalse(System.getProperty("os.name").toLowerCase().startsWith("win"));
-
- final String redisHost = System.getenv("PHILTER_REDIS_HOST");
-
- if(StringUtils.isNotEmpty(redisHost)) {
- isExternalRedis = true;
- }
-
- }
-
- @BeforeEach
- public void before() throws IOException {
-
- LOGGER.info("Starting S3 emulator.");
-
- final Path temporaryDirectory = Files.createTempDirectory("s3mock");
-
- api = new S3Mock.Builder().withPort(8001).withFileBackend(temporaryDirectory.toFile().getAbsolutePath()).build();
- api.start();
-
- if(!isExternalRedis) {
- redisServer = RedisServer.builder().setting("bind 127.0.0.1").port(31000).build();
- redisServer.start();
- }
-
- }
-
- @AfterEach
- public void after() {
-
- api.shutdown();
-
- if(!isExternalRedis) {
- redisServer.stop();
- }
-
- }
-
@Test
public void list() throws IOException {
- final PolicyService policyService = new S3PolicyService(getConfiguration(), true);
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
policyService.save(gson.toJson(getPolicy("name1")));
policyService.save(gson.toJson(getPolicy("name2")));
+
final List names = policyService.get();
LOGGER.info("Found {} policies", names.size());
@@ -159,7 +79,7 @@ public void list() throws IOException {
@Test
public void getAll() throws IOException {
- final PolicyService policyService = new S3PolicyService(getConfiguration(), true);
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
policyService.save(gson.toJson(getPolicy("name1")));
policyService.save(gson.toJson(getPolicy("name2")));
@@ -181,7 +101,7 @@ public void save() throws IOException {
final String policy = gson.toJson(getPolicy(name));
- final PolicyService policyService = new S3PolicyService(getConfiguration(), true);
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
policyService.save(policy);
@@ -199,7 +119,7 @@ public void get() throws IOException {
final String policy = gson.toJson(getPolicy(name));
- final PolicyService policyService = new S3PolicyService(getConfiguration(), true);
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
policyService.save(policy);
@@ -215,7 +135,7 @@ public void delete() throws IOException {
final String name = "default";
final String policy = gson.toJson(getPolicy(name));
- final PolicyService policyService = new S3PolicyService(getConfiguration(), true);
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
policyService.save(policy);
@@ -225,6 +145,22 @@ public void delete() throws IOException {
}
+ @Test
+ public void deleteOutsidePath() throws IOException {
+
+ final File tempFile = File.createTempFile("phileas-", "-temp");
+ tempFile.deleteOnExit();
+
+ Assertions.assertTrue(Files.exists(tempFile.toPath()));
+
+ final String name = "../" + tempFile.getName();
+
+ final PolicyService policyService = new LocalPolicyService(getConfiguration());
+
+ Assertions.assertThrows(IOException.class, () -> policyService.delete(name));
+
+ }
+
private Policy getPolicy(String name) {
AgeFilterStrategy ageFilterStrategy = new AgeFilterStrategy();
diff --git a/phileas-model/src/main/java/ai/philterd/phileas/model/configuration/PhileasConfiguration.java b/phileas-model/src/main/java/ai/philterd/phileas/model/configuration/PhileasConfiguration.java
index e59abf7d8..3a2ee9aeb 100644
--- a/phileas-model/src/main/java/ai/philterd/phileas/model/configuration/PhileasConfiguration.java
+++ b/phileas-model/src/main/java/ai/philterd/phileas/model/configuration/PhileasConfiguration.java
@@ -117,18 +117,6 @@ public String policiesDirectory() {
return getProperty("filter.policies.directory", "./policies/");
}
- public String policiesS3Bucket() {
- return getProperty("filter.policies.s3.bucket", "");
- }
-
- public String policiesS3Prefix() {
- return getProperty("filter.policies.s3.prefix", "");
- }
-
- public String policiesS3Region() {
- return getProperty("filter.policies.s3.region", "us-east-1");
- }
-
private String getProperty(final String property, final String defaultValue) {
final String environmentVariableValue = getEnvironmentVariable(property);
diff --git a/phileas-services/phileas-services-alerts/src/test/java/ai/philterd/test/phileas/services/alerts/RedisAlertServiceTest.java b/phileas-services/phileas-services-alerts/src/test/java/ai/philterd/test/phileas/services/alerts/RedisAlertServiceTest.java
index df5b1a959..9b2d0a646 100644
--- a/phileas-services/phileas-services-alerts/src/test/java/ai/philterd/test/phileas/services/alerts/RedisAlertServiceTest.java
+++ b/phileas-services/phileas-services-alerts/src/test/java/ai/philterd/test/phileas/services/alerts/RedisAlertServiceTest.java
@@ -53,10 +53,6 @@ private PhileasConfiguration getConfiguration() throws IOException {
final String redisToken = System.getenv("PHILTER_REDIS_AUTH_TOKEN");
final String redisClustered = System.getenv("PHILTER_REDIS_CLUSTERED");
- properties.setProperty("filter.policies", "s3");
- properties.setProperty("filter.policies.s3.bucket", "policies");
- properties.setProperty("filter.policies.s3.prefix", "/");
-
properties.setProperty("cache.redis.enabled", "true");
if(StringUtils.isNotEmpty(redisHost)) {
diff --git a/phileas-services/phileas-services-anonymization/src/test/java/ai/philterd/test/phileas/services/anonymization/cache/RedisAnonymizationCacheServiceTest.java b/phileas-services/phileas-services-anonymization/src/test/java/ai/philterd/test/phileas/services/anonymization/cache/RedisAnonymizationCacheServiceTest.java
index cb920d13e..c9ef91680 100644
--- a/phileas-services/phileas-services-anonymization/src/test/java/ai/philterd/test/phileas/services/anonymization/cache/RedisAnonymizationCacheServiceTest.java
+++ b/phileas-services/phileas-services-anonymization/src/test/java/ai/philterd/test/phileas/services/anonymization/cache/RedisAnonymizationCacheServiceTest.java
@@ -45,10 +45,6 @@ private PhileasConfiguration getConfiguration() throws IOException {
final String redisToken = System.getenv("PHILTER_REDIS_AUTH_TOKEN");
final String redisClustered = System.getenv("PHILTER_REDIS_CLUSTERED");
- properties.setProperty("filter.policies", "s3");
- properties.setProperty("filter.policies.s3.bucket", "policies");
- properties.setProperty("filter.policies.s3.prefix", "/");
-
properties.setProperty("cache.redis.enabled", "true");
if(StringUtils.isNotEmpty(redisHost)) {
diff --git a/phileas-services/phileas-services-policies/pom.xml b/phileas-services/phileas-services-policies/pom.xml
index f122b143f..e44ba1508 100644
--- a/phileas-services/phileas-services-policies/pom.xml
+++ b/phileas-services/phileas-services-policies/pom.xml
@@ -14,11 +14,6 @@
phileas-model
${project.version}
-
- com.amazonaws
- aws-java-sdk-s3
- ${aws.version}
-
org.json
json
diff --git a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/LocalPolicyService.java b/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/LocalPolicyService.java
index 7313a5291..9672bc9b0 100644
--- a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/LocalPolicyService.java
+++ b/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/LocalPolicyService.java
@@ -160,6 +160,8 @@ public void delete(String policyName) throws IOException {
final File file = new File(policiesDirectory, policyName + JSON_EXTENSION);
+ LOGGER.info("Deleting policy at: {}", file.getAbsolutePath());
+
if(file.exists()) {
if(!file.delete()) {
diff --git a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/S3PolicyService.java b/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/S3PolicyService.java
deleted file mode 100644
index 4aef1e2a1..000000000
--- a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/S3PolicyService.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright 2024 Philterd, LLC @ https://www.philterd.ai
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package ai.philterd.phileas.services.policies;
-
-import ai.philterd.phileas.model.configuration.PhileasConfiguration;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.AnonymousAWSCredentials;
-import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
-import com.amazonaws.client.builder.AwsClientBuilder;
-import com.amazonaws.services.s3.AmazonS3;
-import com.amazonaws.services.s3.AmazonS3ClientBuilder;
-import com.amazonaws.services.s3.model.*;
-import ai.philterd.phileas.model.exceptions.api.BadRequestException;
-import ai.philterd.phileas.model.exceptions.api.InternalServerErrorException;
-import ai.philterd.phileas.model.services.AbstractPolicyService;
-import ai.philterd.phileas.model.services.PolicyCacheService;
-import ai.philterd.phileas.model.services.PolicyService;
-import ai.philterd.phileas.services.policies.cache.PolicyCacheServiceFactory;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-
-/**
- * Implementation of {@link PolicyService} that is backed by S3.
- */
-public class S3PolicyService extends AbstractPolicyService implements PolicyService {
-
- private static final Logger LOGGER = LogManager.getLogger(S3PolicyService.class);
-
- private static final String JSON_EXTENSION = ".json";
-
- private AmazonS3 s3Client;
- private String bucket;
- private String prefix;
- private PolicyCacheService policyCacheService;
-
- public S3PolicyService(PhileasConfiguration phileasConfiguration, boolean testing) throws IOException {
-
- this.bucket = phileasConfiguration.policiesS3Bucket();
- final String region = phileasConfiguration.policiesS3Region();
-
- // If the prefix is not empty it must end with a forward slash.
- if(!StringUtils.isEmpty(phileasConfiguration.policiesS3Prefix())) {
- if(!phileasConfiguration.policiesS3Prefix().endsWith("/")) {
- this.prefix = phileasConfiguration.policiesS3Prefix() + "/";
- }
- }
-
- // Create a policy cache.
- this.policyCacheService = PolicyCacheServiceFactory.getInstance(phileasConfiguration);
-
- LOGGER.info("Configuring S3 backend for policies in s3 bucket {}", bucket);
-
- if(testing) {
-
- final AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration("http://localhost:8001", "us-west-2");
-
- this.s3Client = AmazonS3ClientBuilder
- .standard()
- .withPathStyleAccessEnabled(true)
- .withEndpointConfiguration(endpoint)
- .withCredentials(new AWSStaticCredentialsProvider(new AnonymousAWSCredentials()))
- .build();
-
- this.s3Client.createBucket(bucket);
-
- } else {
-
- // Only permits credentials via the standard channels.
- this.s3Client = AmazonS3ClientBuilder
- .standard()
- .withCredentials(new DefaultAWSCredentialsProviderChain())
- .withRegion(region)
- .build();
-
- }
-
- }
-
- @Override
- public List get() {
-
- final List policyNames = new LinkedList<>();
-
- try {
-
- LOGGER.info("Looking for policies in s3 bucket {}", bucket);
- final ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request()
- .withBucketName(bucket)
- .withPrefix(prefix);
-
- ListObjectsV2Result result;
-
- do {
-
- result = s3Client.listObjectsV2(listObjectsV2Request);
-
- for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {
-
- final S3Object fullObject = s3Client.getObject(new GetObjectRequest(bucket, objectSummary.getKey()));
- final String json = IOUtils.toString(fullObject.getObjectContent(), StandardCharsets.UTF_8.name());
-
- fullObject.close();
-
- final JSONObject object = new JSONObject(json);
- final String name = object.getString("name");
-
- policyNames.add(name);
- LOGGER.debug("Found policy named {}", name);
-
- }
-
- // If there are more than maxKeys keys in the bucket, get a continuation token and list the next objects.
- final String token = result.getNextContinuationToken();
-
- listObjectsV2Request.setContinuationToken(token);
-
- } while (result.isTruncated());
-
- } catch (Exception ex) {
-
- LOGGER.error("Unable to get policy names.", ex);
-
- throw new InternalServerErrorException("Unable to get policy names.");
-
- }
-
- return policyNames;
-
- }
-
- @Override
- public String get(String policyName) {
-
- try {
-
- // Get from cache.
- LOGGER.info("Getting policy name [{}] from the cache.", policyName);
- String json = policyCacheService.get(policyName);
-
- if(json == null) {
-
- // The policy was not in the cache. Look in S3.
- LOGGER.info("Policy was not cached. Looking for policy {} in s3 bucket {}", policyName, bucket);
- final S3Object fullObject = s3Client.getObject(new GetObjectRequest(bucket, prefix + policyName + JSON_EXTENSION));
- json = IOUtils.toString(fullObject.getObjectContent(), StandardCharsets.UTF_8.name());
- fullObject.close();
-
- // Put it in the cache.
- LOGGER.info("Caching policy [{}]", policyName);
- policyCacheService.insert(policyName, json);
-
- }
-
- return json;
-
- } catch (Exception ex) {
-
- LOGGER.error("Unable to get policy.", ex);
-
- throw new InternalServerErrorException("Unable to get policy.");
-
- }
-
- }
-
- @Override
- public Map getAll() {
-
- final Map policies = new HashMap<>();
-
- try {
-
- LOGGER.info("Looking for all policies in s3 bucket {}", bucket);
- final ListObjectsV2Request listObjectsV2Request = new ListObjectsV2Request()
- .withBucketName(bucket)
- .withPrefix(prefix);
-
- ListObjectsV2Result result;
-
- do {
-
- result = s3Client.listObjectsV2(listObjectsV2Request);
-
- LOGGER.info("Found {} policies.", result.getObjectSummaries().size());
-
- for (final S3ObjectSummary objectSummary : result.getObjectSummaries()) {
-
- // Ignore any non .json files.
- if (objectSummary.getKey().endsWith(JSON_EXTENSION)) {
-
- final S3Object fullObject = s3Client.getObject(new GetObjectRequest(bucket, objectSummary.getKey()));
- final String json = IOUtils.toString(fullObject.getObjectContent(), StandardCharsets.UTF_8.name());
-
- fullObject.close();
-
- final JSONObject object = new JSONObject(json);
- final String name = object.getString("name");
-
- LOGGER.info("Adding policy named [{}]", name);
- policies.put(name, json);
-
- LOGGER.info("Caching policy [{}]", name);
- policyCacheService.insert(name, json);
-
- }
-
- }
-
- // If there are more than maxKeys keys in the bucket, get a continuation token and list the next objects.
- final String token = result.getNextContinuationToken();
-
- listObjectsV2Request.setContinuationToken(token);
-
- } while (result.isTruncated());
-
- } catch (Exception ex) {
-
- LOGGER.error("Unable to get all policy names.", ex);
-
- throw new InternalServerErrorException("Unable to get all policies.");
-
- }
-
- return policies;
-
- }
-
- @Override
- public void save(String policyJson) {
-
- try {
-
- final JSONObject object = new JSONObject(policyJson);
- final String name = object.getString("name");
-
- LOGGER.info("Uploading object to s3://{}/{}", bucket, name + JSON_EXTENSION);
- s3Client.putObject(bucket, prefix + name + JSON_EXTENSION, policyJson);
-
- // Insert it into the cache.
- policyCacheService.insert(name, policyJson);
-
- } catch (JSONException ex) {
-
- LOGGER.error("The provided policy is not valid.", ex);
- throw new BadRequestException("The provided policy is not valid.");
-
- } catch (Exception ex) {
-
- LOGGER.error("Unable to save policy.", ex);
-
- throw new InternalServerErrorException("Unable to save policy.");
-
- }
-
- }
-
- @Override
- public void delete(String policyName) {
-
- try {
-
- LOGGER.info("Deleting object from s3://{}/{}", bucket, policyName + JSON_EXTENSION);
- s3Client.deleteObject(bucket, prefix + policyName + JSON_EXTENSION);
-
- // Remove it from the cache.
- policyCacheService.remove(policyName);
-
- } catch (Exception ex) {
-
- LOGGER.error("Unable to delete policy.", ex);
-
- throw new InternalServerErrorException("Unable to delete policy.");
-
- }
-
- }
-
-}
diff --git a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/StaticPolicyService.java b/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/StaticPolicyService.java
index 208273186..c2ceac339 100644
--- a/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/StaticPolicyService.java
+++ b/phileas-services/phileas-services-policies/src/main/java/ai/philterd/phileas/services/policies/StaticPolicyService.java
@@ -35,7 +35,7 @@ public class StaticPolicyService implements PolicyService {
private static final Logger LOGGER = LogManager.getLogger(StaticPolicyService.class);
- private Policy policy;
+ private final Policy policy;
private Gson gson;
/**
diff --git a/pom.xml b/pom.xml
index 6d08d4f7f..7cd0acef5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -77,7 +77,6 @@
UTF-8
4.13.2
- 1.12.778
4.4
3.17.0
1.2