whois 3.1.3 → 3.2.0
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.
- data/CHANGELOG.md +26 -2
- data/data/tld.json +8 -2
- data/lib/whois/record/parser/base.rb +1 -1
- data/lib/whois/record/parser/base_afilias.rb +3 -11
- data/lib/whois/record/parser/base_cocca2.rb +4 -3
- data/lib/whois/record/parser/base_icb.rb +95 -0
- data/lib/whois/record/parser/base_shared1.rb +4 -11
- data/lib/whois/record/parser/base_shared2.rb +4 -11
- data/lib/whois/record/parser/base_shared3.rb +5 -12
- data/lib/whois/record/parser/base_whoisd.rb +4 -13
- data/lib/whois/record/parser/jobswhois.verisign-grs.com.rb +8 -11
- data/lib/whois/record/parser/whois.ati.tn.rb +6 -15
- data/lib/whois/record/parser/whois.audns.net.au.rb +4 -12
- data/lib/whois/record/parser/whois.cctld.by.rb +4 -11
- data/lib/whois/record/parser/whois.centralnic.com.rb +4 -12
- data/lib/whois/record/parser/whois.cira.ca.rb +15 -20
- data/lib/whois/record/parser/whois.cnnic.cn.rb +3 -11
- data/lib/whois/record/parser/whois.crsnic.net.rb +5 -12
- data/lib/whois/record/parser/whois.denic.de.rb +4 -11
- data/lib/whois/record/parser/whois.dns.hr.rb +4 -12
- data/lib/whois/record/parser/whois.dns.pl.rb +12 -1
- data/lib/whois/record/parser/whois.domainregistry.ie.rb +4 -11
- data/lib/whois/record/parser/whois.fi.rb +54 -20
- data/lib/whois/record/parser/whois.iana.org.rb +4 -11
- data/lib/whois/record/parser/whois.jprs.jp.rb +7 -0
- data/lib/whois/record/parser/whois.nc.rb +5 -13
- data/lib/whois/record/parser/whois.nic.ac.rb +5 -53
- data/lib/whois/record/parser/whois.nic.cc.rb +4 -11
- data/lib/whois/record/parser/whois.nic.hu.rb +4 -11
- data/lib/whois/record/parser/whois.nic.io.rb +5 -53
- data/lib/whois/record/parser/whois.nic.it.rb +3 -10
- data/lib/whois/record/parser/whois.nic.sh.rb +5 -53
- data/lib/whois/record/parser/whois.nic.tv.rb +4 -11
- data/lib/whois/record/parser/whois.norid.no.rb +7 -9
- data/lib/whois/record/parser/whois.registry.net.za.rb +6 -7
- data/lib/whois/record/parser/whois.rnids.rs.rb +4 -12
- data/lib/whois/record/parser/whois.smallregistry.net.rb +4 -11
- data/lib/whois/record/parser/whois.srs.net.nz.rb +64 -22
- data/lib/whois/record/parser/whois.sx.rb +5 -13
- data/lib/whois/record/parser/whois1.nic.bi.rb +2 -2
- data/lib/whois/record/scanners/{nodable.rb → scannable.rb} +15 -7
- data/lib/whois/record/scanners/whois.centralnic.com.rb +0 -2
- data/lib/whois/record/scanners/whois.fi.rb +44 -0
- data/lib/whois/record/scanners/whois.srs.net.nz.rb +35 -0
- data/lib/whois/server/adapters/arin.rb +2 -3
- data/lib/whois/version.rb +2 -2
- data/whois.gemspec +5 -5
- metadata +19 -6
- checksums.yaml +0 -15
|
@@ -23,7 +23,10 @@ module Whois
|
|
|
23
23
|
# @author Aliaksei Kliuchnikau <aliaksei.kliuchnikau@gmail.com>
|
|
24
24
|
# @since 2.5.0
|
|
25
25
|
class WhoisCctldBy < Base
|
|
26
|
-
include Scanners::
|
|
26
|
+
include Scanners::Scannable
|
|
27
|
+
|
|
28
|
+
self.scanner = Scanners::WhoisCctldBy
|
|
29
|
+
|
|
27
30
|
|
|
28
31
|
property_not_supported :disclaimer
|
|
29
32
|
|
|
@@ -88,16 +91,6 @@ module Whois
|
|
|
88
91
|
end
|
|
89
92
|
end
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
# Initializes a new {Scanners::WhoisCctldBy} instance
|
|
93
|
-
# passing the {#content_for_scanner}
|
|
94
|
-
# and calls +parse+ on it.
|
|
95
|
-
#
|
|
96
|
-
# @return [Hash]
|
|
97
|
-
def parse
|
|
98
|
-
Scanners::WhoisCctldBy.new(content_for_scanner).parse
|
|
99
|
-
end
|
|
100
|
-
|
|
101
94
|
end
|
|
102
95
|
end
|
|
103
96
|
end
|
|
@@ -17,7 +17,9 @@ module Whois
|
|
|
17
17
|
|
|
18
18
|
# Parser for the whois.centralnic.net server.
|
|
19
19
|
class WhoisCentralnicCom < Base
|
|
20
|
-
include Scanners::
|
|
20
|
+
include Scanners::Scannable
|
|
21
|
+
|
|
22
|
+
self.scanner = Scanners::WhoisCentralnicCom
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
property_supported :disclaimer do
|
|
@@ -91,17 +93,7 @@ module Whois
|
|
|
91
93
|
end
|
|
92
94
|
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
# passing the {#content_for_scanner}
|
|
96
|
-
# and calls +parse+ on it.
|
|
97
|
-
#
|
|
98
|
-
# @return [Hash]
|
|
99
|
-
def parse
|
|
100
|
-
Scanners::WhoisCentralnicCom.new(content_for_scanner).parse
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
private
|
|
96
|
+
private
|
|
105
97
|
|
|
106
98
|
def build_contact(element, type)
|
|
107
99
|
node("#{element} ID") do
|
|
@@ -20,9 +20,11 @@ module Whois
|
|
|
20
20
|
# @see Whois::Record::Parser::Example
|
|
21
21
|
# The Example parser for the list of all available methods.
|
|
22
22
|
#
|
|
23
|
-
# @since 2.5.0
|
|
24
23
|
class WhoisCiraCa < Base
|
|
25
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisCiraCa
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
property_supported :disclaimer do
|
|
28
30
|
node("field:disclaimer")
|
|
@@ -129,19 +131,22 @@ module Whois
|
|
|
129
131
|
end
|
|
130
132
|
|
|
131
133
|
|
|
132
|
-
# Attempts to detect and returns the
|
|
133
|
-
# schema version.
|
|
134
|
+
# Attempts to detect and returns the version.
|
|
134
135
|
#
|
|
135
136
|
# TODO: This is very empiric.
|
|
136
137
|
# Use the available status in combination with the creation date label.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
138
|
+
#
|
|
139
|
+
# NEWPROPERTY
|
|
140
|
+
def version
|
|
141
|
+
cached_properties_fetch :version do
|
|
142
|
+
version = if content_for_scanner =~ /^% \(c\) (.+?) Canadian Internet Registration Authority/
|
|
143
|
+
case $1
|
|
144
|
+
when "2007" then "1"
|
|
145
|
+
when "2010" then "2"
|
|
146
|
+
end
|
|
142
147
|
end
|
|
148
|
+
version || Whois.bug!(ParserError, "Unable to detect version.")
|
|
143
149
|
end
|
|
144
|
-
@schema || Whois.bug!(ParserError, "Unable to detect schema version.")
|
|
145
150
|
end
|
|
146
151
|
|
|
147
152
|
# NEWPROPERTY
|
|
@@ -159,16 +164,6 @@ module Whois
|
|
|
159
164
|
end
|
|
160
165
|
|
|
161
166
|
|
|
162
|
-
# Initializes a new {Scanners::WhoisCiraCa} instance
|
|
163
|
-
# passing the {#content_for_scanner}
|
|
164
|
-
# and calls +parse+ on it.
|
|
165
|
-
#
|
|
166
|
-
# @return [Hash]
|
|
167
|
-
def parse
|
|
168
|
-
Scanners::WhoisCiraCa.new(content_for_scanner).parse
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
|
|
172
167
|
private
|
|
173
168
|
|
|
174
169
|
def build_contact(element, type)
|
|
@@ -17,7 +17,9 @@ module Whois
|
|
|
17
17
|
|
|
18
18
|
# Parser for the whois.cnnic.cn server.
|
|
19
19
|
class WhoisCnnicCn < Base
|
|
20
|
-
include Scanners::
|
|
20
|
+
include Scanners::Scannable
|
|
21
|
+
|
|
22
|
+
self.scanner = Scanners::WhoisCnnicCn
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
property_not_supported :disclaimer
|
|
@@ -88,16 +90,6 @@ module Whois
|
|
|
88
90
|
end
|
|
89
91
|
|
|
90
92
|
|
|
91
|
-
# Initializes a new {Scanners::WhoisCnnicCn} instance
|
|
92
|
-
# passing the {#content_for_scanner}
|
|
93
|
-
# and calls +parse+ on it.
|
|
94
|
-
#
|
|
95
|
-
# @return [Hash]
|
|
96
|
-
def parse
|
|
97
|
-
Scanners::WhoisCnnicCn.new(content_for_scanner).parse
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
|
|
101
93
|
private
|
|
102
94
|
|
|
103
95
|
def build_contact(element, type)
|
|
@@ -17,7 +17,10 @@ module Whois
|
|
|
17
17
|
|
|
18
18
|
# Parser for the whois.crsnic.net server.
|
|
19
19
|
class WhoisCrsnicNet < Base
|
|
20
|
-
include Scanners::
|
|
20
|
+
include Scanners::Scannable
|
|
21
|
+
|
|
22
|
+
self.scanner = Scanners::Verisign
|
|
23
|
+
|
|
21
24
|
|
|
22
25
|
property_supported :disclaimer do
|
|
23
26
|
node("Disclaimer")
|
|
@@ -94,17 +97,7 @@ module Whois
|
|
|
94
97
|
end
|
|
95
98
|
|
|
96
99
|
|
|
97
|
-
|
|
98
|
-
# passing the {#content_for_scanner}
|
|
99
|
-
# and calls +parse+ on it.
|
|
100
|
-
#
|
|
101
|
-
# @return [Hash]
|
|
102
|
-
def parse
|
|
103
|
-
Scanners::Verisign.new(content_for_scanner).parse
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
private
|
|
100
|
+
private
|
|
108
101
|
|
|
109
102
|
# In case of "SPAM Response", the response contains more than one item
|
|
110
103
|
# for the same value and the value becomes an Array.
|
|
@@ -21,7 +21,10 @@ module Whois
|
|
|
21
21
|
# @author Aaron Mueller <mail@aaron-mueller.de>
|
|
22
22
|
#
|
|
23
23
|
class WhoisDenicDe < Base
|
|
24
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisDenicDe
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
property_supported :disclaimer do
|
|
27
30
|
node("Disclaimer")
|
|
@@ -147,16 +150,6 @@ module Whois
|
|
|
147
150
|
end
|
|
148
151
|
|
|
149
152
|
|
|
150
|
-
# Initializes a new {Scanners::WhoisDenicDe} instance
|
|
151
|
-
# passing the {#content_for_scanner}
|
|
152
|
-
# and calls +parse+ on it.
|
|
153
|
-
#
|
|
154
|
-
# @return [Hash]
|
|
155
|
-
def parse
|
|
156
|
-
Scanners::WhoisDenicDe.new(content_for_scanner).parse
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
|
|
160
153
|
private
|
|
161
154
|
|
|
162
155
|
def build_contact(element, type)
|
|
@@ -20,9 +20,11 @@ module Whois
|
|
|
20
20
|
# @see Whois::Record::Parser::Example
|
|
21
21
|
# The Example parser for the list of all available methods.
|
|
22
22
|
#
|
|
23
|
-
# @since 2.4.0
|
|
24
23
|
class WhoisDnsHr < Base
|
|
25
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisDnsHr
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
property_not_supported :disclaimer
|
|
28
30
|
|
|
@@ -90,16 +92,6 @@ module Whois
|
|
|
90
92
|
|
|
91
93
|
property_not_supported :nameservers
|
|
92
94
|
|
|
93
|
-
|
|
94
|
-
# Initializes a new {Scanners::WhoisDnsHr} instance
|
|
95
|
-
# passing the {#content_for_scanner}
|
|
96
|
-
# and calls +parse+ on it.
|
|
97
|
-
#
|
|
98
|
-
# @return [Hash]
|
|
99
|
-
def parse
|
|
100
|
-
Scanners::WhoisDnsHr.new(content_for_scanner).parse
|
|
101
|
-
end
|
|
102
|
-
|
|
103
95
|
end
|
|
104
96
|
|
|
105
97
|
end
|
|
@@ -96,8 +96,19 @@ module Whois
|
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
+
# Checks whether the response has been throttled.
|
|
100
|
+
#
|
|
101
|
+
# @return [Boolean]
|
|
102
|
+
#
|
|
103
|
+
# @example
|
|
104
|
+
# Looup quota exceeded.
|
|
105
|
+
#
|
|
106
|
+
def response_throttled?
|
|
107
|
+
!!(content_for_scanner =~ /^request limit exceeded for/)
|
|
108
|
+
end
|
|
109
|
+
|
|
99
110
|
|
|
100
|
-
|
|
111
|
+
private
|
|
101
112
|
|
|
102
113
|
def build_contact(element, type)
|
|
103
114
|
match = content_for_scanner.slice(/#{element}:\n((.+\n)+)\n/, 1)
|
|
@@ -21,7 +21,10 @@ module Whois
|
|
|
21
21
|
# The Example parser for the list of all available methods.
|
|
22
22
|
#
|
|
23
23
|
class WhoisDomainregistryIe < Base
|
|
24
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisDomainregistryIe
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
property_supported :disclaimer do
|
|
27
30
|
node("field:disclaimer")
|
|
@@ -100,16 +103,6 @@ module Whois
|
|
|
100
103
|
end
|
|
101
104
|
|
|
102
105
|
|
|
103
|
-
# Initializes a new {Scanners::WhoisDomainregistryIe} instance
|
|
104
|
-
# passing the {#content_for_scanner}
|
|
105
|
-
# and calls +parse+ on it.
|
|
106
|
-
#
|
|
107
|
-
# @return [Hash]
|
|
108
|
-
def parse
|
|
109
|
-
Scanners::WhoisDomainregistryIe.new(content_for_scanner).parse
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
|
|
113
106
|
private
|
|
114
107
|
|
|
115
108
|
def build_contact(element, type)
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
require 'whois/record/parser/base'
|
|
11
|
+
require 'whois/record/scanners/whois.fi.rb'
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
module Whois
|
|
@@ -16,23 +17,34 @@ module Whois
|
|
|
16
17
|
|
|
17
18
|
# Parser for the whois.fi server.
|
|
18
19
|
#
|
|
19
|
-
# @note This parser is just a stub and provides only a few basic methods
|
|
20
|
-
# to check for domain availability and get domain status.
|
|
21
|
-
# Please consider to contribute implementing missing methods.
|
|
22
|
-
#
|
|
23
20
|
# @see Whois::Record::Parser::Example
|
|
24
21
|
# The Example parser for the list of all available methods.
|
|
25
22
|
#
|
|
26
|
-
# @since 2.4.0
|
|
27
23
|
class WhoisFi < Base
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisFi
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
property_supported :disclaimer do
|
|
30
|
+
node("field:disclaimer")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
property_supported :domain do
|
|
35
|
+
node("domain")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
property_not_supported :domain_id
|
|
39
|
+
|
|
28
40
|
|
|
29
41
|
property_supported :status do
|
|
30
|
-
if
|
|
31
|
-
case
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
if registered?
|
|
43
|
+
case node("status", &:downcase)
|
|
44
|
+
when "granted"
|
|
45
|
+
:registered
|
|
46
|
+
else
|
|
47
|
+
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
|
36
48
|
end
|
|
37
49
|
else
|
|
38
50
|
:available
|
|
@@ -40,7 +52,7 @@ module Whois
|
|
|
40
52
|
end
|
|
41
53
|
|
|
42
54
|
property_supported :available? do
|
|
43
|
-
(status
|
|
55
|
+
!!node("status:available")
|
|
44
56
|
end
|
|
45
57
|
|
|
46
58
|
property_supported :registered? do
|
|
@@ -49,23 +61,45 @@ module Whois
|
|
|
49
61
|
|
|
50
62
|
|
|
51
63
|
property_supported :created_on do
|
|
52
|
-
|
|
53
|
-
Time.parse($1)
|
|
54
|
-
end
|
|
64
|
+
node("created") { |value| Time.parse(value) }
|
|
55
65
|
end
|
|
56
66
|
|
|
57
|
-
|
|
67
|
+
property_supported :updated_on do
|
|
68
|
+
node("modified") { |value| Time.parse(value) }
|
|
69
|
+
end
|
|
58
70
|
|
|
59
71
|
property_supported :expires_on do
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
node("expires") { |value| Time.parse(value) }
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
property_not_supported :registrar
|
|
77
|
+
|
|
78
|
+
property_supported :registrant_contacts do
|
|
79
|
+
node("descr") do |array|
|
|
80
|
+
address = node("address")
|
|
81
|
+
|
|
82
|
+
Record::Contact.new(
|
|
83
|
+
type: Record::Contact::TYPE_REGISTRANT,
|
|
84
|
+
id: array[1],
|
|
85
|
+
name: address[0],
|
|
86
|
+
organization: array[0],
|
|
87
|
+
address: address[1],
|
|
88
|
+
zip: address[2],
|
|
89
|
+
city: address[3],
|
|
90
|
+
phone: node("phone")
|
|
91
|
+
)
|
|
62
92
|
end
|
|
63
93
|
end
|
|
64
94
|
|
|
95
|
+
property_not_supported :admin_contacts
|
|
96
|
+
|
|
97
|
+
property_not_supported :technical_contacts
|
|
98
|
+
|
|
65
99
|
|
|
66
100
|
property_supported :nameservers do
|
|
67
|
-
|
|
68
|
-
Record::Nameserver.new(:
|
|
101
|
+
Array.wrap(node("nserver")).map do |line|
|
|
102
|
+
Record::Nameserver.new(name: line.split(" ").first)
|
|
69
103
|
end
|
|
70
104
|
end
|
|
71
105
|
|
|
@@ -17,7 +17,10 @@ module Whois
|
|
|
17
17
|
|
|
18
18
|
# Parser for the whois.iana.org server.
|
|
19
19
|
class WhoisIanaOrg < Base
|
|
20
|
-
include Scanners::
|
|
20
|
+
include Scanners::Scannable
|
|
21
|
+
|
|
22
|
+
self.scanner = Scanners::Iana
|
|
23
|
+
|
|
21
24
|
|
|
22
25
|
property_supported :status do
|
|
23
26
|
if available?
|
|
@@ -72,16 +75,6 @@ module Whois
|
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
|
|
75
|
-
# Initializes a new {Scanners::Iana} instance
|
|
76
|
-
# passing the {#content_for_scanner}
|
|
77
|
-
# and calls +parse+ on it.
|
|
78
|
-
#
|
|
79
|
-
# @return [Hash]
|
|
80
|
-
def parse
|
|
81
|
-
Scanners::Iana.new(content_for_scanner).parse
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
|
|
85
78
|
private
|
|
86
79
|
|
|
87
80
|
def build_contact(element, type)
|
|
@@ -45,6 +45,8 @@ module Whois
|
|
|
45
45
|
:registered
|
|
46
46
|
when "deleted"
|
|
47
47
|
:suspended
|
|
48
|
+
when "reserved"
|
|
49
|
+
:reserved
|
|
48
50
|
else
|
|
49
51
|
Whois.bug!(ParserError, "Unknown status `#{$1}'.")
|
|
50
52
|
end
|
|
@@ -61,6 +63,11 @@ module Whois
|
|
|
61
63
|
!available?
|
|
62
64
|
end
|
|
63
65
|
|
|
66
|
+
# NEWPROPERTY
|
|
67
|
+
def reserved?
|
|
68
|
+
status == :reserved
|
|
69
|
+
end
|
|
70
|
+
|
|
64
71
|
|
|
65
72
|
# TODO: timezone ('Asia/Tokyo')
|
|
66
73
|
property_supported :created_on do
|