whoisxmlapi 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NTRhNzY0ZjZkNTliYzBmNzJlYzM3NjE5N2YxODE1N2VmZWE2Y2QzZA==
5
- data.tar.gz: !binary |-
6
- NmQxYWY5OTg0NzFjMDcwNmY2NGJhYWJlOWNhZDFiNzU2MTBlNzQ5Nw==
2
+ SHA256:
3
+ metadata.gz: 2ee7bacb19ead9fff1009409330c4b224e496f0c40311d2a00b4fed487b9fe51
4
+ data.tar.gz: 0b5df1d17fb4995116bd156fc6c06687515dc902034e8d41e002cdd6c66cd016
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- M2U5YzM1NWIzZjI1MWFhOWVkNTZjZGIzMDM0MTgxMTAyMWI3YzM4NjljNjA0
10
- NjJjNWEyM2JlZThiMjEyNTkxYzQyNzJlYzVkYmJjNmE2MTBlYzQxM2JlNGM0
11
- Zjg5YWI3ZmY0M2U3NDY3NDAyYmYwOTVmZTIwOGVlZjAxOWRhYmI=
12
- data.tar.gz: !binary |-
13
- OWJmN2FiYzVlNWM0ODI2ODlmMWYwNzJlMGM2NGJhZTNjZjQ0YTk1NTRiMzFk
14
- NGM0ZDNiZjMyYTE2N2UwMzMxNTk0MDI0M2JjNGQ5ZDIxNzkyMzM4YmJjYjQx
15
- MmEyNGJkMDMyNTU2NjhmMGRiNmMyZjNjMTE1MjEzNDA2ZTJhMmE=
6
+ metadata.gz: 7bf58edcfa9453db455c1ad5ff1a5a82efddf33bd195bbdd5421f65503944198222f6289590e655a17db98e0dbfabff72581738f7e65c51ec23d9238d2c7088f
7
+ data.tar.gz: fbcf7db8ecee37bce1f36a9f2ae0f4c1293f6bf5b97dd86cf0ecbf748f83f2aff9909bc15aef8f7f06df7fdf0d8368f73568e0b24d12f69b1299ab891fd049fb
data/lib/whoisxmlapi.rb CHANGED
@@ -32,6 +32,14 @@ module WhoisXMLAPI
32
32
  def self.password=(pass)
33
33
  @password = pass
34
34
  end
35
+
36
+ def self.api_key
37
+ @api_key
38
+ end
39
+
40
+ def self.api_key=(key)
41
+ @api_key = key
42
+ end
35
43
 
36
44
  def self.cache_length=(leng)
37
45
  @cache_length = leng
@@ -4,7 +4,9 @@ require 'json'
4
4
  require 'public_suffix'
5
5
 
6
6
  module WhoisXMLAPI
7
+
7
8
  class Client
9
+
8
10
  def whois(domain)
9
11
  unless PublicSuffix.valid?(domain)
10
12
  res = WhoisXMLAPI::BadDomain.new
@@ -24,15 +26,15 @@ module WhoisXMLAPI
24
26
  return res
25
27
  else
26
28
  xquery = {
29
+ :apiKey => WhoisXMLAPI.api_key,
27
30
  :domainName => domain,
28
- :outputFormat => 'json', # TODO: make into a config setting. see the JSON.parse line below for the rest of this change
29
- :userName => WhoisXMLAPI.username,
30
- :password => WhoisXMLAPI.password
31
+ :outputFormat => 'JSON'
31
32
  }
33
+
32
34
  begin
33
35
  r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery, :timeout => 120)
34
36
  rescue Exception => e
35
- WhoisXMLAPI.logger.info("Error getting Whois info: #{e}")
37
+ WhoisXMLAPI.logger.info("Error getting Whois info for #{domain}: #{e}")
36
38
  res = WhoisXMLAPI::Unavailable.new
37
39
  res.parse(domain)
38
40
  return res
@@ -46,8 +48,15 @@ module WhoisXMLAPI
46
48
  end
47
49
  end
48
50
 
49
- # TODO: with the above outputFormat change, use a Parser plugin instead of this
50
- presponse = JSON.parse(r.parsed_response)
51
+ # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
52
+ # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
53
+ # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
54
+ if r.parsed_response.is_a?(String)
55
+ WhoisXMLAPI.logger.debug "WhoisXML Whois method passed back parsed_response as a String instead of a Hash for #{domain}."
56
+ presponse = JSON.parse(r.parsed_response)
57
+ else
58
+ presponse = r.parsed_response
59
+ end
51
60
 
