4
4
from models import Utils , KnownUserError , ActionTypes , RequestValidationResult , QueueEventConfig , CancelEventConfig
5
5
from integration_config_helpers import IntegrationEvaluator
6
6
from queue_url_params import QueueUrlParams
7
-
7
+ from connector_diagnostics import ConnectorDiagnostics
8
+ import json
9
+ import sys
8
10
9
11
class KnownUser :
10
12
QUEUEIT_TOKEN_KEY = "queueittoken"
@@ -55,24 +57,6 @@ def __logMoreRequestDetails(debugEntries, httpContextProvider):
55
57
"RequestHttpHeader_XForwardedProto" ] = httpContextProvider .getHeader (
56
58
"x-forwarded-proto" )
57
59
58
- @staticmethod
59
- def __getIsDebug (queueitToken , secretKey ):
60
- qParams = QueueUrlParams .extractQueueParams (queueitToken )
61
- if (qParams == None ):
62
- return False
63
-
64
- redirectType = qParams .redirectType
65
- if (redirectType == None ):
66
- return False
67
-
68
- if (redirectType .upper () == "DEBUG" ):
69
- calculatedHash = QueueitHelpers .hmacSha256Encode (
70
- qParams .queueITTokenWithoutHash , secretKey )
71
- valid = qParams .hashCode == calculatedHash
72
- return valid
73
-
74
- return False
75
-
76
60
@staticmethod
77
61
def __setDebugCookie (debugEntries , httpContextProvider ):
78
62
if (debugEntries == None or len (debugEntries ) == 0 ):
@@ -85,13 +69,18 @@ def __setDebugCookie(debugEntries, httpContextProvider):
85
69
cookieValue = cookieValue .strip ('|' )
86
70
httpContextProvider .setCookie (KnownUser .QUEUEIT_DEBUG_KEY , cookieValue ,
87
71
None , None )
72
+ @staticmethod
73
+ def __getRunTime ():
74
+ return sys .version
88
75
89
76
@staticmethod
90
77
def __resolveQueueRequestByLocalConfig (targetUrl , queueitToken ,
91
78
queueConfig , customerId , secretKey ,
92
- httpContextProvider , debugEntries ):
93
- isDebug = KnownUser .__getIsDebug (queueitToken , secretKey )
79
+ httpContextProvider , debugEntries , isDebug ):
94
80
if (isDebug ):
81
+ debugEntries ["SdkVersion" ] = UserInQueueService .SDK_VERSION
82
+ debugEntries ["Connector" ] = httpContextProvider .getProviderName ()
83
+ debugEntries ["Runtime" ] = KnownUser .__getRunTime ()
95
84
debugEntries ["TargetUrl" ] = targetUrl
96
85
debugEntries ["QueueitToken" ] = queueitToken
97
86
debugEntries [
@@ -141,11 +130,13 @@ def __resolveQueueRequestByLocalConfig(targetUrl, queueitToken,
141
130
@staticmethod
142
131
def __cancelRequestByLocalConfig (targetUrl , queueitToken , cancelConfig ,
143
132
customerId , secretKey ,
144
- httpContextProvider , debugEntries ):
145
- targetUrl = KnownUser .__generateTargetUrl (targetUrl ,
146
- httpContextProvider )
147
- isDebug = KnownUser .__getIsDebug (queueitToken , secretKey )
133
+ httpContextProvider , debugEntries , isDebug ):
134
+ targetUrl = KnownUser .__generateTargetUrl (targetUrl , httpContextProvider )
135
+
148
136
if (isDebug ):
137
+ debugEntries ["SdkVersion" ] = UserInQueueService .SDK_VERSION
138
+ debugEntries ["Connector" ] = httpContextProvider .getProviderName ()
139
+ debugEntries ["Runtime" ] = KnownUser .__getRunTime ()
149
140
debugEntries ["TargetUrl" ] = targetUrl
150
141
debugEntries ["QueueitToken" ] = queueitToken
151
142
debugEntries [
@@ -188,13 +179,14 @@ def __cancelRequestByLocalConfig(targetUrl, queueitToken, cancelConfig,
188
179
@staticmethod
189
180
def __handleQueueAction (currentUrlWithoutQueueITToken , queueitToken ,
190
181
customerIntegration , customerId , secretKey ,
191
- matchedConfig , httpContextProvider , debugEntries ):
182
+ matchedConfig , httpContextProvider , debugEntries , isDebug ):
192
183
queueConfig = QueueEventConfig ()
193
184
queueConfig .eventId = matchedConfig ["EventId" ]
194
185
queueConfig .queueDomain = matchedConfig ["QueueDomain" ]
195
186
queueConfig .layoutName = matchedConfig ["LayoutName" ]
196
187
queueConfig .culture = matchedConfig ["Culture" ]
197
188
queueConfig .cookieDomain = matchedConfig ["CookieDomain" ]
189
+ queueConfig .actionName = matchedConfig ["Name" ]
198
190
queueConfig .extendCookieValidity = matchedConfig [
199
191
"ExtendCookieValidity" ]
200
192
queueConfig .cookieValidityMinute = matchedConfig [
@@ -213,21 +205,22 @@ def __handleQueueAction(currentUrlWithoutQueueITToken, queueitToken,
213
205
214
206
return KnownUser .__resolveQueueRequestByLocalConfig (
215
207
targetUrl , queueitToken , queueConfig , customerId , secretKey ,
216
- httpContextProvider , debugEntries )
208
+ httpContextProvider , debugEntries , isDebug )
217
209
218
210
@staticmethod
219
211
def __handleCancelAction (currentUrlWithoutQueueITToken , queueitToken ,
220
212
customerIntegration , customerId , secretKey ,
221
- matchedConfig , httpContextProvider , debugEntries ):
213
+ matchedConfig , httpContextProvider , debugEntries , isDebug ):
222
214
cancelConfig = CancelEventConfig ()
223
215
cancelConfig .eventId = matchedConfig ["EventId" ]
224
216
cancelConfig .queueDomain = matchedConfig ["QueueDomain" ]
225
217
cancelConfig .cookieDomain = matchedConfig ["CookieDomain" ]
226
218
cancelConfig .version = customerIntegration ["Version" ]
219
+ cancelConfig .actionName = matchedConfig ["Name" ]
227
220
228
221
return KnownUser .__cancelRequestByLocalConfig (
229
222
currentUrlWithoutQueueITToken , queueitToken , cancelConfig ,
230
- customerId , secretKey , httpContextProvider , debugEntries )
223
+ customerId , secretKey , httpContextProvider , debugEntries , isDebug )
231
224
232
225
@staticmethod
233
226
def extendQueueCookie (eventId , cookieValidityMinute , cookieDomain ,
@@ -253,12 +246,19 @@ def resolveQueueRequestByLocalConfig(targetUrl, queueitToken, queueConfig,
253
246
customerId , secretKey ,
254
247
httpContextProvider ):
255
248
debugEntries = {}
249
+ connectorDiagnostics = ConnectorDiagnostics .verify (customerId , secretKey , queueitToken )
250
+ if (connectorDiagnostics .hasError ):
251
+ return connectorDiagnostics .validationResult
256
252
try :
257
253
targetUrl = KnownUser .__generateTargetUrl (targetUrl ,
258
254
httpContextProvider )
259
255
return KnownUser .__resolveQueueRequestByLocalConfig (
260
256
targetUrl , queueitToken , queueConfig , customerId , secretKey ,
261
- httpContextProvider , debugEntries )
257
+ httpContextProvider , debugEntries , connectorDiagnostics .isEnabled )
258
+ except Exception as e :
259
+ if (connectorDiagnostics .isEnabled ):
260
+ debugEntries ["Exception" ] = e .message
261
+ raise e
262
262
finally :
263
263
KnownUser .__setDebugCookie (debugEntries , httpContextProvider )
264
264
@@ -267,65 +267,67 @@ def validateRequestByIntegrationConfig(
267
267
currentUrlWithoutQueueITToken , queueitToken ,
268
268
integrationsConfigString , customerId , secretKey ,
269
269
httpContextProvider ):
270
- if (Utils .isNilOrEmpty (currentUrlWithoutQueueITToken )):
271
- raise KnownUserError (
272
- "currentUrlWithoutQueueITToken can not be none or empty." )
273
-
274
- if (Utils .isNilOrEmpty (integrationsConfigString )):
275
- raise KnownUserError (
276
- "integrationsConfigString can not be none or empty." )
277
270
278
271
debugEntries = {}
272
+ customerIntegration = None
273
+ connectorDiagnostics = ConnectorDiagnostics .verify (customerId , secretKey , queueitToken )
274
+ if (connectorDiagnostics .hasError ):
275
+ return connectorDiagnostics .validationResult
279
276
try :
280
- customerIntegration = QueueitHelpers .jsonParse (
281
- integrationsConfigString )
282
-
283
- isDebug = KnownUser .__getIsDebug (queueitToken , secretKey )
284
- if (isDebug ):
285
- debugEntries ["ConfigVersion" ] = customerIntegration ["Version" ]
277
+ if (connectorDiagnostics .isEnabled ):
278
+ debugEntries ["SdkVersion" ] = UserInQueueService .SDK_VERSION
279
+ debugEntries ["Connector" ] = httpContextProvider .getProviderName ()
280
+ debugEntries ["Runtime" ] = KnownUser .__getRunTime ()
286
281
debugEntries ["PureUrl" ] = currentUrlWithoutQueueITToken
287
282
debugEntries ["QueueitToken" ] = queueitToken
288
- debugEntries [
289
- "OriginalUrl" ] = httpContextProvider .getOriginalRequestUrl (
290
- )
291
- KnownUser .__logMoreRequestDetails (debugEntries ,
292
- httpContextProvider )
293
-
283
+ debugEntries ["OriginalUrl" ] = httpContextProvider .getOriginalRequestUrl ()
284
+ KnownUser .__logMoreRequestDetails (debugEntries , httpContextProvider )
285
+
286
+ customerIntegration = json .loads (integrationsConfigString )
287
+ if (connectorDiagnostics .isEnabled ):
288
+ debugEntries ["ConfigVersion" ] = customerIntegration ["Version" ] if customerIntegration and \
289
+ customerIntegration ["Version" ] else "NULL"
290
+ if (Utils .isNilOrEmpty (currentUrlWithoutQueueITToken )):
291
+ raise KnownUserError (
292
+ "currentUrlWithoutQueueITToken can not be none or empty." )
293
+
294
+ if (not customerIntegration or not customerIntegration ["Version" ]):
295
+ raise KnownUserError (
296
+ "integrationsConfigString can not be none or empty." )
294
297
matchedConfig = IntegrationEvaluator ().getMatchedIntegrationConfig (
295
298
customerIntegration , currentUrlWithoutQueueITToken ,
296
299
httpContextProvider )
297
300
298
- if (isDebug ):
301
+ if (connectorDiagnostics . isEnabled ):
299
302
if (matchedConfig == None ):
300
303
debugEntries ["MatchedConfig" ] = "NULL"
301
304
else :
302
305
debugEntries ["MatchedConfig" ] = matchedConfig ["Name" ]
303
306
304
307
if (matchedConfig is None ):
305
- return RequestValidationResult (None , None , None , None , None )
308
+ return RequestValidationResult (None , None , None , None , None , None )
306
309
307
310
if (matchedConfig ["ActionType" ] == ActionTypes .QUEUE ):
308
311
return KnownUser .__handleQueueAction (
309
312
currentUrlWithoutQueueITToken , queueitToken ,
310
313
customerIntegration , customerId , secretKey , matchedConfig ,
311
- httpContextProvider , debugEntries )
314
+ httpContextProvider , debugEntries , connectorDiagnostics . isEnabled )
312
315
elif (matchedConfig ["ActionType" ] == ActionTypes .CANCEL ):
313
316
return KnownUser .__handleCancelAction (
314
317
currentUrlWithoutQueueITToken , queueitToken ,
315
318
customerIntegration , customerId , secretKey , matchedConfig ,
316
- httpContextProvider , debugEntries )
319
+ httpContextProvider , debugEntries , connectorDiagnostics . isEnabled )
317
320
else : # for all unknown types default to 'Ignore'
318
321
userInQueueService = KnownUser .__getUserInQueueService (
319
- httpContextProvider )
320
- result = userInQueueService .getIgnoreActionResult ()
322
+ httpContextProvider )
323
+ result = userInQueueService .getIgnoreActionResult (matchedConfig [ 'Name' ] )
321
324
result .isAjaxResult = KnownUser .__isQueueAjaxCall (
322
325
httpContextProvider )
323
326
return result
324
-
325
- except StandardError as stdErr :
326
- raise KnownUserError (
327
- "integrationConfiguration text was not valid: " +
328
- stdErr .message )
327
+ except Exception as e :
328
+ if (connectorDiagnostics .isEnabled ):
329
+ debugEntries ["Exception" ] = e .message
330
+ raise e
329
331
finally :
330
332
KnownUser .__setDebugCookie (debugEntries , httpContextProvider )
331
333
pass
@@ -334,9 +336,16 @@ def validateRequestByIntegrationConfig(
334
336
def cancelRequestByLocalConfig (targetUrl , queueitToken , cancelConfig ,
335
337
customerId , secretKey , httpContextProvider ):
336
338
debugEntries = {}
339
+ connectorDiagnostics = ConnectorDiagnostics .verify (customerId , secretKey , queueitToken )
340
+ if (connectorDiagnostics .hasError ):
341
+ return connectorDiagnostics .validationResult
337
342
try :
338
343
return KnownUser .__cancelRequestByLocalConfig (
339
344
targetUrl , queueitToken , cancelConfig , customerId , secretKey ,
340
- httpContextProvider , debugEntries )
345
+ httpContextProvider , debugEntries , connectorDiagnostics .isEnabled )
346
+ except Exception as e :
347
+ if (connectorDiagnostics .isEnabled ):
348
+ debugEntries ["Exception" ] = e .message
349
+ raise e
341
350
finally :
342
351
KnownUser .__setDebugCookie (debugEntries , httpContextProvider )
0 commit comments