5
5
6
6
7
7
class UserInQueueService :
8
- SDK_VERSION = "v3-python-" + "3.6.0 "
8
+ SDK_VERSION = "v3-python-" + "3.6.1 "
9
9
10
10
def __init__ (self , httpContextProvider , userInQueueStateRepository ):
11
11
self .httpContextProvider = httpContextProvider
12
12
self .userInQueueStateRepository = userInQueueStateRepository
13
13
14
- def __getQueueITTokenValidationResult (self , targetUrl , eventId , config ,
15
- queueParams , customerId , secretKey ):
16
- calculatedHash = QueueitHelpers .hmacSha256Encode (
17
- queueParams .queueITTokenWithoutHash , secretKey )
18
-
19
- if (calculatedHash .upper () != queueParams .hashCode .upper ()):
20
- return self .__cancelQueueCookieReturnErrorResult (customerId , targetUrl ,
21
- config , queueParams , "hash" )
22
-
23
- if (queueParams .eventId .upper () != eventId .upper ()):
24
- return self .__cancelQueueCookieReturnErrorResult (
25
- customerId , targetUrl , config , queueParams , "eventid" )
26
-
27
- if (queueParams .timeStamp <
28
- QueueitHelpers .getCurrentTime ()):
29
- return self .__cancelQueueCookieReturnErrorResult (
30
- customerId , targetUrl , config , queueParams , "timestamp" )
14
+ def __getValidTokenResult (self , config , queueParams , secretKey ):
31
15
32
16
cookieDomain = ""
33
17
if (not Utils .isNilOrEmpty (config .cookieDomain )):
@@ -41,8 +25,7 @@ def __getQueueITTokenValidationResult(self, targetUrl, eventId, config,
41
25
queueParams .queueId , None ,
42
26
queueParams .redirectType , config .actionName )
43
27
44
- def __cancelQueueCookieReturnErrorResult (self , customerId , targetUrl , config , qParams , errorCode ):
45
- self .userInQueueStateRepository .cancelQueueCookie (config .eventId , config .cookieDomain )
28
+ def __getErrorResult (self , customerId , targetUrl , config , qParams , errorCode ):
46
29
timeStamp = str (QueueitHelpers .getCurrentTime ())
47
30
targetUrlParam = ""
48
31
if (not Utils .isNilOrEmpty (targetUrl )):
@@ -55,8 +38,7 @@ def __cancelQueueCookieReturnErrorResult(self, customerId, targetUrl, config, qP
55
38
56
39
return RequestValidationResult (ActionTypes .QUEUE , config .eventId , None , redirectUrl , None , config .actionName )
57
40
58
- def __cancelQueueCookieReturnQueueResult (self , targetUrl , config , customerId ):
59
- self .userInQueueStateRepository .cancelQueueCookie (config .eventId , config .cookieDomain )
41
+ def __getQueueResult (self , targetUrl , config , customerId ):
60
42
targetUrlParam = ""
61
43
if (not Utils .isNilOrEmpty (targetUrl )):
62
44
targetUrlParam = "&t={}" .format (QueueitHelpers .urlEncode (targetUrl ))
@@ -93,6 +75,21 @@ def __getQueryString(self, customerId, eventId, configVersion, actionName, cultu
93
75
94
76
return "&" .join (queryStringList )
95
77
78
+ def __validateToken (self , config , queueParams , secretKey ):
79
+ calculatedHash = QueueitHelpers .hmacSha256Encode (
80
+ queueParams .queueITTokenWithoutHash , secretKey )
81
+
82
+ if (calculatedHash .upper () != queueParams .hashCode .upper ()):
83
+ return TokenValidationResult (False , "hash" )
84
+
85
+ if (queueParams .eventId .upper () != config .eventId .upper ()):
86
+ return TokenValidationResult (False , "eventid" )
87
+
88
+ if (queueParams .timeStamp < QueueitHelpers .getCurrentTime ()):
89
+ return TokenValidationResult (False , "timestamp" )
90
+
91
+ return TokenValidationResult (True , None )
92
+
96
93
def validateQueueRequest (self , targetUrl , queueitToken , config , customerId ,
97
94
secretKey ):
98
95
state = self .userInQueueStateRepository .getState (
@@ -110,13 +107,24 @@ def validateQueueRequest(self, targetUrl, queueitToken, config, customerId,
110
107
return result
111
108
112
109
queueParams = QueueUrlParams .extractQueueParams (queueitToken )
110
+ requestValidationResult = RequestValidationResult (None , None , None , None , None , None )
111
+ isTokenValid = False
112
+
113
113
if (queueParams is not None ):
114
- return self .__getQueueITTokenValidationResult (
115
- targetUrl , config .eventId , config , queueParams , customerId ,
116
- secretKey )
114
+ tokenValidationResult = self .__validateToken (config , queueParams , secretKey )
115
+ isTokenValid = tokenValidationResult .isValid
116
+ if (isTokenValid ):
117
+ requestValidationResult = self .__getValidTokenResult (config , queueParams , secretKey )
118
+ else :
119
+ requestValidationResult = self .__getErrorResult (customerId , targetUrl , config , queueParams ,
120
+ tokenValidationResult .errorCode )
117
121
else :
118
- return self .__cancelQueueCookieReturnQueueResult (targetUrl , config ,
119
- customerId )
122
+ requestValidationResult = self .__getQueueResult (targetUrl , config , customerId )
123
+
124
+ if (state .isFound and not isTokenValid ):
125
+ self .userInQueueStateRepository .cancelQueueCookie (config .eventId , config .cookieDomain )
126
+
127
+ return requestValidationResult
120
128
121
129
def validateCancelRequest (self , targetUrl , cancelConfig , customerId ,
122
130
secretKey ):
@@ -148,4 +156,9 @@ def extendQueueCookie(self, eventId, cookieValidityMinutes, cookieDomain,
148
156
eventId , cookieValidityMinutes , cookieDomain , secretKey )
149
157
150
158
def getIgnoreActionResult (self , actionName ):
151
- return RequestValidationResult (ActionTypes .IGNORE , None , None , None , None , actionName )
159
+ return RequestValidationResult (ActionTypes .IGNORE , None , None , None , None , actionName )
160
+
161
+ class TokenValidationResult :
162
+ def __init__ (self , isValid , errorCode ):
163
+ self .isValid = isValid
164
+ self .errorCode = errorCode
0 commit comments