From 22329f05561aa5dbcca0f814c6790bc4ccb95917 Mon Sep 17 00:00:00 2001 From: Frederik Williams Date: Wed, 6 Dec 2017 14:50:04 +0100 Subject: [PATCH] log more request details in debug cookie --- .../queueit/knownuserv3/sdk/KnownUser.java | 14 +++++ .../knownuserv3/sdk/UserInQueueService.java | 2 +- .../knownuserv3/sdk/KnownUserTest.java | 63 ++++++++++++++++--- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/SDK/src/queueit/knownuserv3/sdk/KnownUser.java b/SDK/src/queueit/knownuserv3/sdk/KnownUser.java index e02f300..4a772c0 100644 --- a/SDK/src/queueit/knownuserv3/sdk/KnownUser.java +++ b/SDK/src/queueit/knownuserv3/sdk/KnownUser.java @@ -2,6 +2,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; +import java.time.Instant; import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; @@ -44,6 +45,7 @@ public static RequestValidationResult validateRequestByIntegrationConfig(String debugEntries.put("PureUrl", currentUrlWithoutQueueITToken); debugEntries.put("QueueitToken", queueitToken); debugEntries.put("OriginalUrl", getOriginalUrl(request)); + logMoreRequestDetails(debugEntries, request); } if (Utils.isNullOrWhiteSpace(currentUrlWithoutQueueITToken)) { @@ -142,6 +144,7 @@ private static RequestValidationResult cancelRequestByLocalConfig( debugEntries.put("QueueitToken", queueitToken); debugEntries.put("CancelConfig", cancelConfig != null ? cancelConfig.toString() : "NULL"); debugEntries.put("OriginalUrl", getOriginalUrl(request)); + logMoreRequestDetails(debugEntries, request); } if (Utils.isNullOrWhiteSpace(targetUrl)) { @@ -195,6 +198,7 @@ private static RequestValidationResult resolveQueueRequestByLocalConfig( debugEntries.put("QueueitToken", queueitToken); debugEntries.put("QueueConfig", queueConfig != null ? queueConfig.toString() : "NULL"); debugEntries.put("OriginalUrl", getOriginalUrl(request)); + logMoreRequestDetails(debugEntries, request); } if (Utils.isNullOrWhiteSpace(customerId)) { @@ -259,6 +263,16 @@ private static void setDebugCookie(Map debugEntries, HttpServlet cookieManager.setCookie(QueueITDebugKey, cookieValue, null, null); } + private static void logMoreRequestDetails(Map debugEntries, HttpServletRequest request) { + debugEntries.put("ServerUtcTime", Instant.now().toString()); + debugEntries.put("RequestIP", request.getRemoteAddr()); + debugEntries.put("RequestHttpHeader_Via", request.getHeader("via") != null ? request.getHeader("via") : ""); + debugEntries.put("RequestHttpHeader_Forwarded", request.getHeader("forwarded") != null ? request.getHeader("forwarded") : ""); + debugEntries.put("RequestHttpHeader_XForwardedFor", request.getHeader("x-forwarded-for") != null ? request.getHeader("x-forwarded-for") : ""); + debugEntries.put("RequestHttpHeader_XForwardedHost", request.getHeader("x-forwarded-host") != null ? request.getHeader("x-forwarded-host") : ""); + debugEntries.put("RequestHttpHeader_XForwardedProto", request.getHeader("x-forwarded-proto") != null ? request.getHeader("x-forwarded-proto") : ""); + } + private static boolean getIsDebug(String queueitToken, String secretKey) throws Exception { QueueUrlParams qParams = QueueParameterHelper.extractQueueParams(queueitToken); diff --git a/SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java b/SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java index c5914e0..f40886c 100644 --- a/SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java +++ b/SDK/src/queueit/knownuserv3/sdk/UserInQueueService.java @@ -29,7 +29,7 @@ void extendQueueCookie( class UserInQueueService implements IUserInQueueService { - public static final String SDK_VERSION = "3.3.0"; + public static final String SDK_VERSION = "3.3.2"; private final IUserInQueueStateRepository _userInQueueStateRepository; public UserInQueueService( diff --git a/SDK/test/queueit/knownuserv3/sdk/KnownUserTest.java b/SDK/test/queueit/knownuserv3/sdk/KnownUserTest.java index 341333e..12c4839 100644 --- a/SDK/test/queueit/knownuserv3/sdk/KnownUserTest.java +++ b/SDK/test/queueit/knownuserv3/sdk/KnownUserTest.java @@ -6,9 +6,11 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.security.Principal; +import java.time.Instant; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.servlet.AsyncContext; @@ -126,6 +128,12 @@ public void cancelRequestByLocalConfigDebugCookieLoggingTest() throws Exception HttpServletRequestMock requestMock = new HttpServletRequestMock(); requestMock.RequestURL = "requestUrl"; + requestMock.RemoteAddr = "80.35.35.34"; + requestMock.Headers.put("via", "1.1 example.com"); + requestMock.Headers.put("forwarded", "for=192.0.2.60;proto=http;by=203.0.113.43"); + requestMock.Headers.put("x-forwarded-for", "129.78.138.66, 129.78.64.103"); + requestMock.Headers.put("x-forwarded-host", "en.wikipedia.org:8080"); + requestMock.Headers.put("x-forwarded-proto", "https"); HttpServletResponseMock responseMock = new HttpServletResponseMock(); @@ -134,8 +142,8 @@ public void cancelRequestByLocalConfigDebugCookieLoggingTest() throws Exception String queueittoken = QueueITTokenGenerator.generateToken("eventId", secretKey); KnownUser.cancelRequestByLocalConfig("url", queueittoken, cancelEventConfig, "customerId", requestMock, responseMock, secretKey); - - // Assert + + // Assert assertTrue(responseMock.addedCookies.size() == 1); assertTrue(responseMock.addedCookies.get(0).getName().equals(KnownUser.QueueITDebugKey)); String decodedCookieValue = URLDecoder.decode(responseMock.addedCookies.get(0).getValue(), "UTF-8"); @@ -146,6 +154,12 @@ public void cancelRequestByLocalConfigDebugCookieLoggingTest() throws Exception assertTrue(decodedCookieValue.contains("&CookieDomain:cookiedomain")); assertTrue(decodedCookieValue.contains("|QueueitToken=" + queueittoken)); assertTrue(decodedCookieValue.contains("|TargetUrl=url")); + assertTrue(decodedCookieValue.contains("|RequestIP=80.35.35.34")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Via=1.1 example.com")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Forwarded=for=192.0.2.60;proto=http;by=203.0.113.43")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedFor=129.78.138.66, 129.78.64.103")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedHost=en.wikipedia.org:8080")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedProto=https")); } @Test @@ -531,6 +545,12 @@ public void resolveQueueRequestByLocalConfigDebugCookieLoggingTest() throws Exce HttpServletRequestMock requestMock = new HttpServletRequestMock(); requestMock.RequestURL = "requestUrl"; + requestMock.RemoteAddr = "80.35.35.34"; + requestMock.Headers.put("via", "1.1 example.com"); + requestMock.Headers.put("forwarded", "for=192.0.2.60;proto=http;by=203.0.113.43"); + requestMock.Headers.put("x-forwarded-for", "129.78.138.66, 129.78.64.103"); + requestMock.Headers.put("x-forwarded-host", "en.wikipedia.org:8080"); + requestMock.Headers.put("x-forwarded-proto", "https"); HttpServletResponseMock responseMock = new HttpServletResponseMock(); @@ -555,6 +575,12 @@ public void resolveQueueRequestByLocalConfigDebugCookieLoggingTest() throws Exce assertTrue(decodedCookieValue.contains("&Culture:culture")); assertTrue(decodedCookieValue.contains("|QueueitToken=" + queueittoken)); assertTrue(decodedCookieValue.contains("|TargetUrl=targetUrl")); + assertTrue(decodedCookieValue.contains("|RequestIP=80.35.35.34")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Via=1.1 example.com")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Forwarded=for=192.0.2.60;proto=http;by=203.0.113.43")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedFor=129.78.138.66, 129.78.64.103")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedHost=en.wikipedia.org:8080")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedProto=https")); } @Test @@ -756,8 +782,14 @@ public void validateRequestByIntegrationConfigNotMatchDebugCookieLoggingTest() t HttpServletRequestMock requestMock = new HttpServletRequestMock(); requestMock.RequestURL = "requestUrl"; + requestMock.RemoteAddr = "80.35.35.34"; + requestMock.Headers.put("via", "1.1 example.com"); + requestMock.Headers.put("forwarded", "for=192.0.2.60;proto=http;by=203.0.113.43"); + requestMock.Headers.put("x-forwarded-for", "129.78.138.66, 129.78.64.103"); + requestMock.Headers.put("x-forwarded-host", "en.wikipedia.org:8080"); + requestMock.Headers.put("x-forwarded-proto", "https"); - HttpServletResponseMock responseMock = new HttpServletResponseMock(); + HttpServletResponseMock responseMock = new HttpServletResponseMock(); // Act String secretKey = "secretkey"; @@ -773,7 +805,12 @@ public void validateRequestByIntegrationConfigNotMatchDebugCookieLoggingTest() t assertTrue(decodedCookieValue.contains("|PureUrl=http://test.com?event1=true")); assertTrue(decodedCookieValue.contains("ConfigVersion=3")); assertTrue(decodedCookieValue.contains("|QueueitToken=" + queueittoken)); - assertTrue(decodedCookieValue.contains("|MatchedConfig=NULL")); + assertTrue(decodedCookieValue.contains("|RequestIP=80.35.35.34")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Via=1.1 example.com")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_Forwarded=for=192.0.2.60;proto=http;by=203.0.113.43")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedFor=129.78.138.66, 129.78.64.103")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedHost=en.wikipedia.org:8080")); + assertTrue(decodedCookieValue.contains("|RequestHttpHeader_XForwardedProto=https")); } @Test @@ -952,7 +989,13 @@ class HttpServletRequestMock implements HttpServletRequest { public String UserAgent; public String RequestURL; public String QueryString; - + public String RemoteAddr; + public HashMap Headers; + + public HttpServletRequestMock() { + this.Headers = new HashMap(); + } + @Override public String getAuthType() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. @@ -972,7 +1015,13 @@ public long getDateHeader(String string) { public String getHeader(String key) { if("User-Agent".equals(key)) return this.UserAgent; - return ""; + + String value = (String) this.Headers.get(key); + + if(value == null) + value = ""; + + return value; } @Override @@ -1202,7 +1251,7 @@ public BufferedReader getReader() throws IOException { @Override public String getRemoteAddr() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + return RemoteAddr; } @Override