Skip to content

Commit

Permalink
support for user-agent triggers, cancel queue actions and debug infor…
Browse files Browse the repository at this point in the history
…mation cookie
  • Loading branch information
frwiqueueit committed Aug 31, 2017
1 parent 289dbac commit b32b57c
Show file tree
Hide file tree
Showing 12 changed files with 1,333 additions and 532 deletions.
53 changes: 53 additions & 0 deletions SDK/src/queueit/knownuserv3/sdk/CancelEventConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package queueit.knownuserv3.sdk;

public class CancelEventConfig {

private String eventId;
private String queueDomain;
private String cookieDomain;
private int version;

public String getEventId() {
return eventId;
}

public void setEventId(String eventId) {
this.eventId = eventId;
}

public String getQueueDomain() {
return queueDomain;
}

public void setQueueDomain(String queueDomain) {
this.queueDomain = queueDomain;
}

public String getCookieDomain() {
return cookieDomain;
}

public void setCookieDomain(String cookieDomain) {
this.cookieDomain = cookieDomain;
}

public int getVersion() {
return version;
}

public void setVersion(int version) {
this.version = version;
}

public CancelEventConfig() {
this.version = -1;
}

@Override
public String toString() {
return "EventId:" + eventId +
"&Version:" + version +
"&QueueDomain:" + queueDomain +
"&CookieDomain:" + cookieDomain;
}
}
7 changes: 7 additions & 0 deletions SDK/src/queueit/knownuserv3/sdk/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package queueit.knownuserv3.sdk;

final class ActionType {

public static final String CANCEL_ACTION = "Cancel";
public static final String QUEUE_ACTION = "Queue";
}
269 changes: 203 additions & 66 deletions SDK/src/queueit/knownuserv3/sdk/KnownUser.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package queueit.knownuserv3.sdk;

