WhitelistBlacklistServlet.java
4.69 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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.servlet.ServletException
* org.apache.commons.lang.StringUtils
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.sling.SlingServlet
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.request.RequestParameter
* org.apache.sling.api.request.RequestParameterMap
* org.apache.sling.api.servlets.SlingAllMethodsServlet
* org.apache.sling.commons.json.JSONException
* org.apache.sling.commons.json.JSONObject
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.granite.offloading.impl.servlets;
import com.adobe.granite.offloading.api.OffloadingException;
import com.adobe.granite.offloading.api.OffloadingTopicManager;
import com.adobe.granite.offloading.api.TopicConfigurationAction;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SlingServlet(selectors={"config"}, resourceTypes={"granite/offloading/components/view"}, methods={"POST"}, extensions={"html"})
public class WhitelistBlacklistServlet
extends SlingAllMethodsServlet {
private static final Logger LOG = LoggerFactory.getLogger(WhitelistBlacklistServlet.class);
static final String SLING_ID = "slingID";
@Reference
private OffloadingTopicManager otm;
/*
* WARNING - Removed try catching itself - possible behaviour change.
*/
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
try {
String instanceID;
RequestParameterMap rpm = request.getRequestParameterMap();
if (rpm.isEmpty()) {
throw new OffloadingException("No configuration request parameters have been sent.");
}
RequestParameter slingID = rpm.getValue("slingID");
if (slingID == null || StringUtils.isEmpty((String)(instanceID = slingID.getString()))) {
throw new OffloadingException("The request doesn't contain a slingID parameter.");
}
if (rpm.size() < 2) {
throw new OffloadingException("The request doesn't contain any configuration parameters.");
}
HashMap<TopicConfigurationAction, Set<String>> configuration = new HashMap<TopicConfigurationAction, Set<String>>();
for (String paramName : rpm.keySet()) {
if (!paramName.startsWith("config:")) continue;
String topic = paramName.substring(7);
String action = rpm.getValue(paramName).getString();
TopicConfigurationAction tca = TopicConfigurationAction.getAction(action);
if (tca == null) continue;
Set<String> actionSet = configuration.get((Object)tca);
if (actionSet == null) {
actionSet = new HashSet<String>();
configuration.put(tca, actionSet);
}
actionSet.add(topic);
}
this.otm.configureInstance(instanceID, configuration);
}
catch (OffloadingException e) {
LOG.error("Unable to perform instance whitelist/blacklist configuration.", (Throwable)e);
PrintWriter out = response.getWriter();
JSONObject json = new JSONObject();
try {
json.put("error", (Object)"Unable to perform instance whitelist/blacklist configuration.");
}
catch (JSONException je) {}
finally {
out.print(json.toString());
response.setStatus(400);
}
}
}
protected void bindOtm(OffloadingTopicManager offloadingTopicManager) {
this.otm = offloadingTopicManager;
}
protected void unbindOtm(OffloadingTopicManager offloadingTopicManager) {
if (this.otm == offloadingTopicManager) {
this.otm = null;
}
}
}