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.
@@ -1,273 +1,298 @@
1
- require 'uri'
2
-
3
- module QueueIt
4
- class IntegrationEvaluator
5
- def getMatchedIntegrationConfig(customerIntegration, currentPageUrl, request)
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, request))
18
- return integrationConfig
19
- end
20
- end
21
- end
22
-
23
- return nil
24
- end
25
-
26
- def evaluateTrigger(trigger, currentPageUrl, request)
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, request))
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, request))
49
- return false
50
- end
51
- end
52
- return true
53
- end
54
- end
55
-
56
- def evaluateTriggerPart(triggerPart, currentPageUrl, request)
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, request.cookie_jar)
66
- when "UserAgentValidator"
67
- return UserAgentValidatorHelper.evaluate(triggerPart, request.user_agent)
68
- when "HttpHeaderValidator"
69
- return HttpHeaderValidatorHelper.evaluate(triggerPart, request.headers)
70
- else
71
- return false
72
- end
73
- end
74
- end
75
-
76
- class UrlValidatorHelper
77
- def self.evaluate(triggerPart, url)
78
- if (triggerPart.nil? ||
79
- !triggerPart.key?("Operator") ||
80
- !triggerPart.key?("IsNegative") ||
81
- !triggerPart.key?("IsIgnoreCase") ||
82
- !triggerPart.key?("UrlPart"))
83
- return false
84
- end
85
-
86
- urlPart = UrlValidatorHelper.getUrlPart(triggerPart["UrlPart"], url)
87
-
88
- return ComparisonOperatorHelper.evaluate(
89
- triggerPart["Operator"],
90
- triggerPart["IsNegative"],
91
- triggerPart["IsIgnoreCase"],
92
- urlPart,
93
- triggerPart["ValueToCompare"],
94
- triggerPart["ValuesToCompare"])
95
- end
96
-
97
- def self.getUrlPart(urlPart, url)
98
- begin
99
- urlParts = URI.parse(url)
100
- case urlPart
101
- when "PagePath"
102
- return urlParts.path
103
- when "PageUrl"
104
- return url
105
- when "HostName"
106
- return urlParts.host
107
- else
108
- return ''
109
- end
110
- rescue
111
- return ''
112
- end
113
- end
114
- end
115
-
116
- class CookieValidatorHelper
117
- def self.evaluate(triggerPart, cookieJar)
118
- begin
119
- if (triggerPart.nil? ||
120
- !triggerPart.key?("Operator") ||
121
- !triggerPart.key?("IsNegative") ||
122
- !triggerPart.key?("IsIgnoreCase") ||
123
- !triggerPart.key?("CookieName"))
124
- return false
125
- end
126
-
127
- if(cookieJar.nil?)
128
- return false
129
- end
130
-
131
- cookieName = triggerPart["CookieName"]
132
- cookieValue = ''
133
- if(!cookieName.nil? && !cookieJar[cookieName.to_sym].nil?)
134
- cookieValue = cookieJar[cookieName.to_sym]
135
- end
136
- return ComparisonOperatorHelper.evaluate(
137
- triggerPart["Operator"],
138
- triggerPart["IsNegative"],
139
- triggerPart["IsIgnoreCase"],
140
- cookieValue,
141
- triggerPart["ValueToCompare"],
142
- triggerPart["ValuesToCompare"])
143
- rescue
144
- return false
145
- end
146
- end
147
- end
148
-
149
- class UserAgentValidatorHelper
150
- def self.evaluate(triggerPart, userAgent)
151
- begin
152
- if (triggerPart.nil? ||
153
- !triggerPart.key?("Operator") ||
154
- !triggerPart.key?("IsNegative") ||
155
- !triggerPart.key?("IsIgnoreCase"))
156
- return false
157
- end
158
-
159
- return ComparisonOperatorHelper.evaluate(
160
- triggerPart["Operator"],
161
- triggerPart["IsNegative"],
162
- triggerPart["IsIgnoreCase"],
163
- userAgent,
164
- triggerPart["ValueToCompare"],
165
- triggerPart["ValuesToCompare"])
166
- end
167
- end
168
- end
169
-
170
- class HttpHeaderValidatorHelper
171
- def self.evaluate(triggerPart, headers)
172
- begin
173
- if (triggerPart.nil? ||
174
- !triggerPart.key?("Operator") ||
175
- !triggerPart.key?("IsNegative") ||
176
- !triggerPart.key?("IsIgnoreCase")
177
- !triggerPart.key?("HttpHeaderName"))
178
- return false
179
- end
180
-
181
- headerValue = headers[triggerPart['HttpHeaderName']]
182
- return ComparisonOperatorHelper.evaluate(
183
- triggerPart["Operator"],
184
- triggerPart["IsNegative"],
185
- triggerPart["IsIgnoreCase"],
186
- headerValue,
187
- triggerPart["ValueToCompare"],
188
- triggerPart["ValuesToCompare"])
189
- rescue
190
- return false
191
- end
192
- end
193
- end
194
-
195
- class ComparisonOperatorHelper
196
- def self.evaluate(opt, isNegative, ignoreCase, value, valueToCompare, valuesToCompare)
197
- if (value.nil?)
198
- value = ''
199
- end
200
-
201
- if (valueToCompare.nil?)
202
- valueToCompare = ''
203
- end
204
-
205
- if (valuesToCompare.nil?)
206
- valuesToCompare = []
207
- end
208
-
209
- case opt
210
- when "Equals"
211
- return ComparisonOperatorHelper.equals(value, valueToCompare, isNegative, ignoreCase)
212
- when "Contains"
213
- return ComparisonOperatorHelper.contains(value, valueToCompare, isNegative, ignoreCase)
214
- when "EqualsAny"
215
- return ComparisonOperatorHelper.equalsAny(value, valuesToCompare, isNegative, ignoreCase)
216
- when "ContainsAny"
217
- return ComparisonOperatorHelper.containsAny(value, valuesToCompare, isNegative, ignoreCase)
218
- else
219
- return false
220
- end
221
- end
222
-
223
- def self.equals(value, valueToCompare, isNegative, ignoreCase)
224
- if(ignoreCase)
225
- evaluation = value.upcase.eql? valueToCompare.upcase
226
- else
227
- evaluation = value.eql? valueToCompare
228
- end
229
-
230
- if(isNegative)
231
- return !evaluation
232
- else
233
- return evaluation
234
- end
235
- end
236
-
237
- def self.contains(value, valueToCompare, isNegative, ignoreCase)
238
- if((valueToCompare.eql? "*") && !(value.empty? || value.nil?))
239
- return true
240
- end
241
-
242
- if(ignoreCase)
243
- value = value.upcase
244
- valueToCompare = valueToCompare.upcase
245
- end
246
-
247
- evaluation = value.include? valueToCompare
248
- if(isNegative)
249
- return !evaluation
250
- else
251
- return evaluation
252
- end
253
- end
254
-
255
- def self.equalsAny(value, valuesToCompare, isNegative, ignoreCase)
256
- valuesToCompare.each do |valueToCompare|
257
- if (ComparisonOperatorHelper.equals(value, valueToCompare, false, ignoreCase))
258
- return !isNegative
259
- end
260
- end
261
- return isNegative
262
- end
263
-
264
- def self.containsAny(value, valuesToCompare, isNegative, ignoreCase)
265
- valuesToCompare.each do |valueToCompare|
266
- if (ComparisonOperatorHelper.contains(value, valueToCompare, false, ignoreCase))
267
- return !isNegative
268
- end
269
- end
270
- return isNegative
271
- end
272
- end
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