Skip to content

Commit b32b57c

Browse files
committed
support for user-agent triggers, cancel queue actions and debug information cookie
1 parent 289dbac commit b32b57c

12 files changed

+1333
-532
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package queueit.knownuserv3.sdk;
2+
3+
public class CancelEventConfig {
4+
5+
private String eventId;
6+
private String queueDomain;
7+
private String cookieDomain;
8+
private int version;
9+
10+
public String getEventId() {
11+
return eventId;
12+
}
13+
14+
public void setEventId(String eventId) {
15+
this.eventId = eventId;
16+
}
17+
18+
public String getQueueDomain() {
19+
return queueDomain;
20+
}
21+
22+
public void setQueueDomain(String queueDomain) {
23+
this.queueDomain = queueDomain;
24+
}
25+
26+
public String getCookieDomain() {
27+
return cookieDomain;
28+
}
29+
30+
public void setCookieDomain(String cookieDomain) {
31+
this.cookieDomain = cookieDomain;
32+
}
33+
34+
public int getVersion() {
35+
return version;
36+
}
37+
38+
public void setVersion(int version) {
39+
this.version = version;
40+
}
41+
42+
public CancelEventConfig() {
43+
this.version = -1;
44+
}
45+
46+
@Override
47+
public String toString() {
48+
return "EventId:" + eventId +
49+
"&Version:" + version +
50+
"&QueueDomain:" + queueDomain +
51+
"&CookieDomain:" + cookieDomain;
52+
}
53+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package queueit.knownuserv3.sdk;
2+
3+
final class ActionType {
4+
5+
public static final String CANCEL_ACTION = "Cancel";
6+
public static final String QUEUE_ACTION = "Queue";
7+
}

SDK/src/queueit/knownuserv3/sdk/KnownUser.java

Lines changed: 203 additions & 66 deletions
Large diffs are not rendered by default.

SDK/src/queueit/knownuserv3/sdk/EventConfig.java renamed to SDK/src/queueit/knownuserv3/sdk/QueueEventConfig.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package queueit.knownuserv3.sdk;
22

3-
public class EventConfig {
3+
public class QueueEventConfig {
44

55
private String eventId;
66
private String layoutName;
@@ -75,7 +75,19 @@ public void setVersion(int version) {
7575
this.version = version;
7676
}
7777

78-
public EventConfig() {
78+
public QueueEventConfig() {
7979
this.version = -1;
8080
}
81+
82+
@Override
83+
public String toString() {
84+
return "EventId:" + eventId +
85+
"&Version:" + version +
86+
"&QueueDomain:" + queueDomain +
87+
"&CookieDomain:" + cookieDomain +
88+
"&ExtendCookieValidity:" + extendCookieValidity +
89+
"&CookieValidityMinute:" + cookieValidityMinute +
90+
"&LayoutName:" + layoutName +
91+
"&Culture:" + culture;
92+
}
8193
}

SDK/src/queueit/knownuserv3/sdk/QueueITHelpers.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class QueueParameterHelper {
3535
public static final String CookieValidityMinuteKey = "cv";
3636
public static final String HashKey = "h";
3737
public static final String QueueIdKey = "q";
38-
39-
public static final String EventIdKey = "e";
38+
public static final String RedirectTypeKey = "rt";
39+
public static final String EventIdKey = "e";
4040
public static final String KeyValueSeparatorChar = "_";
4141
public static final String KeyValueSeparatorGroupChar = "~";
4242

@@ -76,15 +76,15 @@ public static QueueUrlParams extractQueueParams(String queueitToken) {
7676
case QueueIdKey:
7777
result.setQueueId(keyValueArr[1]);
7878
break;
79-
case ExtendableCookieKey: {
80-
79+
case ExtendableCookieKey:
8180
result.setExtendableCookie(Boolean.parseBoolean(keyValueArr[1]));
82-
break;
83-
}
81+
break;
8482
case HashKey:
8583
result.setHashCode(keyValueArr[1]);
8684
break;
87-
85+
case RedirectTypeKey:
86+
result.setRedirectType(keyValueArr[1]);
87+
break;
8888
}
8989
}
9090
String queueITTokenWithoutHash = result.getQueueITToken().replace(KeyValueSeparatorGroupChar + HashKey + KeyValueSeparatorChar + result.getHashCode(), "");
@@ -124,6 +124,7 @@ class QueueUrlParams {
124124
private Integer cookieValidityMinute;
125125
private long timeStamp;
126126
private String queueId;
127+
private String redirectType;
127128

128129
public QueueUrlParams(){
129130
this.eventId = "";
@@ -199,4 +200,12 @@ public void setQueueId(String queueId) {
199200
public String getQueueId() {
200201
return this.queueId;
201202
}
203+
204+
public void setRedirectType(String redirectType) {
205+
this.redirectType = redirectType;
206+
}
207+
208+
public String getRedirectType() {
209+
return this.redirectType;
210+
}
202211
}

SDK/src/queueit/knownuserv3/sdk/RequestValidationResult.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@
22

33
public class RequestValidationResult {
44

5+
private String actionType;
56
private String eventId;
67
private String redirectUrl;
78
private String queueId;
89

9-
public RequestValidationResult(String eventId, String queueId, String redirectUrl) {
10+
public RequestValidationResult(String actionType, String eventId, String queueId, String redirectUrl) {
11+
this.actionType = actionType;
1012
this.eventId = eventId;
1113
this.queueId = queueId;
1214
this.redirectUrl = redirectUrl;
1315
}
1416

17+
public String getActionType() {
18+
return actionType;
19+
}
20+
1521
public String getEventId() {
1622
return eventId;
1723
}

SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java

Lines changed: 60 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@
66

77
interface IUserInQueueService {
88

9-
RequestValidationResult validateRequest(
9+
RequestValidationResult validateQueueRequest(
1010
String targetUrl,
1111
String queueitToken,
12-
EventConfig config,
12+
QueueEventConfig config,
1313
String customerId,
1414
String secretKey) throws Exception;
1515

16-
void cancelQueueCookie(String eventId, String cookieDomain);
17-
16+
RequestValidationResult validateCancelRequest(
17+
String targetUrl,
18+
CancelEventConfig config,
19+
String customerId,
20+
String secretKey) throws Exception;
21+
1822
void extendQueueCookie(
1923
String eventId,
2024
int cookieValidityMinute,
@@ -25,7 +29,7 @@ void extendQueueCookie(
2529

2630
class UserInQueueService implements IUserInQueueService {
2731

28-
public static final String SDK_VERSION = "1.0.0.0";
32+
public static final String SDK_VERSION = "3.2.0";
2933
private final IUserInQueueStateRepository _userInQueueStateRepository;
3034

3135
public UserInQueueService(
@@ -34,10 +38,10 @@ public UserInQueueService(
3438
}
3539

3640
@Override
37-
public RequestValidationResult validateRequest(
41+
public RequestValidationResult validateQueueRequest(
3842
String targetUrl,
3943
String queueitToken,
40-
EventConfig config,
44+
QueueEventConfig config,
4145
String customerId,
4246
String secretKey
4347
) throws Exception {
@@ -51,7 +55,7 @@ public RequestValidationResult validateRequest(
5155
config.getCookieValidityMinute(),
5256
secretKey);
5357
}
54-
return new RequestValidationResult(config.getEventId(), stateInfo.getQueueId(), null);
58+
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), stateInfo.getQueueId(), null);
5559
}
5660

5761
QueueUrlParams queueParmas = QueueParameterHelper.extractQueueParams(queueitToken);
@@ -66,7 +70,7 @@ public RequestValidationResult validateRequest(
6670
private RequestValidationResult getQueueITTokenValidationResult(
6771
String targetUrl,
6872
String eventId,
69-
EventConfig config,
73+
QueueEventConfig config,
7074
QueueUrlParams queueParams,
7175
String customerId,
7276
String secretKey) throws Exception {
@@ -91,17 +95,17 @@ private RequestValidationResult getQueueITTokenValidationResult(
9195
queueParams.getCookieValidityMinute() != null ? queueParams.getCookieValidityMinute() : config.getCookieValidityMinute(),
9296
secretKey);
9397

94-
return new RequestValidationResult(config.getEventId(), queueParams.getQueueId(), null);
98+
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), queueParams.getQueueId(), null);
9599
}
96100

97101
private RequestValidationResult getVaidationErrorResult(
98102
String customerId,
99103
String targetUrl,
100-
EventConfig config,
104+
QueueEventConfig config,
101105
QueueUrlParams qParams,
102106
String errorCode) throws Exception {
103107

104-
String query = getQueryString(customerId, config)
108+
String query = getQueryString(customerId, config.getEventId(), config.getVersion(), config.getCulture(), config.getLayoutName())
105109
+ "&queueittoken=" + qParams.getQueueITToken()
106110
+ "&ts=" + System.currentTimeMillis() / 1000L;
107111
if(!Utils.isNullOrWhiteSpace(targetUrl))
@@ -113,49 +117,46 @@ private RequestValidationResult getVaidationErrorResult(
113117
domainAlias = domainAlias + "/";
114118
}
115119
String redirectUrl = "https://" + domainAlias + "error/" + errorCode + "?" + query;
116-
return new RequestValidationResult(config.getEventId(), null, redirectUrl);
120+
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), null, redirectUrl);
117121
}
118122

119123
private RequestValidationResult getInQueueRedirectResult(
120124
String targetUrl,
121-
EventConfig config,
125+
QueueEventConfig config,
122126
String customerId) throws Exception {
123127

124128
String redirectUrl = "https://" + config.getQueueDomain() + "?"
125-
+ getQueryString(customerId, config);
126-
if(!Utils.isNullOrWhiteSpace(targetUrl))
127-
{
129+
+ getQueryString(customerId, config.getEventId(), config.getVersion(), config.getCulture(), config.getLayoutName());
130+
if(!Utils.isNullOrWhiteSpace(targetUrl)) {
128131
redirectUrl += "&t=" + URLEncoder.encode(targetUrl, "UTF-8");
129132
}
130133

131-
return new RequestValidationResult(config.getEventId(), null, redirectUrl);
134+
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), null, redirectUrl);
132135
}
133136

134137
private String getQueryString(
135138
String customerId,
136-
EventConfig config) throws Exception {
139+
String eventId,
140+
int configVersion,
141+
String culture,
142+
String layoutName) throws Exception {
137143
ArrayList<String> queryStringList = new ArrayList<>();
138144
queryStringList.add("c=" + URLEncoder.encode(customerId, "UTF-8"));
139-
queryStringList.add("e=" + URLEncoder.encode(config.getEventId(), "UTF-8"));
145+
queryStringList.add("e=" + URLEncoder.encode(eventId, "UTF-8"));
140146
queryStringList.add("ver=v3-java-" + URLEncoder.encode(SDK_VERSION, "UTF-8"));
141-
queryStringList.add("cver=" + URLEncoder.encode(String.valueOf(config.getVersion()), "UTF-8"));
147+
queryStringList.add("cver=" + URLEncoder.encode(String.valueOf(configVersion), "UTF-8"));
142148

143-
if (!Utils.isNullOrWhiteSpace(config.getCulture())) {
144-
queryStringList.add("cid=" + URLEncoder.encode(config.getCulture(), "UTF-8"));
149+
if (!Utils.isNullOrWhiteSpace(culture)) {
150+
queryStringList.add("cid=" + URLEncoder.encode(culture, "UTF-8"));
145151
}
146152

147-
if (!Utils.isNullOrWhiteSpace(config.getLayoutName())) {
148-
queryStringList.add("l=" + URLEncoder.encode(config.getLayoutName(), "UTF-8"));
153+
if (!Utils.isNullOrWhiteSpace(layoutName)) {
154+
queryStringList.add("l=" + URLEncoder.encode(layoutName, "UTF-8"));
149155
}
150156

151157
return String.join("&", queryStringList);
152158
}
153-
154-
@Override
155-
public void cancelQueueCookie(String eventId, String cookieDomain) {
156-
this._userInQueueStateRepository.cancelQueueCookie(eventId, cookieDomain);
157-
}
158-
159+
159160
@Override
160161
public void extendQueueCookie(
161162
String eventId,
@@ -164,4 +165,32 @@ public void extendQueueCookie(
164165
String secretKey) {
165166
this._userInQueueStateRepository.extendQueueCookie(eventId, cookieValidityMinute, cookieDomain, secretKey);
166167
}
168+
169+
@Override
170+
public RequestValidationResult validateCancelRequest(
171+
String targetUrl, CancelEventConfig config, String customerId, String secretKey) throws Exception {
172+
173+
StateInfo state = _userInQueueStateRepository.getState(config.getEventId(), secretKey);
174+
175+
if (state.isValid()) {
176+
this._userInQueueStateRepository.cancelQueueCookie(config.getEventId(), config.getCookieDomain());
177+
178+
String query = getQueryString(customerId, config.getEventId(), config.getVersion(), null, null);
179+
180+
if(targetUrl != null)
181+
query += "&r=" + URLEncoder.encode(targetUrl, "UTF-8");
182+
183+
String domainAlias = config.getQueueDomain();
184+
if (!domainAlias.endsWith("/"))
185+
domainAlias = domainAlias + "/";
186+
187+
String redirectUrl = "https://" + domainAlias + "cancel/" + customerId + "/" + config.getEventId() + "/?" + query;
188+
189+
return new RequestValidationResult(ActionType.CANCEL_ACTION, config.getEventId(), state.getQueueId(), redirectUrl);
190+
}
191+
else
192+
{
193+
return new RequestValidationResult(ActionType.CANCEL_ACTION, config.getEventId(), null, null);
194+
}
195+
}
167196
}

SDK/src/queueit/knownuserv3/sdk/UserInQueueStateCookieRepository.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,7 @@ public void cancelQueueCookie(
155155
String eventId,
156156
String cookieDomain) {
157157
String cookieKey = getCookieKey(eventId);
158-
if (cookieManager.getCookie(cookieKey) != null) {
159-
cookieManager.setCookie(cookieKey, null, 0, cookieDomain);
160-
}
158+
cookieManager.setCookie(cookieKey, null, 0, cookieDomain);
161159
}
162160

163161
@Override
@@ -187,8 +185,7 @@ public void extendQueueCookie(
187185

188186
interface ICookieManager {
189187

190-
void setCookie(String cookieName, String cookieValue, int maxAg, String cookieDomain);
191-
188+
void setCookie(String cookieName, String cookieValue, Integer expiration, String cookieDomain);
192189
String getCookie(String cookieName);
193190
}
194191

SDK/src/queueit/knownuserv3/sdk/integrationconfig/IntegrationConfigModel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ public class IntegrationConfigModel {
77
public String CookieDomain;
88
public String LayoutName;
99
public String Culture;
10-
public boolean ExtendCookieValidity;
11-
public int CookieValidityMinute;
10+
public Boolean ExtendCookieValidity;
11+
public Integer CookieValidityMinute;
1212
public String QueueDomain;
1313
public String RedirectLogic;
1414
public String ForcedTargetUrl;
15+
public String ActionType;
1516
public TriggerModel[] Triggers;
1617
}

0 commit comments

Comments
 (0)