Skip to content

Commit 93dedb2

Browse files
committed
log more request details in debug cookie
1 parent 730af5f commit 93dedb2

File tree

3 files changed

+123
-21
lines changed

3 files changed

+123
-21
lines changed

lib/queueit_knownuserv3/known_user.rb

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ def self.convertToInt(value)
2525
end
2626
private_class_method :convertToInt
2727

28+
def self.logMoreRequestDetails(debugEntries, request)
29+
debugEntries["ServerUtcTime"] = Time.now.utc.iso8601
30+
debugEntries["RequestIP"] = request.remote_ip
31+
debugEntries["RequestHttpHeader_Via"] = request.headers["via"]
32+
debugEntries["RequestHttpHeader_Forwarded"] = request.headers["forwarded"]
33+
debugEntries["RequestHttpHeader_XForwardedFor"] = request.headers["x-forwarded-for"]
34+
debugEntries["RequestHttpHeader_XForwardedHost"] = request.headers["x-forwarded-host"]
35+
debugEntries["RequestHttpHeader_XForwardedProto"] = request.headers["x-forwarded-proto"]
36+
end
37+
private_class_method :logMoreRequestDetails
38+
2839
def self.getIsDebug(queueitToken, secretKey)
2940
qParams = QueueUrlParams.extractQueueParams(queueitToken)
3041
if(qParams == nil)
@@ -65,12 +76,13 @@ def self._resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig,
6576
if(isDebug)
6677
debugEntries["TargetUrl"] = targetUrl
6778
debugEntries["QueueitToken"] = queueitToken
68-
debugEntries["OriginalUrl"] = request.original_url
79+
debugEntries["OriginalUrl"] = getRealOriginalUrl(request)
6980
if(queueConfig == nil)
7081
debugEntries["QueueConfig"] = "NULL"
7182
else
7283
debugEntries["QueueConfig"] = queueConfig.toString()
7384
end
85+
logMoreRequestDetails(debugEntries, request)
7486
end
7587

7688
if(Utils.isNilOrEmpty(customerId))
@@ -112,12 +124,13 @@ def self._cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig, cust
112124
if(isDebug)
113125
debugEntries["TargetUrl"] = targetUrl
114126
debugEntries["QueueitToken"] = queueitToken
115-
debugEntries["OriginalUrl"] = request.original_url
127+
debugEntries["OriginalUrl"] = getRealOriginalUrl(request)
116128
if(cancelConfig == nil)
117129
debugEntries["CancelConfig"] = "NULL"
118130
else
119131
debugEntries["CancelConfig"] = cancelConfig.toString()
120132
end
133+
logMoreRequestDetails(debugEntries, request)
121134
end
122135

