Skip to content

Commit

Permalink
version 3.6.1
Browse files Browse the repository at this point in the history
  • Loading branch information
frwiqueueit committed Jun 11, 2020
1 parent 96036ba commit da96a75
Show file tree
Hide file tree
Showing 5 changed files with 234 additions and 55 deletions.
92 changes: 64 additions & 28 deletions SDK/src/main/java/queueit/knownuserv3/sdk/UserInQueueService.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ void extendQueueCookie(

class UserInQueueService implements IUserInQueueService {

public static final String SDK_VERSION = "v3-java-" + "3.6.0";
public static final String SDK_VERSION = "v3-java-" + "3.6.1";
public final IUserInQueueStateRepository _userInQueueStateRepository;

public UserInQueueService(IUserInQueueStateRepository queueStateRepository) {
Expand Down Expand Up @@ -55,35 +55,37 @@ public RequestValidationResult validateQueueRequest(
}
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), stateInfo.getQueueId(), null, stateInfo.getRedirectType(), config.getActionName());
}
QueueUrlParams queueParmas = QueueParameterHelper.extractQueueParams(queueitToken);
QueueUrlParams queueParams = QueueParameterHelper.extractQueueParams(queueitToken);
RequestValidationResult requestValidationResult;
boolean isTokenValid = false;

if (queueParmas != null) {
return getQueueITTokenValidationResult(targetUrl, config, queueParmas, customerId, secretKey);
} else {
return cancelQueueCookieReturnQueueResult(targetUrl, config, customerId);
if (queueParams != null) {
TokenValidationResult tokenValidationResult = validateToken(config, queueParams, secretKey);
isTokenValid = tokenValidationResult.isValid();

if(isTokenValid){
requestValidationResult = getValidTokenResult(config, queueParams, secretKey);
}
else{
requestValidationResult = getErrorResult(customerId, targetUrl, config, queueParams, tokenValidationResult.getErrorCode());
}
}
}

