queueit_knownuserv3 3.6.1 → 3.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +4 -4
- data/LICENSE +21 -0
- data/README.md +188 -0
- data/Rakefile +2 -2
- data/bin/console +14 -14
- data/bin/setup +8 -8
- data/lib/queueit_knownuserv3/connector_diagnostics.rb +68 -68
- data/lib/queueit_knownuserv3/httpcontext_provider.rb +93 -0
- data/lib/queueit_knownuserv3/integration_config_helpers.rb +297 -272
- data/lib/queueit_knownuserv3/known_user.rb +410 -399
- data/lib/queueit_knownuserv3/models.rb +138 -126
- data/lib/queueit_knownuserv3/queue_url_params.rb +80 -80
- data/lib/queueit_knownuserv3/user_in_queue_service.rb +168 -157
- data/lib/queueit_knownuserv3/user_in_queue_state_cookie_repository.rb +191 -191
- data/lib/queueit_knownuserv3.rb +11 -10
- data/queueit_knownuserv3.gemspec +28 -28
- metadata +10 -16
- data/.devcontainer/Dockerfile +0 -43
- data/.devcontainer/devcontainer.json +0 -30
- data/.gitignore +0 -5
- data/.vscode/launch.json +0 -15
- data/ci-build.yml +0 -17
- data/license.txt +0 -165
@@ -1,273 +1,298 @@
|
|
1
|
-
require 'uri'
|
2
|
-
|
3
|
-
module QueueIt
|
4
|
-
class IntegrationEvaluator
|
5
|
-
def getMatchedIntegrationConfig(customerIntegration, currentPageUrl,
|
6
|
-
if (!customerIntegration.kind_of?(Hash) || !customerIntegration.key?("Integrations") ||
|
7
|
-
!customerIntegration["Integrations"].kind_of?(Array))
|
8
|
-
return nil;
|
9
|
-
end
|
10
|
-
customerIntegration["Integrations"].each do |integrationConfig|
|
11
|
-
next if !integrationConfig.kind_of?(Hash) || !integrationConfig.key?("Triggers") || !integrationConfig["Triggers"].kind_of?(Array)
|
12
|
-
|
13
|
-
integrationConfig["Triggers"].each do |trigger|
|
14
|
-
if(!trigger.kind_of?(Hash))
|
15
|
-
return false
|
16
|
-
end
|
17
|
-
if(evaluateTrigger(trigger, currentPageUrl,
|
18
|
-
return integrationConfig
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
return nil
|
24
|
-
end
|
25
|
-
|
26
|
-
def evaluateTrigger(trigger, currentPageUrl,
|
27
|
-
if (!trigger.key?("LogicalOperator") ||
|
28
|
-
!trigger.key?("TriggerParts") ||
|
29
|
-
!trigger["TriggerParts"].kind_of?(Array))
|
30
|
-
return false;
|
31
|
-
end
|
32
|
-
|
33
|
-
if(trigger["LogicalOperator"].eql? "Or")
|
34
|
-
trigger["TriggerParts"].each do |triggerPart|
|
35
|
-
if(!triggerPart.kind_of?(Hash))
|
36
|
-
return false
|
37
|
-
end
|
38
|
-
if(evaluateTriggerPart(triggerPart, currentPageUrl,
|
39
|
-
return true
|
40
|
-
end
|
41
|
-
end
|
42
|
-
return false
|
43
|
-
else
|
44
|
-
trigger["TriggerParts"].each do |triggerPart|
|
45
|
-
if(!triggerPart.kind_of?(Hash))
|
46
|
-
return false
|
47
|
-
end
|
48
|
-
if(!evaluateTriggerPart(triggerPart, currentPageUrl,
|
49
|
-
return false
|
50
|
-
end
|
51
|
-
end
|
52
|
-
return true
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def evaluateTriggerPart(triggerPart, currentPageUrl,
|
57
|
-
if (!triggerPart.key?("ValidatorType"))
|
58
|
-
return false
|
59
|
-
end
|
60
|
-
|
61
|
-
case triggerPart["ValidatorType"]
|
62
|
-
when "UrlValidator"
|
63
|
-
return UrlValidatorHelper.evaluate(triggerPart, currentPageUrl)
|
64
|
-
when "CookieValidator"
|
65
|
-
return CookieValidatorHelper.evaluate(triggerPart,
|
66
|
-
when "UserAgentValidator"
|
67
|
-
return UserAgentValidatorHelper.evaluate(triggerPart,
|
68
|
-
when "HttpHeaderValidator"
|
69
|
-
return HttpHeaderValidatorHelper.evaluate(triggerPart,
|
70
|
-
|
71
|
-
return
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
!triggerPart.key?("
|
82
|
-
!triggerPart.key?("
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
triggerPart["
|
92
|
-
|
93
|
-
triggerPart["
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
when "
|
104
|
-
return
|
105
|
-
when "
|
106
|
-
return
|
107
|
-
|
108
|
-
return
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
!triggerPart.key?("
|
123
|
-
!triggerPart.key?("
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
triggerPart["
|
140
|
-
|
141
|
-
triggerPart["
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
!triggerPart.key?("
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
triggerPart["
|
163
|
-
|
164
|
-
triggerPart["
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
!triggerPart.key?("
|
177
|
-
!triggerPart.key?("
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
triggerPart["
|
186
|
-
|
187
|
-
triggerPart["
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
end
|
229
|
-
|
230
|
-
if(
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
end
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module QueueIt
|
4
|
+
class IntegrationEvaluator
|
5
|
+
def getMatchedIntegrationConfig(customerIntegration, currentPageUrl, httpContext)
|
6
|
+
if (!customerIntegration.kind_of?(Hash) || !customerIntegration.key?("Integrations") ||
|
7
|
+
!customerIntegration["Integrations"].kind_of?(Array))
|
8
|
+
return nil;
|
9
|
+
end
|
10
|
+
customerIntegration["Integrations"].each do |integrationConfig|
|
11
|
+
next if !integrationConfig.kind_of?(Hash) || !integrationConfig.key?("Triggers") || !integrationConfig["Triggers"].kind_of?(Array)
|
12
|
+
|
13
|
+
integrationConfig["Triggers"].each do |trigger|
|
14
|
+
if(!trigger.kind_of?(Hash))
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
if(evaluateTrigger(trigger, currentPageUrl, httpContext))
|
18
|
+
return integrationConfig
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
return nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def evaluateTrigger(trigger, currentPageUrl, httpContext)
|
27
|
+
if (!trigger.key?("LogicalOperator") ||
|
28
|
+
!trigger.key?("TriggerParts") ||
|
29
|
+
!trigger["TriggerParts"].kind_of?(Array))
|
30
|
+
return false;
|
31
|
+
end
|
32
|
+
|
33
|
+
if(trigger["LogicalOperator"].eql? "Or")
|
34
|
+
trigger["TriggerParts"].each do |triggerPart|
|
35
|
+
if(!triggerPart.kind_of?(Hash))
|
36
|
+
return false
|
37
|
+
end
|
38
|
+
if(evaluateTriggerPart(triggerPart, currentPageUrl, httpContext))
|
39
|
+
return true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
return false
|
43
|
+
else
|
44
|
+
trigger["TriggerParts"].each do |triggerPart|
|
45
|
+
if(!triggerPart.kind_of?(Hash))
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
if(!evaluateTriggerPart(triggerPart, currentPageUrl, httpContext))
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
return true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def evaluateTriggerPart(triggerPart, currentPageUrl, httpContext)
|
57
|
+
if (!triggerPart.key?("ValidatorType"))
|
58
|
+
return false
|
59
|
+
end
|
60
|
+
|
61
|
+
case triggerPart["ValidatorType"]
|
62
|
+
when "UrlValidator"
|
63
|
+
return UrlValidatorHelper.evaluate(triggerPart, currentPageUrl)
|
64
|
+
when "CookieValidator"
|
65
|
+
return CookieValidatorHelper.evaluate(triggerPart, httpContext.cookieManager)
|
66
|
+
when "UserAgentValidator"
|
67
|
+
return UserAgentValidatorHelper.evaluate(triggerPart, httpContext.userAgent)
|
68
|
+
when "HttpHeaderValidator"
|
69
|
+
return HttpHeaderValidatorHelper.evaluate(triggerPart, httpContext.headers)
|
70
|
+
when "RequestBodyValidator"
|
71
|
+
return RequestBodyValidatorHelper.evaluate(triggerPart, httpContext.requestBodyAsString)
|
72
|
+
else
|
73
|
+
return false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class UrlValidatorHelper
|
79
|
+
def self.evaluate(triggerPart, url)
|
80
|
+
if (triggerPart.nil? ||
|
81
|
+
!triggerPart.key?("Operator") ||
|
82
|
+
!triggerPart.key?("IsNegative") ||
|
83
|
+
!triggerPart.key?("IsIgnoreCase") ||
|
84
|
+
!triggerPart.key?("UrlPart"))
|
85
|
+
return false
|
86
|
+
end
|
87
|
+
|
88
|
+
urlPart = UrlValidatorHelper.getUrlPart(triggerPart["UrlPart"], url)
|
89
|
+
|
90
|
+
return ComparisonOperatorHelper.evaluate(
|
91
|
+
triggerPart["Operator"],
|
92
|
+
triggerPart["IsNegative"],
|
93
|
+
triggerPart["IsIgnoreCase"],
|
94
|
+
urlPart,
|
95
|
+
triggerPart["ValueToCompare"],
|
96
|
+
triggerPart["ValuesToCompare"])
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.getUrlPart(urlPart, url)
|
100
|
+
begin
|
101
|
+
urlParts = URI.parse(url)
|
102
|
+
case urlPart
|
103
|
+
when "PagePath"
|
104
|
+
return urlParts.path
|
105
|
+
when "PageUrl"
|
106
|
+
return url
|
107
|
+
when "HostName"
|
108
|
+
return urlParts.host
|
109
|
+
else
|
110
|
+
return ''
|
111
|
+
end
|
112
|
+
rescue
|
113
|
+
return ''
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class CookieValidatorHelper
|
119
|
+
def self.evaluate(triggerPart, cookieManager)
|
120
|
+
begin
|
121
|
+
if (triggerPart.nil? ||
|
122
|
+
!triggerPart.key?("Operator") ||
|
123
|
+
!triggerPart.key?("IsNegative") ||
|
124
|
+
!triggerPart.key?("IsIgnoreCase") ||
|
125
|
+
!triggerPart.key?("CookieName"))
|
126
|
+
return false
|
127
|
+
end
|
128
|
+
|
129
|
+
if(cookieManager.nil?)
|
130
|
+
return false
|
131
|
+
end
|
132
|
+
|
133
|
+
cookieName = triggerPart["CookieName"].to_sym
|
134
|
+
cookieValue = ''
|
135
|
+
if(!cookieName.nil? && !cookieManager.getCookie(cookieName).nil?)
|
136
|
+
cookieValue = cookieManager.getCookie(cookieName)
|
137
|
+
end
|
138
|
+
return ComparisonOperatorHelper.evaluate(
|
139
|
+
triggerPart["Operator"],
|
140
|
+
triggerPart["IsNegative"],
|
141
|
+
triggerPart["IsIgnoreCase"],
|
142
|
+
cookieValue,
|
143
|
+
triggerPart["ValueToCompare"],
|
144
|
+
triggerPart["ValuesToCompare"])
|
145
|
+
rescue
|
146
|
+
return false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
class UserAgentValidatorHelper
|
152
|
+
def self.evaluate(triggerPart, userAgent)
|
153
|
+
begin
|
154
|
+
if (triggerPart.nil? ||
|
155
|
+
!triggerPart.key?("Operator") ||
|
156
|
+
!triggerPart.key?("IsNegative") ||
|
157
|
+
!triggerPart.key?("IsIgnoreCase"))
|
158
|
+
return false
|
159
|
+
end
|
160
|
+
|
161
|
+
return ComparisonOperatorHelper.evaluate(
|
162
|
+
triggerPart["Operator"],
|
163
|
+
triggerPart["IsNegative"],
|
164
|
+
triggerPart["IsIgnoreCase"],
|
165
|
+
userAgent,
|
166
|
+
triggerPart["ValueToCompare"],
|
167
|
+
triggerPart["ValuesToCompare"])
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
class HttpHeaderValidatorHelper
|
173
|
+
def self.evaluate(triggerPart, headers)
|
174
|
+
begin
|
175
|
+
if (triggerPart.nil? ||
|
176
|
+
!triggerPart.key?("Operator") ||
|
177
|
+
!triggerPart.key?("IsNegative") ||
|
178
|
+
!triggerPart.key?("IsIgnoreCase")
|
179
|
+
!triggerPart.key?("HttpHeaderName"))
|
180
|
+
return false
|
181
|
+
end
|
182
|
+
|
183
|
+
headerValue = headers[triggerPart['HttpHeaderName']]
|
184
|
+
return ComparisonOperatorHelper.evaluate(
|
185
|
+
triggerPart["Operator"],
|
186
|
+
triggerPart["IsNegative"],
|
187
|
+
triggerPart["IsIgnoreCase"],
|
188
|
+
headerValue,
|
189
|
+
triggerPart["ValueToCompare"],
|
190
|
+
triggerPart["ValuesToCompare"])
|
191
|
+
rescue
|
192
|
+
return false
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
class RequestBodyValidatorHelper
|
198
|
+
def self.evaluate(triggerPart, bodyValue)
|
199
|
+
begin
|
200
|
+
if (triggerPart.nil? ||
|
201
|
+
!triggerPart.key?("Operator") ||
|
202
|
+
!triggerPart.key?("IsNegative") ||
|
203
|
+
!triggerPart.key?("IsIgnoreCase"))
|
204
|
+
return false
|
205
|
+
end
|
206
|
+
|
207
|
+
return ComparisonOperatorHelper.evaluate(
|
208
|
+
triggerPart["Operator"],
|
209
|
+
triggerPart["IsNegative"],
|
210
|
+
triggerPart["IsIgnoreCase"],
|
211
|
+
bodyValue,
|
212
|
+
triggerPart["ValueToCompare"],
|
213
|
+
triggerPart["ValuesToCompare"])
|
214
|
+
rescue
|
215
|
+
return false
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
class ComparisonOperatorHelper
|
221
|
+
def self.evaluate(opt, isNegative, ignoreCase, value, valueToCompare, valuesToCompare)
|
222
|
+
if (value.nil?)
|
223
|
+
value = ''
|
224
|
+
end
|
225
|
+
|
226
|
+
if (valueToCompare.nil?)
|
227
|
+
valueToCompare = ''
|
228
|
+
end
|
229
|
+
|
230
|
+
if (valuesToCompare.nil?)
|
231
|
+
valuesToCompare = []
|
232
|
+
end
|
233
|
+
|
234
|
+
case opt
|
235
|
+
when "Equals"
|
236
|
+
return ComparisonOperatorHelper.equals(value, valueToCompare, isNegative, ignoreCase)
|
237
|
+
when "Contains"
|
238
|
+
return ComparisonOperatorHelper.contains(value, valueToCompare, isNegative, ignoreCase)
|
239
|
+
when "EqualsAny"
|
240
|
+
return ComparisonOperatorHelper.equalsAny(value, valuesToCompare, isNegative, ignoreCase)
|
241
|
+
when "ContainsAny"
|
242
|
+
return ComparisonOperatorHelper.containsAny(value, valuesToCompare, isNegative, ignoreCase)
|
243
|
+
else
|
244
|
+
return false
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def self.equals(value, valueToCompare, isNegative, ignoreCase)
|
249
|
+
if(ignoreCase)
|
250
|
+
evaluation = value.upcase.eql? valueToCompare.upcase
|
251
|
+
else
|
252
|
+
evaluation = value.eql? valueToCompare
|
253
|
+
end
|
254
|
+
|
255
|
+
if(isNegative)
|
256
|
+
return !evaluation
|
257
|
+
else
|
258
|
+
return evaluation
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
def self.contains(value, valueToCompare, isNegative, ignoreCase)
|
263
|
+
if((valueToCompare.eql? "*") && !(value.empty? || value.nil?))
|
264
|
+
return true
|
265
|
+
end
|
266
|
+
|
267
|
+
if(ignoreCase)
|
268
|
+
value = value.upcase
|
269
|
+
valueToCompare = valueToCompare.upcase
|
270
|
+
end
|
271
|
+
|
272
|
+
evaluation = value.include? valueToCompare
|
273
|
+
if(isNegative)
|
274
|
+
return !evaluation
|
275
|
+
else
|
276
|
+
return evaluation
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def self.equalsAny(value, valuesToCompare, isNegative, ignoreCase)
|
281
|
+
valuesToCompare.each do |valueToCompare|
|
282
|
+
if (ComparisonOperatorHelper.equals(value, valueToCompare, false, ignoreCase))
|
283
|
+
return !isNegative
|
284
|
+
end
|
285
|
+
end
|
286
|
+
return isNegative
|
287
|
+
end
|
288
|
+
|
289
|
+
def self.containsAny(value, valuesToCompare, isNegative, ignoreCase)
|
290
|
+
valuesToCompare.each do |valueToCompare|
|
291
|
+
if (ComparisonOperatorHelper.contains(value, valueToCompare, false, ignoreCase))
|
292
|
+
return !isNegative
|
293
|
+
end
|
294
|
+
end
|
295
|
+
return isNegative
|
296
|
+
end
|
297
|
+
end
|
273
298
|
end
|