rdap 0.1.0 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -2
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +13 -1
  5. data/README.md +7 -2
  6. data/lib/rdap.rb +24 -7
  7. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a812f4f58d5435ffd4a7b6d85d0373b1d7eb7914fb87854f48f2142009ff0f3f
4
- data.tar.gz: f039922723968ba123c0697e5254e07220bce7a85015f2783bcaca17f2c87e37
3
+ metadata.gz: e381820dc8920d506d751cf7c1d562dd4f7bcaac07aeec9c735bad6777a41019
4
+ data.tar.gz: 2a5c7562f80f162d88b24a999e67e9ae3cba5b677ff84aab48adfc5ae1c3df7d
5
5
  SHA512:
6
- metadata.gz: d3fdb2df158c5a13d0a479fba0760e766c12f707cb82bb4214f7e9e95629d84700ab788d7b2591233367862b3f79e2f8eb34fa44a13fb8bfecdecde83f6d164b
7
- data.tar.gz: 3a2219bfb23a0fa4e3a3204db935024b6a2ec2f733f57e5541fec37b3e917c41cd54231f418d91f5bf30e12bbccd4ac2f5b68a5d8ac001ba12d07e03e3ae3c32
6
+ metadata.gz: ff41ec54dd637813e4120feeb21048b179d617554da50e02db122da69a37aa066bb44eae785e1840d01b9afb19bd08182c3b8dd364e2b433ad4d89a5b1403968
7
+ data.tar.gz: 59d8e5dc3ba89b4f22025081710658b248ea062357451fd4952468cb06aba605a2123f3ce8deb0d1fea91d5690a60f4fe9f28812c4b2acaaef1ffa9289b32774
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
1
  ---
2
2
  language: ruby
3
3
  cache: bundler
4
+ # Ubuntu 18.04
5
+ dist: bionic
6
+ # https://docs.travis-ci.com/user/reference/bionic/#ruby-support
4
7
  rvm:
5
- - 2.5.7
6
8
  - 2.6.5
7
- - 2.7.5
9
+ - 2.7.0
8
10
  - 3.0.3
9
11
  before_install: gem install bundler -v 2.1.4
data/Gemfile CHANGED
@@ -6,3 +6,4 @@ gemspec
6
6
  gem "rake", ">= 12.0"
7
7
  gem "rspec", "~> 3.0"
8
8
  gem "vcr", "~> 6.0"
