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
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
## Release 3.2.0
|
|
5
|
+
|
|
6
|
+
- SERVER: Added .JP.NET (GH-240), XN--J1AMH TLD definition.
|
|
7
|
+
|
|
8
|
+
- NEW: Added #domain_id to CoCCA parsers.
|
|
9
|
+
|
|
10
|
+
- NEW: Added full whois.srs.net.nz parser.
|
|
11
|
+
|
|
12
|
+
- NEW: Added full whois.fi parser.
|
|
13
|
+
|
|
14
|
+
- NEW: whois.dns.pl parser now recognizes throttled responses.
|
|
15
|
+
|
|
16
|
+
- CHANGED: Updated whois.nic.ac, whois.nic.io, and whois.nic.sh parsers to the new response format (GH-238).
|
|
17
|
+
|
|
18
|
+
- CHANGED: Updated whois1.nic.bi parser to the new response format.
|
|
19
|
+
|
|
20
|
+
- CHANGED: Updated whois.norid.no parser to the new response format.
|
|
21
|
+
|
|
22
|
+
- FIXED: whois.jprs.jp crashes when status is `reserved` for ne.jp SLD.
|
|
23
|
+
|
|
24
|
+
- FIXED: Arin adapter is incorrectly passing an Arin flag to referral queries.
|
|
25
|
+
|
|
26
|
+
|
|
3
27
|
## Release 3.1.3
|
|
4
28
|
|
|
5
29
|
- SERVER: Updated .GD (GH-227), .TC (GH-228) TLD definitions.
|
|
@@ -106,7 +130,7 @@
|
|
|
106
130
|
|
|
107
131
|
- CHANGED: Dropped support for Ruby 1.8
|
|
108
132
|
|
|
109
|
-
- CHANGED: Renamed Whois::Record::Scanners::Ast to Renamed Whois::Record::Scanners::
|
|
133
|
+
- CHANGED: Renamed Whois::Record::Scanners::Ast to Renamed Whois::Record::Scanners::Scannable
|
|
110
134
|
|
|
111
135
|
- CHANGED: Definitions are now stored as JSON.
|
|
112
136
|
|
|
@@ -197,7 +221,7 @@
|
|
|
197
221
|
|
|
198
222
|
- Removed compatibility with Ruby 1.8
|
|
199
223
|
|
|
200
|
-
- Renamed Whois::Record::Scanners::Ast to Renamed Whois::Record::Scanners::
|
|
224
|
+
- Renamed Whois::Record::Scanners::Ast to Renamed Whois::Record::Scanners::Scannable
|
|
201
225
|
|
|
202
226
|
- Whois::Server#query has been renamed to Whois::Server#lookup
|
|
203
227
|
|
data/data/tld.json
CHANGED
|
@@ -32,6 +32,9 @@
|
|
|
32
32
|
".hu.com": {
|
|
33
33
|
"host": "whois.centralnic.com"
|
|
34
34
|
},
|
|
35
|
+
".jp.net": {
|
|
36
|
+
"host": "whois.centralnic.com"
|
|
37
|
+
},
|
|
35
38
|
".jpn.com": {
|
|
36
39
|
"host": "whois.centralnic.com"
|
|
37
40
|
},
|
|
@@ -1141,7 +1144,7 @@
|
|
|
1141
1144
|
".vn": {
|
|
1142
1145
|
"host": null,
|
|
1143
1146
|
"adapter": "web",
|
|
1144
|
-
"url": "http://
|
|
1147
|
+
"url": "http://www.vnnic.vn/en/domain"
|
|
1145
1148
|
},
|
|
1146
1149
|
".vu": {
|
|
1147
1150
|
"host": null,
|
|
@@ -1226,6 +1229,9 @@
|
|
|
1226
1229
|
"host": null,
|
|
1227
1230
|
"adapter": "none"
|
|
1228
1231
|
},
|
|
1232
|
+
".xn--j1amh": {
|
|
1233
|
+
"host": "whois.ua"
|
|
1234
|
+
},
|
|
1229
1235
|
".xn--j6w193g": {
|
|
1230
1236
|
"host": "whois.hkirc.hk"
|
|
1231
1237
|
},
|
|
@@ -1300,4 +1306,4 @@
|
|
|
1300
1306
|
".xn--ygbi2ammx": {
|
|
1301
1307
|
"host": "whois.pnina.ps"
|
|
1302
1308
|
}
|
|
1303
|
-
}
|
|
1309
|
+
}
|
|
@@ -19,7 +19,9 @@ module Whois
|
|
|
19
19
|
#
|
|
20
20
|
# @abstract
|
|
21
21
|
class BaseAfilias < Base
|
|
22
|
-
include Scanners::
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::BaseAfilias
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
property_supported :disclaimer do
|
|
@@ -101,16 +103,6 @@ module Whois
|
|
|
101
103
|
end
|
|
102
104
|
|
|
103
105
|
|
|
104
|
-
# Initializes a new {Scanners::Afilias} instance
|
|
105
|
-
# passing the {#content_for_scanner}
|
|
106
|
-
# and calls +parse+ on it.
|
|
107
|
-
#
|
|
108
|
-
# @return [Hash]
|
|
109
|
-
def parse
|
|
110
|
-
Scanners::BaseAfilias.new(content_for_scanner).parse
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
|
|
114
106
|
private
|
|
115
107
|
|
|
116
108
|
def build_contact(element, type)
|
|
@@ -20,11 +20,12 @@ module Whois
|
|
|
20
20
|
class BaseCocca2 < Base
|
|
21
21
|
|
|
22
22
|
property_supported :domain do
|
|
23
|
-
content_for_scanner
|
|
24
|
-
$1 || Whois.bug!(ParserError, "Unable to parse domain.")
|
|
23
|
+
content_for_scanner.slice(/Domain Name: (.+)\n/, 1)
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
property_supported :domain_id do
|
|
27
|
+
content_for_scanner.slice(/Domain ID: (.+)\n/, 1)
|
|
28
|
+
end
|
|
28
29
|
|
|
29
30
|
# TODO: /pending delete/ => :redemption
|
|
30
31
|
# TODO: /pending purge/ => :redemption
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2009-2013 Simone Carletti <weppos@weppos.net>
|
|
7
|
+
#++
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'whois/record/parser/base'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module Whois
|
|
14
|
+
class Record
|
|
15
|
+
class Parser
|
|
16
|
+
|
|
17
|
+
class BaseIcb < Base
|
|
18
|
+
|
|
19
|
+
property_not_supported :disclaimer
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
property_supported :domain do
|
|
23
|
+
if registered?
|
|
24
|
+
content_for_scanner.match(/^Domain : (.+)\n/)[1]
|
|
25
|
+
elsif available?
|
|
26
|
+
content_for_scanner.match(/^Domain (.+) is available/)[1]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
property_not_supported :domain_id
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
property_supported :status do
|
|
34
|
+
if available?
|
|
35
|
+
:available
|
|
36
|
+
else
|
|
37
|
+
:registered
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
property_supported :available? do
|
|
42
|
+
!!(content_for_scanner =~ /^Domain (.+?) is available/)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
property_supported :registered? do
|
|
46
|
+
!available?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
property_not_supported :created_on
|
|
51
|
+
|
|
52
|
+
property_not_supported :updated_on
|
|
53
|
+
|
|
54
|
+
property_supported :expires_on do
|
|
55
|
+
if content_for_scanner =~ /Expiry : (.+?)\n/
|
|
56
|
+
Time.parse($1)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
property_not_supported :registrar
|
|
62
|
+
|
|
63
|
+
property_supported :registrant_contacts do
|
|
64
|
+
textblock = content_for_scanner.slice(/Owner((?:\s*: .+\n)+)/, 1)
|
|
65
|
+
return unless textblock
|
|
66
|
+
|
|
67
|
+
lines = textblock.scan(/^\s+: (.+)\n/).flatten
|
|
68
|
+
Record::Contact.new(
|
|
69
|
+
type: Record::Contact::TYPE_REGISTRANT,
|
|
70
|
+
name: lines[0],
|
|
71
|
+
organization: lines[1],
|
|
72
|
+
address: lines[2],
|
|
73
|
+
zip: nil,
|
|
74
|
+
state: lines[4],
|
|
75
|
+
city: lines[3],
|
|
76
|
+
country: lines[5]
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
property_not_supported :admin_contacts
|
|
81
|
+
|
|
82
|
+
property_not_supported :technical_contacts
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
property_supported :nameservers do
|
|
86
|
+
content_for_scanner.scan(/^NS \d\s+: (.+)/).flatten.map do |name|
|
|
87
|
+
Record::Nameserver.new(name: name)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -19,7 +19,10 @@ module Whois
|
|
|
19
19
|
#
|
|
20
20
|
# @abstract
|
|
21
21
|
class BaseShared1 < Base
|
|
22
|
-
include Scanners::
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::BaseShared1
|
|
25
|
+
|
|
23
26
|
|
|
24
27
|
property_not_supported :disclaimer
|
|
25
28
|
|
|
@@ -83,16 +86,6 @@ module Whois
|
|
|
83
86
|
end
|
|
84
87
|
|
|
85
88
|
|
|
86
|
-
# Initializes a new {Scanners::BaseShared1} instance
|
|
87
|
-
# passing the {#content_for_scanner}
|
|
88
|
-
# and calls +parse+ on it.
|
|
89
|
-
#
|
|
90
|
-
# @return [Hash]
|
|
91
|
-
def parse
|
|
92
|
-
Scanners::BaseShared1.new(content_for_scanner).parse
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
|
|
96
89
|
private
|
|
97
90
|
|
|
98
91
|
def build_contact(element, type)
|
|
@@ -19,7 +19,10 @@ module Whois
|
|
|
19
19
|
#
|
|
20
20
|
# @abstract
|
|
21
21
|
class BaseShared2 < Base
|
|
22
|
-
include Scanners::
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::BaseShared2
|
|
25
|
+
|
|
23
26
|
|
|
24
27
|
# Actually the :disclaimer is supported,
|
|
25
28
|
# but extracting it with the current scanner
|
|
@@ -92,16 +95,6 @@ module Whois
|
|
|
92
95
|
end
|
|
93
96
|
|
|
94
97
|
|
|
95
|
-
# Initializes a new {Scanners::BaseShared2} instance
|
|
96
|
-
# passing the {#content_for_scanner}
|
|
97
|
-
# and calls +parse+ on it.
|
|
98
|
-
#
|
|
99
|
-
# @return [Hash]
|
|
100
|
-
def parse
|
|
101
|
-
Scanners::BaseShared2.new(content_for_scanner).parse
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
|
|
105
98
|
private
|
|
106
99
|
|
|
107
100
|
def build_contact(element, type)
|
|
@@ -19,7 +19,10 @@ module Whois
|
|
|
19
19
|
#
|
|
20
20
|
# @abstract
|
|
21
21
|
class BaseShared3 < Base
|
|
22
|
-
include Scanners::
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::BaseShared3
|
|
25
|
+
|
|
23
26
|
|
|
24
27
|
property_supported :disclaimer do
|
|
25
28
|
node("field:disclaimer")
|
|
@@ -96,17 +99,7 @@ module Whois
|
|
|
96
99
|
end
|
|
97
100
|
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
# passing the {#content_for_scanner}
|
|
101
|
-
# and calls +parse+ on it.
|
|
102
|
-
#
|
|
103
|
-
# @return [Hash]
|
|
104
|
-
def parse
|
|
105
|
-
Scanners::BaseShared3.new(content_for_scanner).parse
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
private
|
|
102
|
+
private
|
|
110
103
|
|
|
111
104
|
def build_contact(element, type)
|
|
112
105
|
node("#{element}-contact") do |raw|
|
|
@@ -18,10 +18,11 @@ module Whois
|
|
|
18
18
|
# Base parser for Whoisd servers.
|
|
19
19
|
#
|
|
20
20
|
# @abstract
|
|
21
|
-
#
|
|
22
|
-
# @since 2.6.4
|
|
23
21
|
class BaseWhoisd < Base
|
|
24
|
-
include Scanners::
|
|
22
|
+
include Scanners::Scannable
|
|
23
|
+
|
|
24
|
+
self.scanner = Scanners::BaseWhoisd
|
|
25
|
+
|
|
25
26
|
|
|
26
27
|
class_attribute :status_mapping
|
|
27
28
|
self.status_mapping = {
|
|
@@ -113,16 +114,6 @@ module Whois
|
|
|
113
114
|
end
|
|
114
115
|
|
|
115
116
|
|
|
116
|
-
# Initializes a new {Scanners::Whoisd} instance
|
|
117
|
-
# passing the {#content_for_scanner}
|
|
118
|
-
# and calls +parse+ on it.
|
|
119
|
-
#
|
|
120
|
-
# @return [Hash]
|
|
121
|
-
def parse
|
|
122
|
-
Scanners::BaseWhoisd.new(content_for_scanner).parse
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
|
|
126
117
|
private
|
|
127
118
|
|
|
128
119
|
def node_nsset
|
|
@@ -16,8 +16,15 @@ module Whois
|
|
|
16
16
|
class Parser
|
|
17
17
|
|
|
18
18
|
# Parser for the jobswhois.verisign-grs.com server.
|
|
19
|
+
#
|
|
20
|
+
# @see Whois::Record::Parser::Example
|
|
21
|
+
# The Example parser for the list of all available methods.
|
|
22
|
+
#
|
|
19
23
|
class JobswhoisVerisignGrsCom < Base
|
|
20
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::Verisign
|
|
27
|
+
|
|
21
28
|
|
|
22
29
|
property_supported :disclaimer do
|
|
23
30
|
node("Disclaimer")
|
|
@@ -86,16 +93,6 @@ module Whois
|
|
|
86
93
|
node("Referral URL")
|
|
87
94
|
end
|
|
88
95
|
|
|
89
|
-
|
|
90
|
-
# Initializes a new {Scanners::Verisign} instance
|
|
91
|
-
# passing the {#content_for_scanner}
|
|
92
|
-
# and calls +parse+ on it.
|
|
93
|
-
#
|
|
94
|
-
# @return [Hash]
|
|
95
|
-
def parse
|
|
96
|
-
Scanners::Verisign.new(content_for_scanner).parse
|
|
97
|
-
end
|
|
98
|
-
|
|
99
96
|
end
|
|
100
97
|
|
|
101
98
|
end
|
|
@@ -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.6.0
|
|
24
23
|
class WhoisAtiTn < Base
|
|
25
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisAtiTn
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
property_supported :disclaimer do
|
|
28
30
|
node("field:disclaimer")
|
|
@@ -63,15 +65,14 @@ module Whois
|
|
|
63
65
|
|
|
64
66
|
|
|
65
67
|
property_supported :registrar do
|
|
66
|
-
node("Registrar") do |
|
|
68
|
+
node("Registrar") do |value|
|
|
67
69
|
Record::Registrar.new(
|
|
68
70
|
:id => nil,
|
|
69
|
-
:name =>
|
|
71
|
+
:name => value
|
|
70
72
|
)
|
|
71
73
|
end
|
|
72
74
|
end
|
|
73
75
|
|
|
74
|
-
|
|
75
76
|
property_supported :registrant_contacts do
|
|
76
77
|
build_contact("Owner", Whois::Record::Contact::TYPE_REGISTRANT)
|
|
77
78
|
end
|
|
@@ -93,16 +94,6 @@ module Whois
|
|
|
93
94
|
end
|
|
94
95
|
|
|
95
96
|
|
|
96
|
-
# Initializes a new {Scanners::WhoisAtiTn} instance
|
|
97
|
-
# passing the {#content_for_scanner}
|
|
98
|
-
# and calls +parse+ on it.
|
|
99
|
-
#
|
|
100
|
-
# @return [Hash]
|
|
101
|
-
def parse
|
|
102
|
-
Scanners::WhoisAtiTn.new(content_for_scanner).parse
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
|
|
106
97
|
private
|
|
107
98
|
|
|
108
99
|
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.5.0
|
|
24
23
|
class WhoisAudnsNetAu < Base
|
|
25
|
-
include Scanners::
|
|
24
|
+
include Scanners::Scannable
|
|
25
|
+
|
|
26
|
+
self.scanner = Scanners::WhoisAudnsNetAu
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
property_not_supported :disclaimer
|
|
28
30
|
|
|
@@ -91,16 +93,6 @@ module Whois
|
|
|
91
93
|
end
|
|
92
94
|
|
|
93
95
|
|
|
94
|
-
# Initializes a new {Scanners::WhoisAudnsNetAu} instance
|
|
95
|
-
# passing the {#content_for_scanner}
|
|
96
|
-
# and calls +parse+ on it.
|
|
97
|
-
#
|
|
98
|
-
# @return [Hash]
|
|
99
|
-
def parse
|
|
100
|
-
Scanners::WhoisAudnsNetAu.new(content_for_scanner).parse
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
|
|
104
96
|
private
|
|
105
97
|
|
|
106
98
|
def build_contact(element, type)
|