rubycicd_uat 2.0.7
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/lib/kount.rb +31 -0
- data/lib/kount/Logs.log +473 -0
- data/lib/kount/Response.rb +344 -0
- data/lib/kount/cart.rb +36 -0
- data/lib/kount/client.rb +147 -0
- data/lib/kount/payment_types.rb +52 -0
- data/lib/kount/request.rb +50 -0
- data/lib/kount/request/inquiry.rb +90 -0
- data/lib/kount/request/update.rb +28 -0
- data/lib/kount/ris_inquiry.rb +73 -0
- data/lib/kount/security_mash.rb +82 -0
- data/lib/kount/utils/khash.rb +56 -0
- metadata +88 -0
@@ -0,0 +1,344 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
|
4
|
+
module Response
|
5
|
+
class Resp
|
6
|
+
def initialize(paramlist)
|
7
|
+
@paramlist = paramlist
|
8
|
+
puts @paramlist
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_mode
|
12
|
+
modes = @paramlist['MODE'].to_s
|
13
|
+
return modes unless modes.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_version
|
17
|
+
vers = @paramlist['VERS'].to_s
|
18
|
+
return vers unless vers.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_transaction_id
|
22
|
+
tran = @paramlist['TRAN'].to_s
|
23
|
+
return tran unless tran.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_merchant_id
|
27
|
+
merchantid = @paramlist['MERC'].to_s
|
28
|
+
return merchantid unless merchantid.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_session_id
|
32
|
+
sessionid = @paramlist['SESS'].to_s
|
33
|
+
return sessionid unless sessionid.empty?
|
34
|
+
end
|
35
|
+
|
36
|
+
def get_order_number
|
37
|
+
orderno = @paramlist['ORDR'].to_s
|
38
|
+
return orderno unless orderno.empty?
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_site
|
42
|
+
site = @paramlist['SITE'].to_s
|
43
|
+
return site unless site.empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_auto
|
47
|
+
auto = @paramlist['AUTO'].to_s
|
48
|
+
return auto unless auto.empty?
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_score
|
52
|
+
score = @paramlist['SCOR'].to_s
|
53
|
+
return score unless score.empty?
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_omniscore
|
57
|
+
omniscore = @paramlist['OMNISCORE'].to_s
|
58
|
+
return omniscore unless omniscore.empty?
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_geox
|
62
|
+
geox = @paramlist['GEOX'].to_s
|
63
|
+
return geox unless geox.empty?
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_brand
|
67
|
+
brand = @paramlist['BRND'].to_s
|
68
|
+
return brand unless brand.empty?
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_velo
|
72
|
+
velo = @paramlist['VELO'].to_s
|
73
|
+
return velo unless velo.empty?
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_vmax
|
77
|
+
vmax = @paramlist['VMAX'].to_s
|
78
|
+
return vmax unless vmax.empty?
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_network
|
82
|
+
network = @paramlist['NETW'].to_s
|
83
|
+
return network unless network.empty?
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_region
|
87
|
+
region = @paramlist['REGN'].to_s
|
88
|
+
return region unless region.empty?
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_kaptcha
|
92
|
+
kapt = @paramlist['KAPT'].to_s
|
93
|
+
return kapt unless kapt.empty?
|
94
|
+
end
|
95
|
+
|
96
|
+
def get_proxy
|
97
|
+
proxy = @paramlist['PROXY'].to_s
|
98
|
+
return proxy unless proxy.empty?
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_emails
|
102
|
+
email = @paramlist['EMAILS'].to_s
|
103
|
+
return email unless email.empty?
|
104
|
+
end
|
105
|
+
|
106
|
+
def get_http_country
|
107
|
+
httmcountry = @paramlist['HTTP_COUNTRY'].to_s
|
108
|
+
return httmcountry unless httmcountry.empty?
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_timezone
|
112
|
+
timezone = @paramlist['TIMEZONE'].to_s
|
113
|
+
return timezone unless timezone.empty?
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_cards
|
117
|
+
cards = @paramlist['CARDS'].to_s
|
118
|
+
return cards unless cards.empty?
|
119
|
+
end
|
120
|
+
|
121
|
+
def get_pc_remote
|
122
|
+
pcremote = @paramlist['PC_REMOTE'].to_s
|
123
|
+
return pcremote unless pcremote.empty?
|
124
|
+
end
|
125
|
+
|
126
|
+
def get_devices
|
127
|
+
devices = @paramlist['DEVICES'].to_s
|
128
|
+
return devices unless devices.empty?
|
129
|
+
end
|
130
|
+
|
131
|
+
def get_device_layers
|
132
|
+
device_layers = @paramlist['DEVICE_LAYERS'].to_s
|
133
|
+
return device_layers unless device_layers.empty?
|
134
|
+
end
|
135
|
+
|
136
|
+
def get_mobile_forwarder
|
137
|
+
mobile_forwarder = @paramlist['MOBILE_FORWARDER'].to_s
|
138
|
+
return mobile_forwarder unless mobile_forwarder.empty?
|
139
|
+
end
|
140
|
+
|
141
|
+
def get_voice_device
|
142
|
+
voicedevice = @paramlist['VOICE_DEVICE'].to_s
|
143
|
+
return voicedevice unless voicedevice.empty?
|
144
|
+
end
|
145
|
+
|
146
|
+
def get_local_time
|
147
|
+
localtime = @paramlist['LOCALTIME'].to_s
|
148
|
+
return localtime unless localtime.empty?
|
149
|
+
end
|
150
|
+
|
151
|
+
def get_mobile_type
|
152
|
+
mobiletype = @paramlist['MOBILE_TYPE'].to_s
|
153
|
+
return mobiletype unless mobiletype.empty?
|
154
|
+
end
|
155
|
+
|
156
|
+
def get_fingerprint
|
157
|
+
fingerprint = @paramlist['FINGERPRINT'].to_s
|
158
|
+
return fingerprint unless fingerprint.empty?
|
159
|
+
end
|
160
|
+
|
161
|
+
def get_flash
|
162
|
+
flash = @paramlist['FLASH'].to_s
|
163
|
+
return flash unless flash.empty?
|
164
|
+
end
|
165
|
+
|
166
|
+
def get_language
|
167
|
+
language = @paramlist['LANGUAGE'].to_s
|
168
|
+
return language unless language.empty?
|
169
|
+
end
|
170
|
+
|
171
|
+
def get_country
|
172
|
+
country = @paramlist['COUNTRY'].to_s
|
173
|
+
return country unless country.empty?
|
174
|
+
end
|
175
|
+
|
176
|
+
def get_javascript
|
177
|
+
javascript = @paramlist['JAVASCRIPT'].to_s
|
178
|
+
return javascript unless javascript.empty?
|
179
|
+
end
|
180
|
+
|
181
|
+
def get_cookies
|
182
|
+
cookie = @paramlist['COOKIES'].to_s
|
183
|
+
return cookie unless cookie.empty?
|
184
|
+
end
|
185
|
+
|
186
|
+
def get_mobile_device
|
187
|
+
mobiledevice = @paramlist['MOBILE_DEVICE'].to_s
|
188
|
+
return mobiledevice unless mobiledevice.empty?
|
189
|
+
end
|
190
|
+
|
191
|
+
def get_pierced_ipaddress
|
192
|
+
pip_address = @paramlist['PIP_IPAD'].to_s
|
193
|
+
return pip_address unless pip_address.empty?
|
194
|
+
end
|
195
|
+
|
196
|
+
def get_piercedipaddress_latitude
|
197
|
+
pip_lat = @paramlist['PIP_LAT'].to_s
|
198
|
+
return pip_lat unless pip_lat.empty?
|
199
|
+
end
|
200
|
+
|
201
|
+
def get_piercedipaddress_longitude
|
202
|
+
pip_long = @paramlist['PIP_LON'].to_s
|
203
|
+
return pip_long unless pip_long.empty?
|
204
|
+
end
|
205
|
+
|
206
|
+
def get_piercedipaddress_country
|
207
|
+
pip_country = @paramlist['PIP_COUNTRY'].to_s
|
208
|
+
return pip_country unless pip_country.empty?
|
209
|
+
end
|
210
|
+
|
211
|
+
def get_piercedipaddress_region
|
212
|
+
pip_region = @paramlist['PIP_REGION'].to_s
|
213
|
+
return pip_region unless pip_region.empty?
|
214
|
+
end
|
215
|
+
|
216
|
+
def get_piercedipaddress_city
|
217
|
+
pip_city = @paramlist['PIP_CITY'].to_s
|
218
|
+
return pip_city unless pip_city.empty?
|
219
|
+
end
|
220
|
+
|
221
|
+
def get_piercedipaddress_organization
|
222
|
+
pip_org = @paramlist['PIP_ORG'].to_s
|
223
|
+
return pip_org unless pip_org.empty?
|
224
|
+
end
|
225
|
+
|
226
|
+
def get_ipaddress
|
227
|
+
ip_ipad = @paramlist['IP_IPAD'].to_s
|
228
|
+
return ip_ipad unless ip_ipad.empty?
|
229
|
+
end
|
230
|
+
|
231
|
+
def get_ipaddress_latitude
|
232
|
+
ip_lat = @paramlist['IP_LAT'].to_s
|
233
|
+
return ip_lat unless ip_lat.empty?
|
234
|
+
end
|
235
|
+
|
236
|
+
def get_ipaddress_longitude
|
237
|
+
ip_long = @paramlist['IP_LON'].to_s
|
238
|
+
return ip_long unless ip_long.empty?
|
239
|
+
end
|
240
|
+
|
241
|
+
def get_ipaddress_country
|
242
|
+
ip_country = @paramlist['IP_COUNTRY'].to_s
|
243
|
+
return ip_country unless ip_country.empty?
|
244
|
+
end
|
245
|
+
|
246
|
+
def get_ipaddress_region
|
247
|
+
ip_region = @paramlist['IP_REGION'].to_s
|
248
|
+
return ip_region unless ip_region.empty?
|
249
|
+
end
|
250
|
+
|
251
|
+
def get_ipaddress_city
|
252
|
+
ip_city = @paramlist['IP_CITY'].to_s
|
253
|
+
return ip_city unless ip_city.empty?
|
254
|
+
end
|
255
|
+
|
256
|
+
def get_ipaddress_organization
|
257
|
+
ip_org = @paramlist['IP_ORG'].to_s
|
258
|
+
return ip_org unless ip_org.empty?
|
259
|
+
end
|
260
|
+
|
261
|
+
def get_date_device_firstseen
|
262
|
+
ddfs = @paramlist['DDFS'].to_s
|
263
|
+
return ddfs unless ddfs.empty?
|
264
|
+
end
|
265
|
+
|
266
|
+
def get_useragent_string
|
267
|
+
user_agent = @paramlist['UAS'].to_s
|
268
|
+
return user_agent unless user_agent.empty?
|
269
|
+
end
|
270
|
+
|
271
|
+
def get_devicescreen_resolution
|
272
|
+
dsr = @paramlist['DSR'].to_s
|
273
|
+
return dsr unless dsr.empty?
|
274
|
+
end
|
275
|
+
|
276
|
+
def get_os
|
277
|
+
os = @paramlist['OS'].to_s
|
278
|
+
return os unless os.empty?
|
279
|
+
end
|
280
|
+
|
281
|
+
def get_browser
|
282
|
+
browser = @paramlist['BROWSER'].to_s
|
283
|
+
return browser unless browser.empty?
|
284
|
+
end
|
285
|
+
|
286
|
+
def get_numberrules_triggered
|
287
|
+
no_rules_triggered = @paramlist['RULES_TRIGGERED'].to_s
|
288
|
+
no_rules_triggered
|
289
|
+
end
|
290
|
+
|
291
|
+
def get_rules_triggered
|
292
|
+
rules_count = get_numberrules_triggered
|
293
|
+
rules = []
|
294
|
+
(0..rules_count.to_i - 1).each do |i|
|
295
|
+
ruleid = @paramlist["RULE_ID_#{i}"]
|
296
|
+
rules[ruleid.to_i] = @paramlist["RULE_DESCRIPTION_#{i}"]
|
297
|
+
end
|
298
|
+
rules.compact
|
299
|
+
end
|
300
|
+
|
301
|
+
def get_warning_count
|
302
|
+
warning_count = @paramlist['WARNING_COUNT'].to_s
|
303
|
+
warning_count
|
304
|
+
end
|
305
|
+
|
306
|
+
def get_warnings
|
307
|
+
warnings = []
|
308
|
+
warningcount = get_warning_count
|
309
|
+
(0..warningcount.to_i - 1).each do |i|
|
310
|
+
warnings = @paramlist["WARNING_#{i}"]
|
311
|
+
end
|
312
|
+
warnings.compact
|
313
|
+
end
|
314
|
+
|
315
|
+
def get_error_count
|
316
|
+
errorcount = @paramlist['ERROR_COUNT'].to_s
|
317
|
+
errorcount
|
318
|
+
end
|
319
|
+
|
320
|
+
def geterrors
|
321
|
+
errors = []
|
322
|
+
error_count = get_error_count
|
323
|
+
(0..error_count.to_i - 1).each do |i|
|
324
|
+
errors = @paramlist["ERROR_#{i}"]
|
325
|
+
end
|
326
|
+
errors.compact
|
327
|
+
end
|
328
|
+
|
329
|
+
def get_numbercounters_triggered
|
330
|
+
count_triggered = @paramlist['COUNTERS_TRIGGERED'].to_s
|
331
|
+
count_triggered
|
332
|
+
end
|
333
|
+
|
334
|
+
def get_counters_triggered
|
335
|
+
counters = []
|
336
|
+
numCounters = get_numbercounters_triggered
|
337
|
+
(0..numCounters.to_i - 1).each do |i|
|
338
|
+
countername = @paramlist["COUNTER_NAME_#{i}"]
|
339
|
+
counters[countername.to_s] = @paramlist["COUNTER_VALUE_#{i}"]
|
340
|
+
end
|
341
|
+
counters.compact
|
342
|
+
end
|
343
|
+
end
|
344
|
+
end
|
data/lib/kount/cart.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Kount
|
2
|
+
##
|
3
|
+
# This class handles cart data until the get_request is ready
|
4
|
+
# to push the data into the form fields
|
5
|
+
class Cart
|
6
|
+
attr_accessor :items
|
7
|
+
|
8
|
+
# Initialize cart object
|
9
|
+
def initialize
|
10
|
+
@items = []
|
11
|
+
end
|
12
|
+
|
13
|
+
# Add cart items
|
14
|
+
#
|
15
|
+
# @param item [String] Cart item name
|
16
|
+
# @param type [String] Cart type name
|
17
|
+
# @param desc [String] Cart item long description
|
18
|
+
# @param quant [String] Cart item quantity
|
19
|
+
# @param price [String] Cart item price in cents
|
20
|
+
def add_item(item, type, desc, quant, price)
|
21
|
+
@items << { TYPE: type,
|
22
|
+
DESC: desc,
|
23
|
+
ITEM: item,
|
24
|
+
QUANT: quant,
|
25
|
+
PRICE: price }
|
26
|
+
end
|
27
|
+
|
28
|
+
# Initialize an Inquiry object
|
29
|
+
#
|
30
|
+
# @param param [String] Param type: :TYPE, :DESC, :ITEM, :PRICE, or :QUANT
|
31
|
+
# @return [Array] Ordered array of the cart contents for each param type
|
32
|
+
def get_item(param)
|
33
|
+
@items.collect { |item| item[param] }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/kount/client.rb
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'kount/security_mash'
|
2
|
+
require 'kount/cart'
|
3
|
+
require 'kount/request'
|
4
|
+
require 'kount/request/update'
|
5
|
+
require 'kount/request/inquiry'
|
6
|
+
require 'rest-client'
|
7
|
+
require 'uri'
|
8
|
+
require 'kount/utils/khash'
|
9
|
+
require 'logger'
|
10
|
+
|
11
|
+
|
12
|
+
module Kount
|
13
|
+
##
|
14
|
+
# This class is where the primary interaction with
|
15
|
+
# the merchant integration will take place.
|
16
|
+
class Client
|
17
|
+
# Tells the RIS server to respond in JSON instead of key/value pairs
|
18
|
+
# This cannot be overridden.
|
19
|
+
RESPONSE_FORMAT = 'JSON'
|
20
|
+
|
21
|
+
# RIS Version. Can be overridden my merchant if required.
|
22
|
+
DEFAULT_VERSION = '0700'
|
23
|
+
|
24
|
+
# Default endpoint for production. Used by the DEFAULT_OPTIONS
|
25
|
+
ENDPOINT_PROD = 'https://risk.kount.net'
|
26
|
+
|
27
|
+
# Default endpoint for test. Used by the TEST_DEFAULT_OPTIONS
|
28
|
+
ENDPOINT_TEST = 'https://risk.test.kount.net'
|
29
|
+
|
30
|
+
# Default params for production
|
31
|
+
PROD_DEFAULT_OPTIONS = {
|
32
|
+
endpoint: ENDPOINT_PROD,
|
33
|
+
version: DEFAULT_VERSION,
|
34
|
+
is_test: false,
|
35
|
+
timeout: 10
|
36
|
+
}
|
37
|
+
|
38
|
+
# Default params for test if is_test is TRUE
|
39
|
+
TEST_DEFAULT_OPTIONS = {
|
40
|
+
endpoint: ENDPOINT_TEST,
|
41
|
+
version: DEFAULT_VERSION,
|
42
|
+
timeout: 10
|
43
|
+
}
|
44
|
+
|
45
|
+
# Initialize a client object
|
46
|
+
#
|
47
|
+
# Example usage
|
48
|
+
# {:merchant_id => "123456", :key => "trhvihsrihsta7ftadk6edkre7y8..."}
|
49
|
+
#
|
50
|
+
# @param params [Hash] Hash with merchant_id, ksalt and key, plus any
|
51
|
+
# other optional params
|
52
|
+
def initialize(params = {})
|
53
|
+
@logger = Logger.new("Logs.log")
|
54
|
+
@options = {}
|
55
|
+
if params[:is_test]
|
56
|
+
@options.merge!(TEST_DEFAULT_OPTIONS)
|
57
|
+
else
|
58
|
+
@options.merge!(PROD_DEFAULT_OPTIONS)
|
59
|
+
end
|
60
|
+
@options.merge!(params)
|
61
|
+
@logger.info("Options Params : #{@options}")
|
62
|
+
end
|
63
|
+
|
64
|
+
# Makes the call to the Kount RIS server
|
65
|
+
#
|
66
|
+
# @param request [Kount::Request] Kount inquiry or update object
|
67
|
+
# @return [Hash] RIS response formatted into a native hash
|
68
|
+
def get_response(request)
|
69
|
+
params = prepare_request_params(request)
|
70
|
+
response = {}
|
71
|
+
begin
|
72
|
+
response = RestClient::Resource.new(
|
73
|
+
endpoint,
|
74
|
+
verify_ssl: verify_ssl_option, timeout: timeout, log: @logger
|
75
|
+
).post params, x_kount_api_key: key
|
76
|
+
|
77
|
+
@logger.info("Response Object : #{JSON.parse(response)}")
|
78
|
+
JSON.parse(response)
|
79
|
+
rescue StandardError
|
80
|
+
# RIS errors do not come back as JSON, so just pass them along raw.
|
81
|
+
# @logger.error("Error : Network Timeout Getting #{response} Response.
|
82
|
+
# Your Timeout option valus is #{timeout},
|
83
|
+
# Use Default timeout which is 10 sec.")
|
84
|
+
if response.empty?
|
85
|
+
@logger.debug("Network Timeout Getting #{response} Response.
|
86
|
+
Current Timeout option valus is #{timeout},
|
87
|
+
Use Default timeout which is 10 sec.")
|
88
|
+
else
|
89
|
+
@logger.error("#{response}")
|
90
|
+
end
|
91
|
+
response
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Give the request object what it needs to know to process the params
|
96
|
+
# to send to RIS.
|
97
|
+
def prepare_request_params(request)
|
98
|
+
request.prepare_params(version, merchant_id, RESPONSE_FORMAT, ksalt)
|
99
|
+
end
|
100
|
+
|
101
|
+
# Kount Merchant ID
|
102
|
+
def merchant_id
|
103
|
+
@options[:merchant_id]
|
104
|
+
end
|
105
|
+
|
106
|
+
# RIS Interface Version
|
107
|
+
def version
|
108
|
+
@options[:version]
|
109
|
+
end
|
110
|
+
|
111
|
+
# RIS Endpoint URL
|
112
|
+
def endpoint
|
113
|
+
@options[:endpoint]
|
114
|
+
end
|
115
|
+
|
116
|
+
# Timeout settings
|
117
|
+
def timeout
|
118
|
+
@options[:timeout]
|
119
|
+
end
|
120
|
+
|
121
|
+
# Merchant API for RIS acess
|
122
|
+
def key
|
123
|
+
@options[:key]
|
124
|
+
end
|
125
|
+
|
126
|
+
# Secret Kount salt for KHASH
|
127
|
+
def ksalt
|
128
|
+
@options[:ksalt]
|
129
|
+
end
|
130
|
+
|
131
|
+
# Is test or production setting
|
132
|
+
def test?
|
133
|
+
@options[:is_test]
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
# Helper method to turn on/off the SSL cert verify based on is_test config
|
139
|
+
def verify_ssl_option
|
140
|
+
if test?
|
141
|
+
OpenSSL::SSL::VERIFY_NONE
|
142
|
+
else
|
143
|
+
OpenSSL::SSL::VERIFY_PEER
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|