123136
if(Utils.isNilOrEmpty(targetUrl))
@@ -194,7 +207,8 @@ def self.validateRequestByIntegrationConfig(currentUrlWithoutQueueITToken, queue
194207
debugEntries["ConfigVersion"] = customerIntegration["Version"]
195208
debugEntries["PureUrl"] = currentUrlWithoutQueueITToken
196209
debugEntries["QueueitToken"] = queueitToken
197-
debugEntries["OriginalUrl"] = request.original_url
210+
debugEntries["OriginalUrl"] = getRealOriginalUrl(request)
211+
logMoreRequestDetails(debugEntries, request)
198212
end
199213

200214
integrationEvaluator = IntegrationEvaluator.new
@@ -258,6 +272,12 @@ def self.cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig, custo
258272
setDebugCookie(debugEntries, request.cookie_jar)
259273
end
260274
end
275+
276+
def self.getRealOriginalUrl(request)
277+
# RoR could modify request.original_url if request contains x-forwarded-host/proto http headers.
278+
# Therefore we need this method to be able to access the 'real' original url.
279+
return request.env["rack.url_scheme"] + "://" + request.env["HTTP_HOST"] + request.original_fullpath
280+
end
261281
end
262282

263283
class CookieManager

lib/queueit_knownuserv3/user_in_queue_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
module QueueIt
55
class UserInQueueService
6-
SDK_VERSION = "3.3.0"
6+
SDK_VERSION = "3.3.2"
77

88
def initialize(userInQueueStateRepository)
99
@userInQueueStateRepository = userInQueueStateRepository

test/queueit_knownuserv3/test_known_user.rb

Lines changed: 99 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,16 @@
55
module QueueIt
66
class HttpRequestMock
77
attr_accessor :user_agent
8-
attr_accessor :original_url
8+
attr_accessor :env
9+
attr_accessor :original_fullpath
910
attr_accessor :cookie_jar
11+
attr_accessor :remote_ip
12+
attr_accessor :headers
13+
14+
def setRealOriginalUrl(proto, host, path)
15+
@env = {"rack.url_scheme" => proto, "HTTP_HOST" => host}
16+
@original_fullpath = path
17+
end
1018
end
1119

1220
class UserInQueueServiceMock
@@ -88,19 +96,38 @@ def test_cancelRequestByLocalConfig_setDebugCookie
8896
cancelConfig.cookieDomain = "cookieDomain"
8997

9098
requestMock = HttpRequestMock.new
91-
requestMock.original_url = "original_url"
99+
requestMock.setRealOriginalUrl("http", "localhost", "/original_url")
92100
requestMock.cookie_jar = {}
101+
requestMock.remote_ip = "userIP"
102+
requestMock.headers = {
103+
"via" => "v",
104+
"forwarded" => "f",
105+
"x-forwarded-for" => "xff",
106+
"x-forwarded-host" => "xfh",
107+
"x-forwarded-proto" => "xfp" }
93108

94109
secretKey = "secretKey"
95110
queueitToken = QueueITTokenGenerator::generateDebugToken("eventId", secretKey)
96111

112+
expectedServerTime = Time.now.utc.iso8601
97113
KnownUser.cancelRequestByLocalConfig("url", queueitToken, cancelConfig, "customerId", secretKey, requestMock)
98114

99-
expectedCookieValue = "TargetUrl=url|QueueitToken=" + queueitToken + "|OriginalUrl=original_url|CancelConfig=EventId:eventId&Version:1&QueueDomain:queueDomain&CookieDomain:cookieDomain"
100-
115+
expectedCookieValue = "TargetUrl=url|QueueitToken=" + queueitToken +
116+
"|OriginalUrl=http://localhost/original_url" +
117+
"|CancelConfig=EventId:eventId&Version:1&QueueDomain:queueDomain&CookieDomain:cookieDomain" +
118+
"|ServerUtcTime=" + expectedServerTime +
119+
"|RequestIP=userIP" +
120+
"|RequestHttpHeader_Via=v" +
121+
"|RequestHttpHeader_Forwarded=f" +
122+
"|RequestHttpHeader_XForwardedFor=xff" +
123+
"|RequestHttpHeader_XForwardedHost=xfh" +
124+
"|RequestHttpHeader_XForwardedProto=xfp"
125+
101126
assert( requestMock.cookie_jar.length == 1 );
102127
assert( requestMock.cookie_jar.key?(KnownUser::QUEUEIT_DEBUG_KEY.to_sym) )
103-
assert( expectedCookieValue.eql?(requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]) )
128+
129+
actualCookieValue = requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]
130+
assert( expectedCookieValue.eql?(actualCookieValue) )
104131
end
105132

106133
def test_cancelRequestByLocalConfig_nil_QueueDomain
@@ -410,19 +437,37 @@ def test_resolveQueueRequestByLocalConfig_setDebugCookie
410437
queueConfig.version = 12
411438

412439
requestMock = HttpRequestMock.new
413-
requestMock.original_url = "original_url"
440+
requestMock.setRealOriginalUrl("http", "localhost", "/original_url")
414441
requestMock.cookie_jar = {}
442+
requestMock.remote_ip = "userIP"
443+
requestMock.headers = {
444+
"via" => "v",
445+
"forwarded" => "f",
446+
"x-forwarded-for" => "xff",
447+
"x-forwarded-host" => "xfh",
448+
"x-forwarded-proto" => "xfp" }
415449

