This is an automated email from the ASF dual-hosted git repository.
davidb pushed a commit to branch features-service
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git
The following commit(s) were added to refs/heads/features-service by this push:
new e5c116d Make launcher write whitelist enforcer configuration.
e5c116d is described below
commit e5c116d33ba6b44ff5b95fdb30b8cab9d5871448
Author: David Bosschaert <[email protected]>
AuthorDate: Tue Jul 10 15:22:17 2018 +0100
Make launcher write whitelist enforcer configuration.
---
.../feature/launcher/impl/FeatureProcessor.java | 59 +++++++++++++++++++---
.../sling/feature/launcher/impl/Installation.java | 2 +-
2 files changed, 53 insertions(+), 8 deletions(-)
diff --git
a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index fcc89de..123f957 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -47,9 +47,14 @@ import java.util.stream.Collectors;
import javax.json.Json;
import javax.json.JsonArray;
+import javax.json.JsonObject;
import javax.json.JsonReader;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
public class FeatureProcessor {
+ private static final String FEATURES_SERVICE_PID =
"org.apache.sling.feature.service.impl.FeaturesServiceImpl";
+ private static final String WHITELIST_ENFORCER_PID =
"org.apache.sling.feature.whitelist.impl.WhitelistEnforcer";
/**
* Initialize the launcher
@@ -103,6 +108,7 @@ public class FeatureProcessor {
final ArtifactManager artifactManager,
final Application app) throws Exception {
Dictionary<String, Object> bundleFeatureMap = new Hashtable<>();
+ Converter converter = Converters.standardConverter();
List<String> featureIDs =
app.getFeatureIds().stream().map(i ->
i.toMvnId()).collect(Collectors.toList());
@@ -117,7 +123,6 @@ public class FeatureProcessor {
String ff = a.getMetadata().get("from-feature");
if (ff != null) {
- Converter converter = Converters.standardConverter();
String[] fl = ff.split(",");
Object cfg = null;
if (fl.length != 1) {
@@ -139,12 +144,7 @@ public class FeatureProcessor {
}
}
}
-
- Object[] featuresServiceConfig = new Object[3];
- featuresServiceConfig[0] =
"org.apache.sling.feature.service.impl.FeatureServiceImpl";
- featuresServiceConfig[1] = null;
- featuresServiceConfig[2] = bundleFeatureMap;
-
config.getInstallation().getConfigurations().add(featuresServiceConfig);
+ config.getInstallation().addConfiguration(FEATURES_SERVICE_PID, null,
bundleFeatureMap);
int index = 1;
for(final Extension ext : app.getExtensions()) {
@@ -182,6 +182,51 @@ public class FeatureProcessor {
index++;
cfg.getProperties().put("scripts", text);
config.getInstallation().addConfiguration(cfg.getName(),
cfg.getFactoryPid(), cfg.getProperties());
+ } else if (
ext.getName().equals(FeatureConstants.EXTENSION_NAME_API_REGION) ) {
+ Dictionary<String, List<String>> whitelistConfiguration = new
Hashtable<>();
+ try (JsonReader reader = Json.createReader(new
StringReader(ext.getJSON()))) {
+ JsonArray array = reader.readArray();
+ for (JsonValue jv : array) {
+ if (jv instanceof JsonObject) {
+ JsonObject jo = (JsonObject) jv;
+ String name = jo.getString("name");
+ String featureIdx = jo.getString("from-feature");
+ JsonArray exports = jo.getJsonArray("exports");
+
+ int fidx =
converter.convert(featureIdx).to(int.class);
+ if (featureIDs.size() > fidx) {
+ String featureID = featureIDs.get(fidx);
+ if (featureID != null) {
+ String featureKey = "whitelist.feature." +
featureID;
+ List<String> regions =
whitelistConfiguration.get(featureKey);
+ if (regions == null) {
+ regions = new ArrayList<>();
+ whitelistConfiguration.put(featureKey,
regions);
+ }
+ if (!regions.contains(name)) {
+ regions.add(name);
+ }
+ }
+ }
+
+ String packagesKey = "whitelist.region." + name;
+ List<String> packages =
whitelistConfiguration.get(packagesKey);
+ if (packages == null) {
+ packages = new ArrayList<>();
+ whitelistConfiguration.put(packagesKey,
packages);
+ }
+ for (JsonValue pkg : exports) {
+ if (pkg.getValueType() == ValueType.STRING) {
+ String p = pkg.toString();
+ if (!packages.contains(p)) {
+ packages.add(p);
+ }
+ }
+ }
+ }
+ }
+ }
+
config.getInstallation().addConfiguration(WHITELIST_ENFORCER_PID, null,
whitelistConfiguration);
} else {
if ( ext.isRequired() ) {
throw new Exception("Unknown required extension " +
ext.getName());
diff --git
a/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
b/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
index 2dff508..1f9eafc 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
@@ -89,7 +89,7 @@ public class Installation implements LauncherRunContext {
* @param factoryPid The factory pid
* @param properties The propertis
*/
- public void addConfiguration(final String pid, final String factoryPid,
final Dictionary<String, Object> properties) {
+ public void addConfiguration(final String pid, final String factoryPid,
final Dictionary<String, ?> properties) {
this.configurations.add(new Object[] {pid, factoryPid, properties});
}