DiscoveryConfigurationCache.java
3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.Service
* org.apache.sling.commons.osgi.PropertiesUtil
* org.osgi.service.cm.Configuration
* org.osgi.service.cm.ConfigurationAdmin
* org.osgi.service.cm.ConfigurationEvent
* org.osgi.service.cm.ConfigurationListener
* org.osgi.service.component.ComponentContext
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.granite.offloading.impl;
import java.util.Dictionary;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListSet;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.cm.ConfigurationEvent;
import org.osgi.service.cm.ConfigurationListener;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Service(value={ConfigurationListener.class, DiscoveryConfigurationCache.class})
public class DiscoveryConfigurationCache
implements ConfigurationListener {
private static final Logger LOG = LoggerFactory.getLogger(DiscoveryConfigurationCache.class);
private Set<String> allowedHosts = new ConcurrentSkipListSet<String>();
@Reference
private ConfigurationAdmin configurationAdmin;
public void configurationEvent(ConfigurationEvent configurationEvent) {
if (configurationEvent.getPid().equals("org.apache.sling.discovery.impl.Config")) {
this.updateAllowedHosts();
}
}
public Set<String> getAllowedHosts() {
return this.allowedHosts;
}
private void updateAllowedHosts() {
try {
String filter = "(service.pid=org.apache.sling.discovery.impl.Config)";
Configuration[] configurations = this.configurationAdmin.listConfigurations(filter);
if (configurations != null) {
boolean clearSet = false;
for (Configuration c : configurations) {
String[] whitelistedHosts;
Dictionary properties = c.getProperties();
if (properties == null || (whitelistedHosts = PropertiesUtil.toStringArray(properties.get("topologyConnectorWhitelist"))) == null) continue;
if (!clearSet) {
this.allowedHosts.clear();
clearSet = true;
}
for (String host : whitelistedHosts) {
this.allowedHosts.add(host);
}
}
}
}
catch (Exception e) {
LOG.error("Cannot search configurations for PID=org.apache.sling.discovery.impl.Config", (Throwable)e);
}
}
protected void activate(ComponentContext componentContext) {
this.updateAllowedHosts();
}
protected void bindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = configurationAdmin;
}
protected void unbindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
if (this.configurationAdmin == configurationAdmin) {
this.configurationAdmin = null;
}
}
}