416450
secretKey = "secretKey"
417451
queueitToken = QueueITTokenGenerator::generateDebugToken("eventId", secretKey)
418452

453+
expectedServerTime = Time.now.utc.iso8601
419454
KnownUser.resolveQueueRequestByLocalConfig("url", queueitToken, queueConfig, "customerId", secretKey, requestMock)
420455

421-
expectedCookieValue = "TargetUrl=url|QueueitToken=" + queueitToken + "|OriginalUrl=original_url|QueueConfig=EventId:eventId&Version:12&QueueDomain:queueDomain&CookieDomain:cookieDomain&ExtendCookieValidity:true&CookieValidityMinute:10&LayoutName:layoutName&Culture:culture"
422-
456+
expectedCookieValue = "TargetUrl=url|QueueitToken=" + queueitToken +
457+
"|OriginalUrl=http://localhost/original_url" +
458+
"|QueueConfig=EventId:eventId&Version:12&QueueDomain:queueDomain&CookieDomain:cookieDomain&ExtendCookieValidity:true&CookieValidityMinute:10&LayoutName:layoutName&Culture:culture" +
459+
"|ServerUtcTime=" + expectedServerTime +
460+
"|RequestIP=userIP" +
461+
"|RequestHttpHeader_Via=v" +
462+
"|RequestHttpHeader_Forwarded=f" +
463+
"|RequestHttpHeader_XForwardedFor=xff" +
464+
"|RequestHttpHeader_XForwardedHost=xfh" +
465+
"|RequestHttpHeader_XForwardedProto=xfp"
466+
423467
assert( requestMock.cookie_jar.length == 1 );
424468
assert( requestMock.cookie_jar.key?(KnownUser::QUEUEIT_DEBUG_KEY.to_sym) )
425-
assert( expectedCookieValue.eql?(requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]) )
469+
actualCookieValue = requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]
470+
assert( expectedCookieValue.eql?(actualCookieValue) )
426471
end
427472

428473
def test_resolveQueueRequestByLocalConfig
@@ -612,20 +657,39 @@ def test_validateRequestByIntegrationConfig_setDebugCookie
612657

613658
requestMock = HttpRequestMock.new
614659
requestMock.user_agent = "googlebot"
615-
requestMock.original_url = "original_url"
660+
requestMock.setRealOriginalUrl("http", "localhost", "/original_url")
616661
requestMock.cookie_jar = {}
662+
requestMock.remote_ip = "userIP"
663+
requestMock.headers = {
664+
"via" => "v",
665+
"forwarded" => "f",
666+
"x-forwarded-for" => "xff",
667+
"x-forwarded-host" => "xfh",
668+
"x-forwarded-proto" => "xfp" }
617669
integrationConfigJson = JSON.generate(integrationConfig)
618670

619671
secretKey = "secretKey"
620672
queueitToken = QueueITTokenGenerator::generateDebugToken("eventId", secretKey)
621673

674+
expectedServerTime = Time.now.utc.iso8601
622675
KnownUser.validateRequestByIntegrationConfig("http://test.com?event1=true", queueitToken, integrationConfigJson, "customerId", secretKey, requestMock)
623676

