55
66
77class UserInQueueService :
8- SDK_VERSION = "v3-python-" + "3.6.0 "
8+ SDK_VERSION = "v3-python-" + "3.6.1 "
99
1010 def __init__ (self , httpContextProvider , userInQueueStateRepository ):
1111 self .httpContextProvider = httpContextProvider
1212 self .userInQueueStateRepository = userInQueueStateRepository
1313
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 ):
3115
3216 cookieDomain = ""
3317 if (not Utils .isNilOrEmpty (config .cookieDomain )):
@@ -41,8 +25,7 @@ def __getQueueITTokenValidationResult(self, targetUrl, eventId, config,
4125 queueParams .queueId , None ,
4226 queueParams .redirectType , config .actionName )
4327
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 ):
4629 timeStamp = str (QueueitHelpers .getCurrentTime ())
4730 targetUrlParam = ""
4831 if (not Utils .isNilOrEmpty (targetUrl )):
@@ -55,8 +38,7 @@ def __cancelQueueCookieReturnErrorResult(self, customerId, targetUrl, config, qP
5538
5639 return RequestValidationResult (ActionTypes .QUEUE , config .eventId , None , redirectUrl , None , config .actionName )
5740
58- def __cancelQueueCookieReturnQueueResult (self , targetUrl , config , customerId ):
59- self .userInQueueStateRepository .cancelQueueCookie (config .eventId , config .cookieDomain )
41+ def __getQueueResult (self , targetUrl , config , customerId ):
6042 targetUrlParam = ""
6143 if (not Utils .isNilOrEmpty (targetUrl )):
6244 targetUrlParam = "&t={}" .format (QueueitHelpers .urlEncode (targetUrl ))
@@ -93,6 +75,21 @@ def __getQueryString(self, customerId, eventId, configVersion, actionName, cultu
9375
9476 return "&" .join (queryStringList )
9577
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+
9693 def validateQueueRequest (self , targetUrl , queueitToken , config , customerId ,
9794 secretKey ):
9895 state = self .userInQueueStateRepository .getState (
@@ -110,13 +107,24 @@ def validateQueueRequest(self, targetUrl, queueitToken, config, customerId,
110107 return result
111108
112109 queueParams = QueueUrlParams .extractQueueParams (queueitToken )
110+ requestValidationResult = RequestValidationResult (None , None , None , None , None , None )
111+ isTokenValid = False
112+
113113 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 )
117121 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
120128
121129 def validateCancelRequest (self , targetUrl , cancelConfig , customerId ,
122130 secretKey ):
@@ -148,4 +156,9 @@ def extendQueueCookie(self, eventId, cookieValidityMinutes, cookieDomain,
148156 eventId , cookieValidityMinutes , cookieDomain , secretKey )
149157
150158 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