52
61
  if (200..299).include? r.code.to_i and not presponse.key? 'ErrorMessage'
53
62
  res.parse(presponse['WhoisRecord'])
@@ -62,7 +71,9 @@ module WhoisXMLAPI
62
71
  end
63
72
  end
64
73
 
74
+
65
75
  def rwhois(entity_name)
76
+ # entity_name is really the domain being passed in for Rwhois not the actual entity name
66
77
  return nil if entity_name.nil?
67
78
  query = WhoisXMLAPI::RWhoisResult.where(:entity_name => entity_name)
68
79
  if WhoisXMLAPI.cache
@@ -71,23 +82,28 @@ module WhoisXMLAPI
71
82
  res = query.first
72
83
 
73
84
  if res
74
- Rails.logger.debug "WhoisXMLAPI rwhois - have cached rwhois data for #{entity_name}"
85
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - using cached rwhois data for #{entity_name}"
75
86
  else
76
- Rails.logger.debug "WhoisXMLAPI rwhois - no cached rwhois data for #{entity_name}"
87
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - no cached rwhois data for #{entity_name}"
77
88
  res = WhoisXMLAPI::RWhoisResult.create(:entity_name => entity_name)
78
- rquery = {
79
- :term1 => entity_name,
80
- :search_type => 'current',
81
- :mode => WhoisXMLAPI.rwhois_mode,
82
- :username => WhoisXMLAPI.username,
83
- :password => WhoisXMLAPI.password
89
+
90
+ params_basic = {
91
+ basicSearchTerms: {
92
+ :include => [entity_name], # must be an array of strings!
93
+ :search_type => "current"
94
+ },
95
+ :mode => WhoisXMLAPI.rwhois_mode,
96
+ :apiKey => WhoisXMLAPI.api_key,
84
97
  }
85
- r = HTTParty.get("#{WhoisXMLAPI.domain}/reverse-whois-api/search.php", :query => rquery, :timeout => 120)
98
+
99
+ r = create_and_send_rwhois_request(params_basic)
100
+
86
101
  if WhoisXMLAPI.callbacks[:rwhois]
87
102
  WhoisXMLAPI.callbacks[:rwhois].each do |cb|
88
103
  cb.call
89
104
  end
90
105
  end
106
+
91
107
  if r && r.parsed_response && r.parsed_response['domains']
92
108
  res.domains = r.parsed_response['domains']
93
109
  res.save
@@ -96,19 +112,24 @@ module WhoisXMLAPI
96
112
  domain_sld = domain.sld
97
113
  Rails.logger.debug "WhoisXMLAPI rwhois - no domains found for domain #{entity_name}, trying #{domain_sld}"
98
114
  res = WhoisXMLAPI::RWhoisResult.create(:entity_name => domain_sld)
99
- rquery = {
100
- :term1 => domain_sld,
101
- :search_type => 'current',
115
+
116
+ params_basic = {
117
+ basicSearchTerms: {
118
+ :include => [domain_sld], #must be an array of strings!
119
+ :search_type => "current"
120
+ },
102
121
  :mode => WhoisXMLAPI.rwhois_mode,
103
- :username => WhoisXMLAPI.username,
104
- :password => WhoisXMLAPI.password
122
+ :apiKey => WhoisXMLAPI.api_key,
105
123
  }
106
- r = HTTParty.get("#{WhoisXMLAPI.domain}/reverse-whois-api/search.php", :query => rquery, :timeout => 120)
124
+
125
+ r = create_and_send_rwhois_request(params_basic)
126
+
107
127
  if WhoisXMLAPI.callbacks[:rwhois]
108
128
  WhoisXMLAPI.callbacks[:rwhois].each do |cb|
109
129
  cb.call
110
130
  end
111
131
  end
132
+
112
133
  if r && r.parsed_response && r.parsed_response['domains']
113
134
  res.domains = r.parsed_response['domains']
114
135
  res.save
@@ -117,37 +138,79 @@ module WhoisXMLAPI
117
138
  res.save
118
139
  end
119
140
  else
120
- Rails.logger.debug "WhoisXMLAPI rwhois - no domains found for #{entity_name}!"
141
+ WhoisXMLAPI.logger.debug "WhoisXMLAPI rwhois - no domains found for #{entity_name}!"
121
142
  res.domains = []
122
143
  res.save
123
144
  end
124
145
  end
125
146
  res
126
147
  end
127
-
148
+
149
+
128
150
  def exists?(domain)
129
151
  xquery = {
130
152
  :cmd => 'GET_DN_AVAILABILITY',
131
153
  :domainName => domain,
132
- :outputFormat => 'json',
133
- :userName => WhoisXMLAPI.username,
134
- :password => WhoisXMLAPI.password
154
+ :outputFormat => 'JSON',
155
+ :apiKey => WhoisXMLAPI.api_key
135
156
  }
136
157
  r = HTTParty.get("#{WhoisXMLAPI.domain}/whoisserver/WhoisService", :query => xquery, :timeout => 120)
137
158
 
138
- resp = JSON.parse(r.parsed_response)
159
+ # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
160
+ # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
161
+ # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
162
+ if r.parsed_response.is_a?(String)
163
+ Rails.logger.debug "WhoisXML passed back parsed_response as a String instead of a Hash for #{domain}. Exists? method"
164
+ resp = JSON.parse(r.parsed_response)
165
+ else
166
+ resp = r.parsed_response
167
+ end
168
+
139
169
  resp["DomainInfo"]["domainAvailability"] == "UNAVAILABLE"
140
170
  end
141
171
 
172
+
142
173
  def account_balance
143
174
  aquery = {
144
175
  :servicetype => 'accountbalance',
145
176
  :output_format => 'JSON',
146
- :username => WhoisXMLAPI.username,
147
- :password => WhoisXMLAPI.password
177
+ :apiKey => WhoisXMLAPI.api_key
148
178
  }
149
179
  r = HTTParty.get("#{WhoisXMLAPI.domain}/accountServices.php", :query => aquery, :timeout => 120)
150
- JSON.parse(r.parsed_response)
180
+
181
+ # WhoisXML and HTTParty are sometimes returning a Hash and not a JSON string as requested,
182
+ # which is causing an error of "no implicit conversion of Hash into String" when we call JSON.parse.
183
+ # Logger message is to monitor whether WhoisXML and/or HTTParty will still return a string on occasion.
184
+ if r.parsed_response.is_a?(String)
185
+ Rails.logger.debug "WhoisXML passed back parsed_response as a String instead of a Hash. Account_balance method"
186
+ JSON.parse(r.parsed_response)
187
+ else
188
+ r.parsed_response
189
+ end
190
+
191
+ end
192
+
193
+
194
+ ####################################################################################################
195
+ private
196
+ ####################################################################################################
197
+
198
+
199
+ def self.create_and_send_rwhois_request(params_basic)
200
+ uri = URI.parse('https://reverse-whois-api.whoisxmlapi.com/api/v2')
201
+ http = Net::HTTP.new(uri.host, uri.port)
202
+ http.use_ssl = true
203
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
204
+ request = Net::HTTP::Post.new(uri.request_uri)
205
+ request.add_field('Content-Type', 'application/json')
206
+ request.add_field('Accept', 'application/json')
207
+ request.body = params_basic.to_json
208
+ r = http.request(request)
209
+ # used for debugging
210
+ # puts JSON.parse(r.body).to_yaml
211
+ return r
151
212
  end
152
- end
153
- end
213
+
214
+ end # of class Client
215
+
216
+ end # of module WhoisXMLAPI
@@ -1,3 +1,3 @@
1
1
  module WhoisXMLAPI
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
data/whoisxmlapi.gemspec CHANGED
@@ -6,8 +6,8 @@ require 'whoisxmlapi/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "whoisxmlapi"
8
8
  spec.version = WhoisXMLAPI::VERSION
9
- spec.authors = ["Christopher Maujean", "David Hillard"]
10
- spec.email = ["dhillard@brandle.net"]
9
+ spec.authors = ["Christopher Maujean", "David Hillard", "Matt Appel", "Chip Roberson"]
10
+ spec.email = ["cmaujean@brandle.net", "dhillard@brandle.net", "mappel@brandle.net", "chip@brandle.net"]
11
11
  spec.description = %q{Gem for accessing the Whois XML API via JSON, with caching}
12
12
  spec.summary = %q{whoisxmlapi.com access}
13
13
  spec.homepage = "http://brandle.net/"
metadata CHANGED
@@ -1,108 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoisxmlapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Maujean
8
8
  - David Hillard
9
+ - Matt Appel
10
+ - Chip Roberson
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
- date: 2017-10-27 00:00:00.000000000 Z
14
+ date: 2018-11-22 00:00:00.000000000 Z
13
15
  dependencies:
14
16
  - !ruby/object:Gem::Dependency
15
17
  name: activesupport
16
18
  requirement: !ruby/object:Gem::Requirement
17
19
  requirements:
18
- - - ~>
20
+ - - "~>"
19
21
  - !ruby/object:Gem::Version
20
22
  version: '3.2'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
24
26
  requirements:
25
- - - ~>
27
+ - - "~>"
26
28
  - !ruby/object:Gem::Version
27
29
  version: '3.2'
28
30
  - !ruby/object:Gem::Dependency
29
31
  name: mongoid
30
32
  requirement: !ruby/object:Gem::Requirement
31
33
  requirements:
32
- - - ! '>='
34
+ - - ">="
33
35
  - !ruby/object:Gem::Version
34
36
  version: '0'
35
37
  type: :runtime
36
38
  prerelease: false
37
39
  version_requirements: !ruby/object:Gem::Requirement
38
40
  requirements:
39
- - - ! '>='
41
+ - - ">="
40
42
  - !ruby/object:Gem::Version
41
43
  version: '0'
42
44
  - !ruby/object:Gem::Dependency
43
45
  name: httparty
44
46
  requirement: !ruby/object:Gem::Requirement
45
47
  requirements:
46
- - - ! '>='
48
+ - - ">="
47
49
  - !ruby/object:Gem::Version
48
50
  version: '0'
49
51
  type: :runtime
50
52
  prerelease: false
51
53
  version_requirements: !ruby/object:Gem::Requirement
52
54
  requirements:
53
- - - ! '>='
55
+ - - ">="
54
56
  - !ruby/object:Gem::Version
55
57
  version: '0'
56
58
  - !ruby/object:Gem::Dependency
57
59
  name: public_suffix
58
60
  requirement: !ruby/object:Gem::Requirement
59
61
  requirements:
60
- - - ~>
62
+ - - "~>"
61
63
  - !ruby/object:Gem::Version
62
64
  version: 1.4.6
63
65
  type: :runtime
64
66
  prerelease: false
65
67
  version_requirements: !ruby/object:Gem::Requirement
66
68
  requirements:
67
- - - ~>
69
+ - - "~>"
68
70
  - !ruby/object:Gem::Version
69
71
  version: 1.4.6
70
72
  - !ruby/object:Gem::Dependency
71
73
  name: bundler
72
74
  requirement: !ruby/object:Gem::Requirement
73
75
  requirements:
74
- - - ~>
76
+ - - "~>"
75
77
  - !ruby/object:Gem::Version
76
78
  version: '1.3'
77
79
  type: :development
78
80
  prerelease: false
79
81
  version_requirements: !ruby/object:Gem::Requirement
80
82
  requirements:
81
- - - ~>
83
+ - - "~>"
82
84
  - !ruby/object:Gem::Version
83
85
  version: '1.3'
84
86
  - !ruby/object:Gem::Dependency
85
87
  name: rake
86
88
  requirement: !ruby/object:Gem::Requirement
87
89
  requirements:
88
- - - ! '>='
90
+ - - ">="
89
91
  - !ruby/object:Gem::Version
90
92
  version: '0'
91
93
  type: :development
92
94
  prerelease: false
93
95
  version_requirements: !ruby/object:Gem::Requirement
94
96
  requirements:
95
- - - ! '>='
97
+ - - ">="
96
98
  - !ruby/object:Gem::Version
97
99
  version: '0'
98
100
  description: Gem for accessing the Whois XML API via JSON, with caching
99
101
  email:
102
+ - cmaujean@brandle.net
100
103
  - dhillard@brandle.net
104
+ - mappel@brandle.net
105
+ - chip@brandle.net
101
106
  executables: []
102
107
  extensions: []
103
108
  extra_rdoc_files: []
104
109
  files:
105
- - .gitignore
110
+ - ".gitignore"
106
111
  - Gemfile
107
112
  - Gemfile.lock
108
113
  - LICENSE.txt
@@ -129,17 +134,17 @@ require_paths:
129
134
  - lib
130
135
  required_ruby_version: !ruby/object:Gem::Requirement
131
136
  requirements:
132
- - - ! '>='
137
+ - - ">="
133
138
  - !ruby/object:Gem::Version
134
139
  version: '0'
135
140
  required_rubygems_version: !ruby/object:Gem::Requirement
136
141
  requirements:
137
- - - ! '>='
142
+ - - ">="
138
143
  - !ruby/object:Gem::Version
139
144
  version: '0'
140
145
  requirements: []
141
146
  rubyforge_project:
142
- rubygems_version: 2.4.8
147
+ rubygems_version: 2.7.7
143
148
  signing_key:
144
149
  specification_version: 4
145
150
  summary: whoisxmlapi.com access