624-
expectedCookieValue = "ConfigVersion=3|PureUrl=http://test.com?event1=true|QueueitToken=" + queueitToken + "|OriginalUrl=original_url|MatchedConfig=event1action|TargetUrl=http://test.com?event1=true|QueueConfig=EventId:event1&Version:3&QueueDomain:knownusertest.queue-it.net&CookieDomain:.test.com&ExtendCookieValidity:true&CookieValidityMinute:20&LayoutName:Christmas Layout by Queue-it&Culture:da-DK"
625-
677+
expectedCookieValue = "ConfigVersion=3|PureUrl=http://test.com?event1=true|QueueitToken=" + queueitToken +
678+
"|OriginalUrl=http://localhost/original_url" +
679+
"|ServerUtcTime=" + expectedServerTime +
680+
"|RequestIP=userIP" +
681+
"|RequestHttpHeader_Via=v" +
682+
"|RequestHttpHeader_Forwarded=f" +
683+
"|RequestHttpHeader_XForwardedFor=xff" +
684+
"|RequestHttpHeader_XForwardedHost=xfh" +
685+
"|RequestHttpHeader_XForwardedProto=xfp" +
686+
"|MatchedConfig=event1action|TargetUrl=http://test.com?event1=true|QueueConfig=EventId:event1&Version:3&QueueDomain:knownusertest.queue-it.net&CookieDomain:.test.com&ExtendCookieValidity:true&CookieValidityMinute:20&LayoutName:Christmas Layout by Queue-it&Culture:da-DK"
687+
626688
assert( requestMock.cookie_jar.length == 1 );
627689
assert( requestMock.cookie_jar.key?(KnownUser::QUEUEIT_DEBUG_KEY.to_sym) )
628-
assert( expectedCookieValue.eql?(requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]) )
690+
691+
actualCookieValue = requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]
692+
assert( expectedCookieValue.eql?(actualCookieValue) )
629693
end
630694

631695
def test_validateRequestByIntegrationConfig_NotMatch
@@ -656,8 +720,15 @@ def test_validateRequestByIntegrationConfig_setDebugCookie_NotMatch
656720
KnownUser.class_variable_set(:@@userInQueueService, userInQueueService)
657721

658722
requestMock = HttpRequestMock.new
659-
requestMock.original_url = "original_url"
723+
requestMock.setRealOriginalUrl("http", "localhost", "/original_url")
660724
requestMock.cookie_jar = {}
725+
requestMock.remote_ip = "userIP"
726+
requestMock.headers = {
727+
"via" => "v",
728+
"forwarded" => "f",
729+
"x-forwarded-for" => "xff",
730+
"x-forwarded-host" => "xfh",
731+
"x-forwarded-proto" => "xfp" }
661732

662733
integrationConfig =
663734
{
@@ -675,13 +746,24 @@ def test_validateRequestByIntegrationConfig_setDebugCookie_NotMatch
675746
queueitToken = QueueITTokenGenerator::generateDebugToken("eventId", secretKey)
676747

677748
integrationConfigJson = JSON.generate(integrationConfig)
749+
expectedServerTime = Time.now.utc.iso8601
678750
KnownUser.validateRequestByIntegrationConfig("http://test.com?event1=true", queueitToken, integrationConfigJson, "customerId", secretKey, requestMock)
679751

680-
expectedCookieValue = "ConfigVersion=3|PureUrl=http://test.com?event1=true|QueueitToken=" + queueitToken + "|OriginalUrl=original_url|MatchedConfig=NULL"
681-
752+
expectedCookieValue = "ConfigVersion=3|PureUrl=http://test.com?event1=true|QueueitToken=" + queueitToken +
753+
"|OriginalUrl=http://localhost/original_url" +
754+
"|ServerUtcTime=" + expectedServerTime +
755+
"|RequestIP=userIP" +
756+
"|RequestHttpHeader_Via=v" +
757+
"|RequestHttpHeader_Forwarded=f" +
758+
"|RequestHttpHeader_XForwardedFor=xff" +
759+
"|RequestHttpHeader_XForwardedHost=xfh" +
760+
"|RequestHttpHeader_XForwardedProto=xfp" +
761+
"|MatchedConfig=NULL"
762+
682763
assert( requestMock.cookie_jar.length == 1 );
683764
assert( requestMock.cookie_jar.key?(KnownUser::QUEUEIT_DEBUG_KEY.to_sym) )
684-
assert( expectedCookieValue.eql?(requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]) )
765+
actualCookieValue = requestMock.cookie_jar[KnownUser::QUEUEIT_DEBUG_KEY.to_sym]["value".to_sym]
766+
assert( expectedCookieValue.eql?(actualCookieValue) )
685767
end
686768

687769
def test_validateRequestByIntegrationConfig_ForcedTargetUrl

0 commit comments

Comments
 (0)