private RequestValidationResult getQueueITTokenValidationResult(
String targetUrl,
QueueEventConfig config,
QueueUrlParams queueParams,
String customerId,
String secretKey) throws Exception {

String calculatedHash = HashHelper.generateSHA256Hash(secretKey, queueParams.getQueueITTokenWithoutHash());
if (!calculatedHash.toUpperCase().equals(queueParams.getHashCode().toUpperCase())) {
return cancelQueueCookieReturnErrorResult(customerId, targetUrl, config, queueParams, "hash");
else{
requestValidationResult = getQueueResult(targetUrl, config, customerId);
}

if (!config.getEventId().toUpperCase().equals(queueParams.getEventId().toUpperCase())) {
return cancelQueueCookieReturnErrorResult(customerId, targetUrl, config, queueParams, "eventid");
if(stateInfo.isFound() && !isTokenValid){
this._userInQueueStateRepository.cancelQueueCookie(config.getEventId(), config.getCookieDomain());
}

if (queueParams.getTimeStamp() < System.currentTimeMillis() / 1000L) {
return cancelQueueCookieReturnErrorResult(customerId, targetUrl, config, queueParams, "timestamp");
}
return requestValidationResult;
}

private RequestValidationResult getValidTokenResult(
QueueEventConfig config,
QueueUrlParams queueParams,
String secretKey) throws Exception {

this._userInQueueStateRepository.store(
config.getEventId(),
queueParams.getQueueId(),
Expand All @@ -101,15 +103,13 @@ private RequestValidationResult getQueueITTokenValidationResult(
config.getActionName());
}

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

this._userInQueueStateRepository.cancelQueueCookie(config.getEventId(), config.getCookieDomain());

String query = getQueryString(customerId, config.getEventId(), config.getVersion(), config.getActionName(), config.getCulture(), config.getLayoutName())
+ "&queueittoken=" + qParams.getQueueITToken() + "&ts=" + System.currentTimeMillis() / 1000L;

Expand All @@ -122,12 +122,11 @@ private RequestValidationResult cancelQueueCookieReturnErrorResult(
return new RequestValidationResult(ActionType.QUEUE_ACTION, config.getEventId(), null, redirectUrl, null, config.getActionName());
}

private RequestValidationResult cancelQueueCookieReturnQueueResult(
private RequestValidationResult getQueueResult(
String targetUrl,
QueueEventConfig config,
String customerId) throws Exception {

this._userInQueueStateRepository.cancelQueueCookie(config.getEventId(), config.getCookieDomain());
String query = getQueryString(customerId, config.getEventId(), config.getVersion(), config.getActionName(), config.getCulture(), config.getLayoutName());

if (!Utils.isNullOrWhiteSpace(targetUrl)) {
Expand Down Expand Up @@ -165,7 +164,25 @@ private String generateRedirectUrl(String queueDomain, String uriPath, String qu
}
return "https://" + queueDomain + uriPath + "?" + query;
}

private TokenValidationResult validateToken(QueueEventConfig config, QueueUrlParams queueParams, String secretKey) throws Exception {

String calculatedHash = HashHelper.generateSHA256Hash(secretKey, queueParams.getQueueITTokenWithoutHash());
if (!calculatedHash.toUpperCase().equals(queueParams.getHashCode().toUpperCase())) {
return new TokenValidationResult(false, "hash");
}

if (!config.getEventId().toUpperCase().equals(queueParams.getEventId().toUpperCase())) {
return new TokenValidationResult(false, "eventid");
}

if (queueParams.getTimeStamp() < System.currentTimeMillis() / 1000L) {
return new TokenValidationResult(false, "timestamp");
}

return new TokenValidationResult(true, null);
}

@Override
public void extendQueueCookie(
String eventId,
Expand Down Expand Up @@ -205,4 +222,23 @@ public RequestValidationResult validateCancelRequest(
public RequestValidationResult getIgnoreActionResult(String actionName) {
return new RequestValidationResult(ActionType.IGNORE_ACTION, null, null, null, null, actionName);
}

private class TokenValidationResult
{
private final boolean isValid;
private final String errorCode;

public TokenValidationResult(boolean isValid, String errorCode){
this.isValid = isValid;
this.errorCode = errorCode;
}

public boolean isValid() {
return this.isValid;
}

public String getErrorCode() {
return this.errorCode;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -157,19 +157,19 @@ public StateInfo getState(String eventId, int cookieValidityMinutes, String secr
String cookieKey = getCookieKey(eventId);
String cookieValue = this.cookieManager.getCookie(cookieKey);
if (cookieValue == null) {
return new StateInfo(false, null, null, null);
return new StateInfo(false, false, null, null, null);
}
HashMap<String, String> cookieNameValueMap = UserInQueueStateCookieRepository.getCookieNameValueMap(cookieValue);
if (!isCookieValid(secretKey, cookieNameValueMap, eventId, cookieValidityMinutes, validateTime)) {
return new StateInfo(false, null, null, null);
return new StateInfo(true, false, null, null, null);
}

return new StateInfo(true, cookieNameValueMap.get(QUEUE_ID_KEY),
return new StateInfo(true, true, cookieNameValueMap.get(QUEUE_ID_KEY),
cookieNameValueMap.get(FIXED_COOKIE_VALIDITY_MINUTES_KEY),
cookieNameValueMap.get(REDIRECT_TYPE_KEY));
} catch (NumberFormatException ex) {
}
return new StateInfo(false, null, null, null);
return new StateInfo(true, false, null, null, null);
}

@Override
Expand Down Expand Up @@ -211,13 +211,15 @@ public void reissueQueueCookie(

class StateInfo {

private final boolean isFound;
private final boolean isValid;
private final String queueId;
private final String redirectType;
private final String fixedCookieValidityMinutes;

public StateInfo(boolean isValid, String queueid, String fixedCookieValidityMinutes,
public StateInfo(boolean isFound, boolean isValid, String queueid, String fixedCookieValidityMinutes,
String redirectType) {
this.isFound = isFound;
this.isValid = isValid;
this.queueId = queueid;
this.fixedCookieValidityMinutes = fixedCookieValidityMinutes;
Expand All @@ -228,6 +230,9 @@ public String getQueueId() {
return this.queueId;
}

public boolean isFound() {
return this.isFound;
}
public boolean isValid() {
return this.isValid;
}
Expand Down
10 changes: 5 additions & 5 deletions SDK/src/test/java/queueit/knownuserv3/sdk/KnownUserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1386,7 +1386,7 @@ public void validateRequestByIntegrationConfig_Debug() throws Exception {
assertTrue(decodedCookieValue.contains("&LayoutName:Christmas Layout by Queue-it"));
assertTrue(decodedCookieValue.contains("&Culture:da-DK"));
assertTrue(decodedCookieValue.contains("&ActionName:" + config.Name));
assertTrue(decodedCookieValue.contains("SdkVersion=v3-java-3.6.0"));
assertTrue(decodedCookieValue.contains("SdkVersion=" + UserInQueueService.SDK_VERSION));
assertTrue(decodedCookieValue.contains("Runtime=" + GetRuntimeVersion()));
}

Expand Down Expand Up @@ -1430,7 +1430,7 @@ public void ValidateRequestByIntegrationConfig_Debug_WithoutMatch() throws Excep
assertTrue(
decodedCookieValue.contains("OriginalUrl=http://test.com/?event1=true&queueittoken=queueittokenvalue"));
assertTrue(decodedCookieValue.contains("MatchedConfig=NULL"));
assertTrue(decodedCookieValue.contains("SdkVersion=v3-java-3.6.0"));
assertTrue(decodedCookieValue.contains("SdkVersion=" + UserInQueueService.SDK_VERSION));
assertTrue(decodedCookieValue.contains("Runtime=" + GetRuntimeVersion()));
}

Expand Down Expand Up @@ -1628,7 +1628,7 @@ public void validateRequestByIntegrationConfig_Debug_NullConfig() throws Excepti
assertTrue(decodedCookieValue.contains("ConfigVersion=NULL"));
assertTrue(decodedCookieValue.contains("QueueitToken=" + queueittoken));
assertTrue(decodedCookieValue.contains("OriginalUrl=requestUrl"));
assertTrue(decodedCookieValue.contains("SdkVersion=v3-java-3.6.0"));
assertTrue(decodedCookieValue.contains("SdkVersion=" + UserInQueueService.SDK_VERSION));
assertTrue(decodedCookieValue.contains("Runtime=" + GetRuntimeVersion()));
assertTrue(decodedCookieValue.contains("Exception=customerIntegrationInfo can not be null."));

Expand Down Expand Up @@ -1797,7 +1797,7 @@ public void ResolveQueueRequestByLocalConfig_Debug() throws Exception {
assertTrue(decodedCookieValue.contains(
"QueueConfig=EventId:eventId&Version:12&QueueDomain:queueDomain&CookieDomain:cookieDomain&ExtendCookieValidity:true&CookieValidityMinute:10&LayoutName:layoutName&Culture:culture&ActionName:"
+ eventConfig.getActionName()));
assertTrue(decodedCookieValue.contains("SdkVersion=v3-java-3.6.0"));
assertTrue(decodedCookieValue.contains("SdkVersion=" + UserInQueueService.SDK_VERSION));
assertTrue(decodedCookieValue.contains("Runtime=" + GetRuntimeVersion()));
}

Expand Down Expand Up @@ -2105,7 +2105,7 @@ public void CancelRequestByLocalConfig_Debug_NullConfig() throws Exception {
assertTrue(
decodedCookieValue.contains("OriginalUrl=http://test.com/?event1=true&queueittoken=queueittokenvalue"));
assertTrue(decodedCookieValue.contains("CancelConfig=NULL"));
assertTrue(decodedCookieValue.contains("SdkVersion=v3-java-3.6.0"));
assertTrue(decodedCookieValue.contains("SdkVersion=" + UserInQueueService.SDK_VERSION));
assertTrue(decodedCookieValue.contains("Runtime=" + GetRuntimeVersion()));
assertTrue(decodedCookieValue.contains("Exception=cancelConfig can not be null."));
}
Expand Down
Loading

0 comments on commit da96a75

Please sign in to comment.