AbstractSubscriptionServlet.java
5.76 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.day.cq.i18n.I18n
* com.day.cq.wcm.api.Page
* com.day.cq.wcm.api.PageManager
* com.day.cq.wcm.webservicesupport.Configuration
* javax.servlet.ServletException
* javax.servlet.http.HttpServletRequest
* org.apache.sling.api.SlingHttpServletRequest
* org.apache.sling.api.SlingHttpServletResponse
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.day.cq.mcm.campaign.servlets;
import com.day.cq.i18n.I18n;
import com.day.cq.mcm.campaign.CallResults;
import com.day.cq.mcm.campaign.CampaignConnector;
import com.day.cq.mcm.campaign.CampaignCredentials;
import com.day.cq.mcm.campaign.CampaignException;
import com.day.cq.mcm.campaign.ConnectionException;
import com.day.cq.mcm.campaign.servlets.AbstractProfileServlet;
import com.day.cq.mcm.campaign.servlets.util.EncryptedPKParameter;
import com.day.cq.mcm.campaign.servlets.util.ParameterMapper;
import com.day.cq.mcm.campaign.servlets.util.SubscriptionParameters;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.webservicesupport.Configuration;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class AbstractSubscriptionServlet
extends AbstractProfileServlet {
protected final Logger log;
AbstractSubscriptionServlet() {
this.log = LoggerFactory.getLogger(this.getClass());
}
protected void doRequest(String fn, CampaignConnector connector, Page page, Map<String, String> parameters, Iterator<String> subscriptions) throws CampaignException {
Resource resource = page.getContentResource();
Configuration config = connector.getWebserviceConfig(resource);
CampaignCredentials credentials = connector.retrieveCredentials(config);
while (subscriptions.hasNext()) {
String subscription = subscriptions.next();
CallResults callResults = null;
try {
parameters.put("serviceId", subscription);
callResults = connector.postFunction(fn, parameters, credentials);
continue;
}
catch (ConnectionException e) {
if (e.getStatusCode() == 404) {
this.log.warn("Could not subscribe; unknown user or service.");
}
this.log.warn("Could not execute subscription for service '{}'", (Object)subscription);
throw e;
}
finally {
if (callResults == null) continue;
callResults.destroy();
continue;
}
}
}
protected abstract void execute(Page var1, Map<String, String> var2, Iterator<String> var3) throws CampaignException;
protected void doPost(SlingHttpServletRequest req, SlingHttpServletResponse resp) throws ServletException, IOException {
EncryptedPKParameter epkp;
if (this.isErrorHandling(req)) {
return;
}
I18n i18n = new I18n((HttpServletRequest)req);
String formPath = req.getParameter(":formstart");
if (formPath == null) {
this.handleError(req, resp, null, i18n.get("Missing parameter '{0}'.", null, new Object[]{":formstart"}));
return;
}
ResourceResolver resolver = req.getResourceResolver();
Resource form = resolver.getResource(formPath);
if (form == null) {
this.handleError(req, resp, form, i18n.get("Could not determine form '{0}'.", null, new Object[]{formPath}));
return;
}
PageManager pageManager = (PageManager)req.getResourceResolver().adaptTo(PageManager.class);
Page page = pageManager.getContainingPage(formPath);
try {
ParameterMapper mapper = new ParameterMapper();
mapper.parseParameters(req, form);
epkp = mapper.getEncryptedPKParameter();
LinkedHashMap<String, String> parameters = new LinkedHashMap<String, String>();
mapper.addEncryptedPK(parameters);
mapper.addReconciliationKey(parameters, false);
SubscriptionParameters subscriptPrms = new SubscriptionParameters();
subscriptPrms.parseParameters(req, form);
Iterator<String> subscriptions = subscriptPrms.getSubscriptions();
this.execute(page, parameters, subscriptions);
}
catch (CampaignException e) {
this.log.error("Could not execute subscription request.", (Throwable)e);
this.handleError(req, resp, form, i18n.get("Could not (un)subscribe."));
return;
}
String redirect = req.getParameter(":redirect");
if (redirect == null) {
String epkpValue;
redirect = page.getPath() + ".html";
if (epkp != null && (epkpValue = epkp.getValue()) != null && epkpValue.length() > 0) {
try {
redirect = redirect + "?" + epkp.getName() + "=" + URLEncoder.encode(epkp.getValue(), "UTF-8") + "&cq_ck=" + new Date().getTime();
}
catch (UnsupportedEncodingException uee) {
// empty catch block
}
}
}
resp.sendRedirect(redirect);
}
}