public class EventConfig {
public class QueueEventConfig {

private String eventId;
private String layoutName;
Expand Down Expand Up @@ -75,7 +75,19 @@ public void setVersion(int version) {
this.version = version;
}

public EventConfig() {
public QueueEventConfig() {
this.version = -1;
}

@Override
public String toString() {
return "EventId:" + eventId +
"&Version:" + version +
"&QueueDomain:" + queueDomain +
"&CookieDomain:" + cookieDomain +
"&ExtendCookieValidity:" + extendCookieValidity +
"&CookieValidityMinute:" + cookieValidityMinute +
"&LayoutName:" + layoutName +
"&Culture:" + culture;
}
}
23 changes: 16 additions & 7 deletions SDK/src/queueit/knownuserv3/sdk/QueueITHelpers.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class QueueParameterHelper {
public static final String CookieValidityMinuteKey = "cv";
public static final String HashKey = "h";
public static final String QueueIdKey = "q";

public static final String EventIdKey = "e";
public static final String RedirectTypeKey = "rt";
public static final String EventIdKey = "e";
public static final String KeyValueSeparatorChar = "_";
public static final String KeyValueSeparatorGroupChar = "~";

Expand Down Expand Up @@ -76,15 +76,15 @@ public static QueueUrlParams extractQueueParams(String queueitToken) {
case QueueIdKey:
result.setQueueId(keyValueArr[1]);
break;
case ExtendableCookieKey: {

case ExtendableCookieKey:
result.setExtendableCookie(Boolean.parseBoolean(keyValueArr[1]));
break;
}
break;
case HashKey:
result.setHashCode(keyValueArr[1]);
break;

case RedirectTypeKey:
result.setRedirectType(keyValueArr[1]);
break;
}
}
String queueITTokenWithoutHash = result.getQueueITToken().replace(KeyValueSeparatorGroupChar + HashKey + KeyValueSeparatorChar + result.getHashCode(), "");
Expand Down Expand Up @@ -124,6 +124,7 @@ class QueueUrlParams {
private Integer cookieValidityMinute;
private long timeStamp;
private String queueId;
private String redirectType;

public QueueUrlParams(){
this.eventId = "";
Expand Down Expand Up @@ -199,4 +200,12 @@ public void setQueueId(String queueId) {
public String getQueueId() {
return this.queueId;
}

public void setRedirectType(String redirectType) {
this.redirectType = redirectType;
}

public String getRedirectType() {
return this.redirectType;
}
}
8 changes: 7 additions & 1 deletion SDK/src/queueit/knownuserv3/sdk/RequestValidationResult.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@

public class RequestValidationResult {

private String actionType;
private String eventId;
private String redirectUrl;
private String queueId;

public RequestValidationResult(String eventId, String queueId, String redirectUrl) {
public RequestValidationResult(String actionType, String eventId, String queueId, String redirectUrl) {
this.actionType = actionType;
this.eventId = eventId;
this.queueId = queueId;
this.redirectUrl = redirectUrl;
}

public String getActionType() {
return actionType;
}

public String getEventId() {
return eventId;
}
Expand Down
91 changes: 60 additions & 31 deletions SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@

interface IUserInQueueService {

RequestValidationResult validateRequest(
RequestValidationResult validateQueueRequest(
String targetUrl,
String queueitToken,
EventConfig config,
QueueEventConfig config,
String customerId,
String secretKey) throws Exception;

void cancelQueueCookie(String eventId, String cookieDomain);

RequestValidationResult validateCancelRequest(
String targetUrl,
CancelEventConfig config,
String customerId,
String secretKey) throws Exception;

void extendQueueCookie(
String eventId,
int cookieValidityMinute,
Expand All @@ -25,7 +29,7 @@ void extendQueueCookie(

class UserInQueueService implements IUserInQueueService {

public static final String SDK_VERSION = "1.0.0.0";
public static final String SDK_VERSION = "3.2.0";
private final IUserInQueueStateRepository _userInQueueStateRepository;

public UserInQueueService(
Expand All @@ -34,10 +38,10 @@ public UserInQueueService(
}

@Override
public RequestValidationResult validateRequest(
public RequestValidationResult validateQueueRequest(
String targetUrl,
String queueitToken,
EventConfig config,
QueueEventConfig config,
String customerId,
String secretKey
) throws Exception {
Expand All @@ -51,7 +55,7 @@ public RequestValidationResult validateRequest(
config.getCookieValidityMinute(),
secretKey);
}
return new RequestValidationResult(config.getEventId(), stateInfo.getQueueId(), null);
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), stateInfo.getQueueId(), null);
}

QueueUrlParams queueParmas = QueueParameterHelper.extractQueueParams(queueitToken);
Expand All @@ -66,7 +70,7 @@ public RequestValidationResult validateRequest(
private RequestValidationResult getQueueITTokenValidationResult(
String targetUrl,
String eventId,
EventConfig config,
QueueEventConfig config,
QueueUrlParams queueParams,
String customerId,
String secretKey) throws Exception {
Expand All @@ -91,17 +95,17 @@ private RequestValidationResult getQueueITTokenValidationResult(
queueParams.getCookieValidityMinute() != null ? queueParams.getCookieValidityMinute() : config.getCookieValidityMinute(),
secretKey);

return new RequestValidationResult(config.getEventId(), queueParams.getQueueId(), null);
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), queueParams.getQueueId(), null);
}

private RequestValidationResult getVaidationErrorResult(
String customerId,
String targetUrl,
EventConfig config,
QueueEventConfig config,
QueueUrlParams qParams,
String errorCode) throws Exception {

String query = getQueryString(customerId, config)
String query = getQueryString(customerId, config.getEventId(), config.getVersion(), config.getCulture(), config.getLayoutName())
+ "&queueittoken=" + qParams.getQueueITToken()
+ "&ts=" + System.currentTimeMillis() / 1000L;
if(!Utils.isNullOrWhiteSpace(targetUrl))
Expand All @@ -113,49 +117,46 @@ private RequestValidationResult getVaidationErrorResult(
domainAlias = domainAlias + "/";
}
String redirectUrl = "https://" + domainAlias + "error/" + errorCode + "?" + query;
return new RequestValidationResult(config.getEventId(), null, redirectUrl);
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), null, redirectUrl);
}

private RequestValidationResult getInQueueRedirectResult(
String targetUrl,
EventConfig config,
QueueEventConfig config,
String customerId) throws Exception {

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

return new RequestValidationResult(config.getEventId(), null, redirectUrl);
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), null, redirectUrl);
}

private String getQueryString(
String customerId,
EventConfig config) throws Exception {
String eventId,
int configVersion,
String culture,
String layoutName) throws Exception {
ArrayList<String> queryStringList = new ArrayList<>();
queryStringList.add("c=" + URLEncoder.encode(customerId, "UTF-8"));
queryStringList.add("e=" + URLEncoder.encode(config.getEventId(), "UTF-8"));
queryStringList.add("e=" + URLEncoder.encode(eventId, "UTF-8"));
queryStringList.add("ver=v3-java-" + URLEncoder.encode(SDK_VERSION, "UTF-8"));
queryStringList.add("cver=" + URLEncoder.encode(String.valueOf(config.getVersion()), "UTF-8"));
queryStringList.add("cver=" + URLEncoder.encode(String.valueOf(configVersion), "UTF-8"));

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

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

return String.join("&", queryStringList);
}

@Override
public void cancelQueueCookie(String eventId, String cookieDomain) {
this._userInQueueStateRepository.cancelQueueCookie(eventId, cookieDomain);
}


@Override
public void extendQueueCookie(
String eventId,
Expand All @@ -164,4 +165,32 @@ public void extendQueueCookie(
String secretKey) {
this._userInQueueStateRepository.extendQueueCookie(eventId, cookieValidityMinute, cookieDomain, secretKey);
}

@Override
public RequestValidationResult validateCancelRequest(
String targetUrl, CancelEventConfig config, String customerId, String secretKey) throws Exception {

StateInfo state = _userInQueueStateRepository.getState(config.getEventId(), secretKey);

if (state.isValid()) {
this._userInQueueStateRepository.cancelQueueCookie(config.getEventId(), config.getCookieDomain());

String query = getQueryString(customerId, config.getEventId(), config.getVersion(), null, null);

if(targetUrl != null)
query += "&r=" + URLEncoder.encode(targetUrl, "UTF-8");

String domainAlias = config.getQueueDomain();
if (!domainAlias.endsWith("/"))
domainAlias = domainAlias + "/";

String redirectUrl = "https://" + domainAlias + "cancel/" + customerId + "/" + config.getEventId() + "/?" + query;

return new RequestValidationResult(ActionType.CANCEL_ACTION, config.getEventId(), state.getQueueId(), redirectUrl);
}
else
{
return new RequestValidationResult(ActionType.CANCEL_ACTION, config.getEventId(), null, null);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -155,9 +155,7 @@ public void cancelQueueCookie(
String eventId,
String cookieDomain) {
String cookieKey = getCookieKey(eventId);
if (cookieManager.getCookie(cookieKey) != null) {
cookieManager.setCookie(cookieKey, null, 0, cookieDomain);
}
cookieManager.setCookie(cookieKey, null, 0, cookieDomain);
}

@Override
Expand Down Expand Up @@ -187,8 +185,7 @@ public void extendQueueCookie(

interface ICookieManager {

void setCookie(String cookieName, String cookieValue, int maxAg, String cookieDomain);

void setCookie(String cookieName, String cookieValue, Integer expiration, String cookieDomain);
String getCookie(String cookieName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ public class IntegrationConfigModel {
public String CookieDomain;
public String LayoutName;
public String Culture;
public boolean ExtendCookieValidity;
public int CookieValidityMinute;
public Boolean ExtendCookieValidity;
public Integer CookieValidityMinute;
public String QueueDomain;
public String RedirectLogic;
public String ForcedTargetUrl;
public String ActionType;
public TriggerModel[] Triggers;
}
Loading

0 comments on commit b32b57c

Please sign in to comment.