9
+ gem "webmock"
data/Gemfile.lock CHANGED
@@ -1,13 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rdap (0.1.0)
4
+ rdap (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ addressable (2.8.0)
10
+ public_suffix (>= 2.0.2, < 5.0)
11
+ crack (0.4.5)
12
+ rexml
9
13
  diff-lcs (1.4.4)
14
+ hashdiff (1.0.1)
15
+ public_suffix (4.0.6)
10
16
  rake (13.0.6)
17
+ rexml (3.2.5)
11
18
  rspec (3.10.0)
12
19
  rspec-core (~> 3.10.0)
13
20
  rspec-expectations (~> 3.10.0)
@@ -22,6 +29,10 @@ GEM
22
29
  rspec-support (~> 3.10.0)
23
30
  rspec-support (3.10.3)
24
31
  vcr (6.0.0)
32
+ webmock (3.14.0)
33
+ addressable (>= 2.8.0)
34
+ crack (>= 0.3.2)
35
+ hashdiff (>= 0.4.0, < 2.0.0)
25
36
 
26
37
  PLATFORMS
27
38
  ruby
@@ -31,6 +42,7 @@ DEPENDENCIES
31
42
  rdap!
32
43
  rspec (~> 3.0)
33
44
  vcr (~> 6.0)
45
+ webmock
34
46
 
35
47
  BUNDLED WITH
36
48
  2.1.4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RDAP
1
+ # RDAP [![Build Status](https://app.travis-ci.com/jarthod/rdap.svg?branch=master)](https://app.travis-ci.com/github/jarthod/rdap)
2
2
 
3
3
  A minimal Ruby client to query RDAP APIs though a bootstrap server.
4
4
  No dependencies, no caching or bootstrap file (the query is routed through a bootstrap server first).
@@ -63,6 +63,7 @@ RDAP.query("16276", type: :autnum)
63
63
  RDAP.domain("google.com", server: "https://rdap-bootstrap.arin.net/bootstrap") # Specify an alternative bootstrap server
64
64
  RDAP.domain("google.com", server: "https://rdap.verisign.com/com/v1") # Or directly the target RDAP server if you know it
65
65
  RDAP.domain("google.com", timeout: 20) # Customize open and read timeouts (default = 5 sec each)
66
+ RDAP.domain("google.com", headers: {'User-Agent' => 'My application name'}) # Override some HTTP request headers. Default headers are in RDAP::HEADERS
66
67
 
67
68
  # Error handling
68
69
  RDAP.domain("test.fr") # TLD not supported yet
@@ -83,7 +84,11 @@ The gem make a query to one of the publicly available RDAP bootstrap server (the
83
84
 
84
85
  ## Changelog
85
86
 
86
- **0.1.0** (2021-12-17) - Initial version
87
+ - **0.1.4** (2022-02-01) - Wrap JSON parser errors as RDAP::InvalidReponse and also raise RDAP::EmptyResponse when body is missing
88
+ - **0.1.3** (2022-01-10) - Wrap SSL errors as RDAP::SSLError < ServerError < Error
89
+ - **0.1.2** (2022-01-07) - Added HTTP headers customization
90
+ - **0.1.1** (2021-12-19) - Added TooManyRequests expection in case of 429
91
+ - **0.1.0** (2021-12-17) - Initial version
87
92
 
88
93
  ## Contributing
89
94
 
data/lib/rdap.rb CHANGED
@@ -2,13 +2,21 @@ require 'json'
2
2
  require 'net/http'
3
3
 
4
4
  module RDAP
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.4"
6
6
  BOOTSTRAP = "https://rdap.org/"
7
- TYPES = [:domain, :ip, :autnum]
7
+ TYPES = [:domain, :ip, :autnum].freeze
8
+ HEADERS = {
9
+ "User-Agent" => "RDAP ruby gem (#{VERSION})",
10
+ "Accept" => "application/rdap+json"
11
+ }
8
12
 
9
13
  class Error < StandardError; end
10
14
  class ServerError < Error; end
15
+ class SSLError < ServerError; end
16
+ class EmptyResponse < ServerError; end
17
+ class InvalidResponse < ServerError; end
11
18
  class NotFound < Error; end
19
+ class TooManyRequests < Error; end
12
20
 
13
21
  def self.domain name, **opts
14
22
  query name, type: :domain, **opts
@@ -22,15 +30,15 @@ module RDAP
22
30
  query name, type: :autnum, **opts
23
31
  end
24
32
 
25
- def self.query name, type:, timeout: 5, server: BOOTSTRAP
33
+ def self.query name, type:, timeout: 5, server: BOOTSTRAP, headers: {}
26
34
  TYPES.include?(type) or raise ArgumentError.new("RDAP: Invalid query type: #{type}, supported types: #{TYPES}")
27
35
  uri = URI("#{server.chomp('/')}/#{type}/#{name}")
28
- get_follow_redirects(uri, timeout: timeout)
36
+ get_follow_redirects(uri, timeout: timeout, headers: headers)
29
37
  end
30
38
 
31
39
  private
32
40
 
33
- def self.get_follow_redirects uri, timeout: 5, redirection_limit: 5
41
+ def self.get_follow_redirects uri, timeout: 5, headers: {}, redirection_limit: 5
34
42
  raise ServerError.new("Too many redirections (> #{redirection_limit}) at #{uri}") if redirection_limit == 0
35
43
 
36
44
  http = Net::HTTP.new(uri.host, uri.port)
@@ -39,9 +47,12 @@ module RDAP
39
47
  http.use_ssl = true
40
48
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
41
49
 
42
- response = http.get(uri.path, "Accept" => "application/rdap+json")
50
+ response = http.get(uri.path, HEADERS.merge(headers))
43
51
  case response
44
52
  when Net::HTTPSuccess
53
+ if !response.body
54
+ raise EmptyResponse.new("[#{response.code}] #{response.message}")
55
+ end
45
56
  document = JSON.parse(response.body)
46
57
  if document["errorCode"]
47
58
  raise ServerError.new("[#{document["errorCode"]}] #{document["title"]} (#{uri})")
@@ -54,10 +65,16 @@ module RDAP
54
65
  else
55
66
  raise NotFound.new("[#{response.code}] #{response.message}")
56
67
  end
68
+ when Net::HTTPTooManyRequests
69
+ raise TooManyRequests.new("[#{response.code}] #{response.message}")
57
70
  when Net::HTTPRedirection
58
- get_follow_redirects(URI(response["location"]), timeout: timeout, redirection_limit: redirection_limit - 1)
71
+ get_follow_redirects(URI(response["location"]), timeout: timeout, headers: headers, redirection_limit: redirection_limit - 1)
59
72
  else
60
73
  raise ServerError.new("[#{response.code}] #{response.message}")
61
74
  end
75
+ rescue OpenSSL::SSL::SSLError => e
76
+ raise SSLError.new("#{e.message} (#{uri.host})")
77
+ rescue JSON::ParserError => e
78
+ raise InvalidResponse.new("JSON parser error: #{e.message}")
62
79
  end
63
80
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrien Rey-Jarthon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-17 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -44,7 +44,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
46
  requirements: []
47
- rubygems_version: 3.1.2
47
+ rubygems_version: 3.3.0
48
48
  signing_key:
49
49
  specification_version: 4
50
50
  summary: A minimal Ruby client to query RDAP APIs though a bootstrap server