hamburglar 0.1.3 → 0.1.4
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/hamburglar/gateways/base.rb +2 -60
- data/lib/hamburglar/gateways/max_mind.rb +46 -5
- data/lib/hamburglar/version.rb +1 -1
- metadata +13 -25
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 258377c2c9186334f0110e0568eb1e05068c4bbd
|
|
4
|
+
data.tar.gz: 9ee62c41ee572421a46c829c144f2e6e5757bc68
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e70ff22a7b8c6846a0d8bb4a9e0348659447d18fae4175f89035f54fecbedd88f96542ebda3351aa78531122a792a36bd152a898286f55225c163df752d8c0cb
|
|
7
|
+
data.tar.gz: 9150c6a7b8e1341177d24744f75674267fa70c38b6500a4c9b61f4257706c3977c5429068eeb0ddb9fddaafc694c4fa9c3aaaa72c2d3d7352bcb23aa9bedea56
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
require 'net/https'
|
|
2
|
-
require 'cgi'
|
|
3
|
-
|
|
4
1
|
module Hamburglar
|
|
5
2
|
module Gateways
|
|
6
3
|
# Hamburglar::Gateways::Base is the main class that handles sending API
|
|
7
4
|
# requests to upstream providers. All other gateways should inherit from
|
|
8
5
|
# this class
|
|
9
6
|
class Base
|
|
10
|
-
|
|
11
|
-
# A regex for matching URLs with http or https
|
|
12
|
-
# This will be used to verify API urls
|
|
13
|
-
URL_REGEX = /https?:\/\/[\S]+/
|
|
14
|
-
|
|
15
7
|
# The parameters for the API request
|
|
16
8
|
attr_reader :params
|
|
17
9
|
|
|
@@ -32,15 +24,6 @@ module Hamburglar
|
|
|
32
24
|
@response = {}
|
|
33
25
|
end
|
|
34
26
|
|
|
35
|
-
# Get or set the API URL for the gateway
|
|
36
|
-
def self.set_api_url(url = '')
|
|
37
|
-
if url.match URL_REGEX
|
|
38
|
-
@api_url = url
|
|
39
|
-
else
|
|
40
|
-
raise Hamburglar::InvalidURL, url
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
27
|
# Set required parameters for an API call
|
|
45
28
|
def self.set_required_params(*params)
|
|
46
29
|
@required_params = params
|
|
@@ -76,51 +59,10 @@ module Hamburglar
|
|
|
76
59
|
validate || raise(Hamburglar::InvalidRequest)
|
|
77
60
|
end
|
|
78
61
|
|
|
79
|
-
#
|
|
62
|
+
# Subclasses need to implement this.
|
|
80
63
|
def submit
|
|
81
|
-
|
|
82
|
-
url = "#{self.class.api_url}?#{query_string}"
|
|
83
|
-
if res = fetch(url)
|
|
84
|
-
@response = parse_response(res.body)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
private
|
|
89
|
-
|
|
90
|
-
# Formats @params into a query string for an HTTP GET request
|
|
91
|
-
def query_string
|
|
92
|
-
@params.map { |key, val| "#{key}=#{CGI.escape(val.to_s)}" }.join('&')
|
|
64
|
+
raise NotImplementedError
|
|
93
65
|
end
|
|
94
|
-
|
|
95
|
-
# Parses raw data returned from an API call
|
|
96
|
-
#
|
|
97
|
-
# This method should be overwritten by any API subclasses that
|
|
98
|
-
# return data in a different format
|
|
99
|
-
#
|
|
100
|
-
# Returns [Hash]
|
|
101
|
-
def parse_response(raw = '')
|
|
102
|
-
data = raw.to_s.split(';').map do |line|
|
|
103
|
-
key, val = line.split('=')
|
|
104
|
-
if key.to_s != "" && val.to_s != ""
|
|
105
|
-
[key.to_sym, val]
|
|
106
|
-
else
|
|
107
|
-
next
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
Hash[data]
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
# Performs a GET request on the given URI, redirects if needed
|
|
114
|
-
def fetch(uri_str, limit = 10)
|
|
115
|
-
# You should choose better exception.
|
|
116
|
-
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
|
|
117
|
-
Faraday.new(:url => uri_str, :ssl => {:verify => true, :ca_file => File.expand_path('../../../cacert.pem', __FILE__)}) do |c|
|
|
118
|
-
c.response :raise_error
|
|
119
|
-
c.response :follow_redirects, :limit => limit
|
|
120
|
-
c.adapter :net_http
|
|
121
|
-
end.get
|
|
122
|
-
end
|
|
123
|
-
|
|
124
66
|
end
|
|
125
67
|
end
|
|
126
68
|
end
|
|
@@ -1,15 +1,57 @@
|
|
|
1
|
+
require 'faraday_middleware/response_middleware'
|
|
2
|
+
|
|
1
3
|
module Hamburglar
|
|
2
4
|
module Gateways
|
|
3
5
|
# The MaxMind module contains classes for working
|
|
4
6
|
# with MaxMind's minFraud and Telephone Verification APIs
|
|
5
7
|
module MaxMind
|
|
8
|
+
class Base < ::Hamburglar::Gateways::Base
|
|
9
|
+
# Parses a MaxMind text response to a hash.
|
|
10
|
+
class ResponseParser < ::FaradayMiddleware::ResponseMiddleware
|
|
11
|
+
define_parser do |body|
|
|
12
|
+
unless body.strip.empty?
|
|
13
|
+
# MaxMind returns the response encoded with ISO-8859-1, so we normalize
|
|
14
|
+
# it to UTF-8.
|
|
15
|
+
# http://dev.maxmind.com/minfraud/#Output
|
|
16
|
+
body = body.force_encoding("ISO-8859-1").encode("UTF-8").split(';')
|
|
17
|
+
|
|
18
|
+
body.each_with_object({}) do |line, hash|
|
|
19
|
+
key, val = line.split('=')
|
|
20
|
+
|
|
21
|
+
if key.to_s != "" && val.to_s != ""
|
|
22
|
+
hash[key.to_sym] = val
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
Faraday.register_middleware :response,
|
|
30
|
+
maxmind: ::Hamburglar::Gateways::MaxMind::Base::ResponseParser
|
|
31
|
+
|
|
32
|
+
# Submit a request upstream to generate a fraud report
|
|
33
|
+
def submit
|
|
34
|
+
if valid?
|
|
35
|
+
@response = Faraday.new(:url => self.class::API_URL, ssl: {
|
|
36
|
+
verify: true, ca_file: File.expand_path('../../../cacert.pem', __FILE__)
|
|
37
|
+
}) do |c|
|
|
38
|
+
c.request :url_encoded
|
|
39
|
+
c.response :raise_error
|
|
40
|
+
c.response :follow_redirects, :limit => 10
|
|
41
|
+
c.response :maxmind
|
|
42
|
+
c.adapter :net_http
|
|
43
|
+
end.post(self.class::API_PATH, @params).body
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
6
48
|
# The MinFraud class handles fraud verification
|
|
7
49
|
# through MaxMind's minFraud API.
|
|
8
50
|
#
|
|
9
51
|
# See: http://www.maxmind.com/app/ccv
|
|
10
52
|
class MinFraud < Base
|
|
11
|
-
|
|
12
|
-
|
|
53
|
+
API_URL = "https://minfraud2.maxmind.com"
|
|
54
|
+
API_PATH = "/app/ccv2r"
|
|
13
55
|
|
|
14
56
|
# Required parameters for a minFraud API call
|
|
15
57
|
set_required_params :i, :city, :region, :postal, :country, :license_key
|
|
@@ -25,8 +67,8 @@ module Hamburglar
|
|
|
25
67
|
#
|
|
26
68
|
# See: http://www.maxmind.com/app/telephone_api
|
|
27
69
|
class TelephoneVerification < Base
|
|
28
|
-
|
|
29
|
-
|
|
70
|
+
API_URL = "https://www.maxmind.com"
|
|
71
|
+
API_PATH = "/app/telephone_http"
|
|
30
72
|
|
|
31
73
|
# Required parameters for a Telephone Verification API call
|
|
32
74
|
set_required_params :l, :phone
|
|
@@ -36,7 +78,6 @@ module Hamburglar
|
|
|
36
78
|
self.params[:l] = self.params.delete(:license_key) if self.params[:license_key]
|
|
37
79
|
end
|
|
38
80
|
end
|
|
39
|
-
|
|
40
81
|
end
|
|
41
82
|
end
|
|
42
83
|
end
|
data/lib/hamburglar/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hamburglar
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.1.4
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Joshua Priddle
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
11
|
+
date: 2013-07-31 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: faraday
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
17
|
- - ~>
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
@@ -22,7 +20,6 @@ dependencies:
|
|
|
22
20
|
type: :runtime
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
24
|
- - ~>
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
@@ -30,7 +27,6 @@ dependencies:
|
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: faraday_middleware
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
31
|
- - ~>
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
@@ -38,7 +34,6 @@ dependencies:
|
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
38
|
- - ~>
|
|
44
39
|
- !ruby/object:Gem::Version
|
|
@@ -46,7 +41,6 @@ dependencies:
|
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
|
47
42
|
name: rspec
|
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
44
|
requirements:
|
|
51
45
|
- - ~>
|
|
52
46
|
- !ruby/object:Gem::Version
|
|
@@ -54,7 +48,6 @@ dependencies:
|
|
|
54
48
|
type: :development
|
|
55
49
|
prerelease: false
|
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
51
|
requirements:
|
|
59
52
|
- - ~>
|
|
60
53
|
- !ruby/object:Gem::Version
|
|
@@ -62,7 +55,6 @@ dependencies:
|
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
|
63
56
|
name: rake
|
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
58
|
requirements:
|
|
67
59
|
- - ~>
|
|
68
60
|
- !ruby/object:Gem::Version
|
|
@@ -70,7 +62,6 @@ dependencies:
|
|
|
70
62
|
type: :development
|
|
71
63
|
prerelease: false
|
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
65
|
requirements:
|
|
75
66
|
- - ~>
|
|
76
67
|
- !ruby/object:Gem::Version
|
|
@@ -78,7 +69,6 @@ dependencies:
|
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
|
79
70
|
name: fakeweb
|
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
72
|
requirements:
|
|
83
73
|
- - ~>
|
|
84
74
|
- !ruby/object:Gem::Version
|
|
@@ -86,7 +76,6 @@ dependencies:
|
|
|
86
76
|
type: :development
|
|
87
77
|
prerelease: false
|
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
79
|
requirements:
|
|
91
80
|
- - ~>
|
|
92
81
|
- !ruby/object:Gem::Version
|
|
@@ -94,7 +83,6 @@ dependencies:
|
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
|
95
84
|
name: vcr
|
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
|
97
|
-
none: false
|
|
98
86
|
requirements:
|
|
99
87
|
- - ~>
|
|
100
88
|
- !ruby/object:Gem::Version
|
|
@@ -102,7 +90,6 @@ dependencies:
|
|
|
102
90
|
type: :development
|
|
103
91
|
prerelease: false
|
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
-
none: false
|
|
106
93
|
requirements:
|
|
107
94
|
- - ~>
|
|
108
95
|
- !ruby/object:Gem::Version
|
|
@@ -117,37 +104,38 @@ files:
|
|
|
117
104
|
- Rakefile
|
|
118
105
|
- README.markdown
|
|
119
106
|
- lib/cacert.pem
|
|
120
|
-
- lib/hamburglar/
|
|
121
|
-
- lib/hamburglar/errors.rb
|
|
107
|
+
- lib/hamburglar/gateways.rb
|
|
122
108
|
- lib/hamburglar/gateways/base.rb
|
|
123
109
|
- lib/hamburglar/gateways/max_mind.rb
|
|
124
|
-
- lib/hamburglar/
|
|
110
|
+
- lib/hamburglar/errors.rb
|
|
125
111
|
- lib/hamburglar/report.rb
|
|
112
|
+
- lib/hamburglar/config.rb
|
|
126
113
|
- lib/hamburglar/version.rb
|
|
127
114
|
- lib/hamburglar.rb
|
|
128
115
|
homepage: https://github.com/site5/hamburglar
|
|
129
|
-
licenses:
|
|
116
|
+
licenses:
|
|
117
|
+
- MIT
|
|
118
|
+
metadata: {}
|
|
130
119
|
post_install_message:
|
|
131
120
|
rdoc_options:
|
|
132
121
|
- --charset=UTF-8
|
|
133
122
|
require_paths:
|
|
134
123
|
- lib
|
|
135
124
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
|
-
none: false
|
|
137
125
|
requirements:
|
|
138
|
-
- -
|
|
126
|
+
- - '>='
|
|
139
127
|
- !ruby/object:Gem::Version
|
|
140
128
|
version: '0'
|
|
141
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
|
-
none: false
|
|
143
130
|
requirements:
|
|
144
|
-
- -
|
|
131
|
+
- - '>='
|
|
145
132
|
- !ruby/object:Gem::Version
|
|
146
133
|
version: '0'
|
|
147
134
|
requirements: []
|
|
148
135
|
rubyforge_project:
|
|
149
|
-
rubygems_version:
|
|
136
|
+
rubygems_version: 2.0.2
|
|
150
137
|
signing_key:
|
|
151
|
-
specification_version:
|
|
138
|
+
specification_version: 4
|
|
152
139
|
summary: Hamburglar helps you prevent fraudulent orders
|
|
153
140
|
test_files: []
|
|
141
|
+
has_rdoc:
|