whoaz 1.0.0 → 2.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6505997becc000fc8ce2abf93bbfdef79dd5938f
4
+ data.tar.gz: df784db227599f5346db358d8fc2783f97cc690e
5
+ SHA512:
6
+ metadata.gz: bca755e70f09d777516aab7b5048087d87bc6486b2a0a8292419590522cfd30c675ed18882e2c947105485e69bfa7b0bbe18965cf93c1aef7cf1c9e72a2a09db
7
+ data.tar.gz: da93add4bfa699a439853a503a6c1cde2cc140ff37474bfbe567250a51c1cebfb20ab06e15adbce17822645487ebd01f70a0374b3ec277f1dd1a67208e9be6c3
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - 2.2
3
+ - 2.3
4
+ - 2.4.0
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Nihad Abbasov / NARKOZ
1
+ Copyright (c) 2012-2017 Nihad Abbasov <mail@narkoz.me>
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Whoaz
1
+ # Whoaz [![Build Status](https://travis-ci.org/NARKOZ/whoaz.svg)](http://travis-ci.org/NARKOZ/whoaz)
2
2
 
3
3
  Whoaz is a ruby gem that provides a nice way to interact with Whois.Az
4
4
 
@@ -13,7 +13,7 @@ gem install whoaz
13
13
  Bundler:
14
14
 
15
15
  ```ruby
16
- gem 'whoaz'
16
+ gem 'whoaz', '~> 2.0.0'
17
17
  ```
18
18
 
19
19
  ## Usage
@@ -32,6 +32,8 @@ whoaz.registered?
32
32
  whoaz google.az
33
33
  ```
34
34
 
35
+ For more information see: [https://narkoz.github.io/whoaz](https://narkoz.github.io/whoaz)
36
+
35
37
  ## Copyright
36
38
 
37
- Copyright (c) 2012 Nihad Abbasov
39
+ Released under the BSD 2-clause license. Copyright (c) 2012 Nihad Abbasov
data/Rakefile CHANGED
@@ -3,7 +3,8 @@ require "bundler/gem_tasks"
3
3
 
4
4
  require 'rspec/core/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec) do |spec|
6
- spec.pattern = FileList['spec/**/*_spec.rb']
6
+ spec.pattern = FileList['spec/**/*_spec.rb']
7
+ spec.rspec_opts = ['--color', '--format d']
7
8
  end
8
9
 
9
10
  task :default => :spec
data/bin/whoaz CHANGED
@@ -40,24 +40,4 @@ rescue Whoaz::Error => e
40
40
  end
41
41
 
42
42
  puts "\nWhoaz Version #{Whoaz::VERSION}\n\n"
43
-
44
- if query.free?
45
- puts "Domain #{domain.upcase} is not registered.\n\n"
46
- puts "NOTE: NOT REGISTERED DOMAIN IS NOT INDICATIVE OF THE AVAILABILITY OF A DOMAIN NAME."
47
- exit
48
- end
49
-
50
- puts "Domain Name: #{domain.upcase}"
51
-
52
- query.nameservers.each do |ns|
53
- puts "Name Server: #{ns.upcase}"
54
- end if query.nameservers
55
-
56
- puts "\nRegistrant:"
57
- puts " Organization: #{query.organization}" if query.organization
58
- puts " Name: #{query.name}
59
- Address: #{query.address}
60
- Phone: #{query.phone}
61
- Fax: #{query.fax}
62
- Email: #{query.email}
63
- "
43
+ puts "#{query.raw_domain_info}\n\n"
@@ -1,5 +1,4 @@
1
1
  require 'whoaz/version'
2
- require 'whoaz/ruby_ext'
3
2
  require 'whoaz/whois'
4
3
  require 'whoaz/errors'
5
4
  require 'net/http'
@@ -7,13 +6,18 @@ require 'nokogiri'
7
6
 
8
7
  module Whoaz
9
8
  WHOIS_URL = 'http://nic.az/cgi-bin/whois.cgi'
10
- WHOIS_REFERER = 'http://nic.az'
11
- MAIN_TLD = %w(az biz.az co.az com.az edu.az gov.az info.az int.az mil.az name.az net.az org.az pp.az)
9
+ WHOIS_REFERER = 'http://nic.az' # The URL to the WHOIS server. It's the same as <tt>http://whois.az</tt>.
10
+ MAIN_TLD = %w(az biz.az co.az com.az edu.az gov.az info.az int.az mil.az name.az net.az org.az pp.az pro.az)
12
11
  REGIONAL_TLD = %w(bilesuvar.az ganja.az imishli.az samux.az shamaxi.az shusha.az sumgait.az zaqatala.az)
13
12
 
13
+ # Creates a new Whois object.
14
+ #
15
+ # @param [String] domain The domain name required to query.
16
+ # @return [Whoaz::Whois]
14
17
  def self.whois(domain='')
15
18
  domain = domain.to_s.strip.downcase
16
- raise EmptyDomain, "Domain not specified" if domain.empty?
19
+ raise EmptyDomain, "Domain name is not specified" if domain.empty?
20
+ raise InvalidDomain, "Domain name contains non-ASCII characters" if domain =~ /[^\x00-\x7f]/
17
21
  Whoaz::Whois.new(domain)
18
22
  end
19
23
  end
@@ -1,7 +1,13 @@
1
1
  module Whoaz
2
+ # Custom error class for rescuing from all Whoaz errors.
2
3
  class Error < StandardError; end
4
+
5
+ # Raised when domain name is not passed.
3
6
  class EmptyDomain < Error; end
7
+
8
+ # Raised when invalid domain name is passed.
4
9
  class InvalidDomain < Error; end
10
+
11
+ # Raised when WHOIS server doesn't return the HTTP status code 200 (OK).
5
12
  class ServerError < Error; end
6
- class DomainNameError < Error; end
7
13
  end
@@ -1,3 +1,3 @@
1
1
  module Whoaz
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -1,66 +1,88 @@
1
1
  module Whoaz
2
2
  class Whois
3
- attr_accessor :name, :organization, :address, :phone, :fax, :email, :nameservers
3
+ # @return [String] The queried domain name.
4
+ attr_reader :domain
4
5
 
5
- def initialize(domain)
6
- post_domain = domain.split('.', 2)
7
- raise InvalidDomain, "Invalid domain specified" unless
8
- [MAIN_TLD, REGIONAL_TLD].any? {|a| a.include? post_domain.last}
6
+ # @return [String] The name of the registrant.
7
+ attr_reader :name
9
8
 
10
- url = URI WHOIS_URL
11
- req = Net::HTTP::Post.new(url.path, 'Referer' => WHOIS_REFERER)
12
- req.set_form_data('lang' => 'en', 'domain' => post_domain.first, 'dom' => ".#{post_domain.last}")
13
- res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req)}
9
+ # @return [String] The organization of the registrant.
10
+ attr_reader :organization
14
11
 
15
- if res.code.to_i == 200
16
- doc = Nokogiri::HTML(res.body)
17
- else
18
- raise ServerError, "Server responded with code #{res.code}"
19
- end
12
+ # @return [String] The address of the registrant.
13
+ attr_reader :address
20
14
 
21
- if doc.at_xpath('//table[4]/tr/td[2]/table[2]/tr[3]/td').try(:text).try(:strip) == 'This domain is free.'
22
- @free = true
23
- end
15
+ # @return [String] The phone of the registrant.
16
+ attr_reader :phone
24
17
 
25
- if @name.nil? && @organization.nil?
26
- if doc.at_xpath('//table[4]/tr/td[2]/table[2]/td/p').
27
- try(:text).try(:strip) == 'Using of domain names contains less than 3 symbols is not allowed'
28
- raise DomainNameError, "Whois query for this domain name is not supported."
29
- end
30
- end
18
+ # @return [String] The fax of the registrant.
19
+ attr_reader :fax
31
20
 
32
- doc.xpath('//table[4]/tr/td[2]/table[2]/td/table/tr').each do |registrant|
33
- @organization = registrant.at_xpath('td[2]/table/tr[1]/td[2]').try(:text)
34
- @name = registrant.at_xpath('td[2]/table/tr[2]/td[2]').try(:text)
35
- @address = registrant.at_xpath('td[3]/table/tr[1]/td[2]').try(:text)
36
- @phone = registrant.at_xpath('td[3]/table/tr[2]/td[2]').try(:text)
37
- @fax = registrant.at_xpath('td[3]/table/tr[3]/td[2]').try(:text)
38
- @email = registrant.at_xpath('td[3]/table/tr[4]/td[2]').try(:text)
39
- end
21
+ # @return [String] The email of the registrant.
22
+ attr_reader :email
40
23
 
41
- doc.xpath('//table[4]/tr/td[2]/table[2]/td/table/tr/td[4]/table').each do |nameserver|
42
- @nameservers = [
43
- nameserver.at_xpath('tr[2]/td[2]').try(:text),
44
- nameserver.at_xpath('tr[3]/td[2]').try(:text),
45
- nameserver.at_xpath('tr[4]/td[2]').try(:text),
46
- nameserver.at_xpath('tr[5]/td[2]').try(:text),
47
- nameserver.at_xpath('tr[6]/td[2]').try(:text),
48
- nameserver.at_xpath('tr[7]/td[2]').try(:text),
49
- nameserver.at_xpath('tr[8]/td[2]').try(:text),
50
- nameserver.at_xpath('tr[9]/td[2]').try(:text)
51
- ]
52
- end
24
+ # @return [Array] An array of nameservers.
25
+ attr_reader :nameservers
53
26
 
54
- @nameservers.try(:compact!)
55
- @name, @organization = @organization, nil if @name.nil?
56
- end
27
+ # @return [Boolean] Availability of the domain.
28
+ attr_reader :free
29
+ alias_method :free?, :free
30
+ alias_method :available?, :free?
31
+
32
+ # Initializes a new Whois object.
33
+ #
34
+ # @param [String] domain The domain name required to query.
35
+ # @return [Whoaz::Whois]
36
+ def initialize(domain)
37
+ @domain = domain
57
38
 
58
- def free?
59
- @free ? true : false
39
+ if raw_domain_info.include?('is not exists') || raw_domain_info.include?('cannot be registered')
40
+ @free = true
41
+ else
42
+ @free = false
43
+ domain_info = raw_domain_info.split("\n")
44
+ @nameservers = domain_info[3].sub('Name Servers:', '').strip.split(',')
45
+ @organization = domain_info[16].sub('Organisation:', '').strip
46
+ @name = domain_info[17].sub('Name:', '').strip
47
+ @address = domain_info[19..23].join("\n").strip
48
+ @phone = domain_info[12].sub('Voice phone:', '').strip
49
+ @fax = domain_info[13].sub('Fax:', '').strip
50
+ @email = domain_info[11].sub('Email:', '').strip
51
+ end
60
52
  end
61
53
 
54
+ # Checks if the domain name is registered or not.
55
+ #
56
+ # @return [Boolean]
62
57
  def registered?
63
58
  !free?
64
59
  end
60
+
61
+ # Returns raw domain info as responded by WHOIS server.
62
+ #
63
+ # @return [String]
64
+ def raw_domain_info
65
+ @raw_domain_info ||= query
66
+ end
67
+
68
+ private
69
+
70
+ def query
71
+ post_domain = @domain.split('.', 2)
72
+ raise InvalidDomain, "Invalid domain name is specified" unless
73
+ (MAIN_TLD + REGIONAL_TLD).include? post_domain.last
74
+
75
+ url = URI WHOIS_URL
76
+ req = Net::HTTP::Post.new(url.path, 'Referer' => WHOIS_REFERER)
77
+ req.set_form_data(lang: 'en', domain: post_domain.first, dom: ".#{post_domain.last}")
78
+ res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req)}
79
+
80
+ if res.code.to_i == 200
81
+ page = Nokogiri::HTML res.body
82
+ page.at_xpath('//table[4]/tr/td[2]/table[2]/td[1]/pre').text.strip
83
+ else
84
+ raise ServerError, "WHOIS server responded with status code #{res.code}"
85
+ end
86
+ end
65
87
  end
66
88
  end
@@ -1,3 +1,4 @@
1
+
1
2
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3
  <html>
3
4
  <head>
@@ -74,7 +75,6 @@
74
75
  <option value='.co.az'>.co.az</option>
75
76
  <option value='.net.az'>.net.az</option>
76
77
  <option value='.int.az'>.int.az</option>
77
- <option value='.gov.az'>.gov.az</option>
78
78
  <option value='.biz.az'>.biz.az</option>
79
79
  <option value='.org.az'>.org.az</option>
80
80
  <option value='.edu.az'>.edu.az</option>
@@ -91,10 +91,10 @@
91
91
  <td background="/imgs/vline.gif" valign="top">
92
92
  <table width="100%" border="0" cellspacing="0" cellpadding="10">
93
93
  <tr>
94
- <td>Do a easy search below for your desired domain name, to check
94
+ <td>Do an easy search below for your desired domain name, to check
95
95
  for its availability before you proceed to register. <br>
96
96
  You can find info about the following domains : <br>
97
- az, com.az, net.az, int.az, gov.az, org.az, .edu.az, .info.az,
97
+ az, com.az, net.az, int.az, org.az, .edu.az, .info.az,
98
98
  .pp.az, .mil.az, .name.az and biz.az.</td>
99
99
  </tr>
100
100
  </table>
@@ -112,12 +112,11 @@
112
112
  <td colspan="6" bgcolor="#D9D5D1"><img src="/imgs/dot.gif" width="14" height="1"></td>
113
113
  </tr>
114
114
  <td colspan="5" valign="top">
115
- <br>
116
- <div align="center"><b>INFORMATION ABOUT DOMAIN "404.az"</b></div><br>
117
-
118
- <tr><td colspan=5 align="center">
119
- This domain is free. </p>
120
-
115
+
116
+ <pre>
117
+ Domain 404.AZ is not exists
118
+
119
+ </pre>
121
120
  <img src="/imgs/dot.gif" width="14" height="1">
122
121
  </td>
123
122
  <td><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -128,7 +127,7 @@
128
127
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
129
128
  </tr> <tr>
130
129
  <td valign="top" background="/imgs/bgbot.jpg"><img src="/imgs/who.gif" width="29" height="146"></td>
131
- <td align="center" valign="middle" background="/imgs/bgbot.jpg"><img src="/imgs/choose.jpg" width="521" height="146"></td>
130
+ <td align="center" valign="middle" background="/imgs/bgbot.jpg"></td>
132
131
  </tr>
133
132
  <tr>
134
133
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -1,3 +1,4 @@
1
+
1
2
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3
  <html>
3
4
  <head>
@@ -74,7 +75,6 @@
74
75
  <option value='.co.az'>.co.az</option>
75
76
  <option value='.net.az'>.net.az</option>
76
77
  <option value='.int.az'>.int.az</option>
77
- <option value='.gov.az'>.gov.az</option>
78
78
  <option value='.biz.az'>.biz.az</option>
79
79
  <option value='.org.az'>.org.az</option>
80
80
  <option value='.edu.az'>.edu.az</option>
@@ -91,10 +91,10 @@
91
91
  <td background="/imgs/vline.gif" valign="top">
92
92
  <table width="100%" border="0" cellspacing="0" cellpadding="10">
93
93
  <tr>
94
- <td>Do a easy search below for your desired domain name, to check
94
+ <td>Do an easy search below for your desired domain name, to check
95
95
  for its availability before you proceed to register. <br>
96
96
  You can find info about the following domains : <br>
97
- az, com.az, net.az, int.az, gov.az, org.az, .edu.az, .info.az,
97
+ az, com.az, net.az, int.az, org.az, .edu.az, .info.az,
98
98
  .pp.az, .mil.az, .name.az and biz.az.</td>
99
99
  </tr>
100
100
  </table>
@@ -112,50 +112,76 @@
112
112
  <td colspan="6" bgcolor="#D9D5D1"><img src="/imgs/dot.gif" width="14" height="1"></td>
113
113
  </tr>
114
114
  <td colspan="5" valign="top">
115
- <br>
116
- <div align="center"><b>INFORMATION ABOUT DOMAIN "google.az"</b></div><br>
117
-
118
- <div align="center"><b>
119
-
120
- </b></div><br>
121
-
122
- <table border="0" cellspacing="0" cellpadding="10" width="100%">
123
- <tr>
124
- <td><img src="/imgs/dot.gif" width="10"></td>
125
- <td valign="top" width="30%"><table border="0" cellspacing="0" cellpadding="5">
126
-
127
- <tr><td>Organizations </td><td>Google Inc.</td></tr>
128
- <tr><td>Name</td><td>Admin</td></tr>
129
-
130
-
131
- </td></tr>
132
-
133
- </p>
134
- </table> </td>
135
- <td valign="top" width="30%"><table border="0" cellspacing="0" cellpadding="5">
136
- <tr><td>Address </td><td>94043, Mountain View, 1600 Amphitheatre Parkway</td></tr>
137
- <tr><td>Phone </td><td>+16503300100</td></tr>
138
- <tr><td>Fax </td><td>+16506188571<br></td></tr>
139
- <tr><td>Email </td><td><a href=mailto:dns-admin@google.com>dns-admin@google.com</a></td></tr>
140
- </p>
141
- </table>
142
- </td>
143
- <td valign="top" width="30%">
144
- <table border="0" cellspacing="0" cellpadding="5">
145
- <tr>
146
- <td valign="top" colspan=2 valign="top">
147
-
148
-
149
- <tr><td>Name Servers : </td><td>ns1.google.com</td></tr>
150
-
151
- <tr><td>Name Servers : </td><td>ns2.google.com</td></tr>
152
-
153
- </td></tr>
154
- </table>
155
- </td>
156
- </tr>
157
- </table> </p>
158
-
115
+
116
+ <pre>
117
+
118
+
119
+ Info for domain GOOGLE.AZ
120
+
121
+ Status:
122
+ Name Servers: NS1.GOOGLE.COM,NS2.GOOGLE.COM
123
+
124
+
125
+
126
+
127
+
128
+ Type: Registrant Admin contact
129
+ Status: ok
130
+ Email: dns-admin@google.com
131
+ Voice phone: +16503300100
132
+ Fax: +16506188571
133
+
134
+ International info:
135
+ Organisation: Google Inc.
136
+ Name: Admin,
137
+ Address:
138
+ Country Code: US
139
+ Province: CA
140
+ City: Mountain View
141
+ Street addr: 1600 Amphitheatre Parkway
142
+ Postal code: 94043
143
+
144
+
145
+
146
+
147
+ Type: Tech contact
148
+ Status: ok
149
+ Email: dns-admin@google.com
150
+ Voice phone: +16503300100
151
+ Fax: +16506188571
152
+
153
+ International info:
154
+ Organisation: Google Inc.
155
+ Name: Admin,
156
+ Address:
157
+ Country Code: US
158
+ Province: CA
159
+ City: Mountain View
160
+ Street addr: 1600 Amphitheatre Parkway
161
+ Postal code: 94043
162
+
163
+
164
+
165
+
166
+ Type: Billing contact
167
+ Status: ok
168
+ Email: ccops@markmonitor.com
169
+ Voice phone: +12083895740
170
+ Fax: +12083895799
171
+
172
+ International info:
173
+ Organisation: MarkMonitor
174
+ Name: Kevin Pearl,
175
+ Address:
176
+ Country Code: US
177
+ Province: ID
178
+ City: Boise
179
+ Street addr: 10400 OVerland Rd. PMB 155
180
+ Postal code: 83709
181
+
182
+
183
+
184
+ </pre>
159
185
  <img src="/imgs/dot.gif" width="14" height="1">
160
186
  </td>
161
187
  <td><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -166,7 +192,7 @@
166
192
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
167
193
  </tr> <tr>
168
194
  <td valign="top" background="/imgs/bgbot.jpg"><img src="/imgs/who.gif" width="29" height="146"></td>
169
- <td align="center" valign="middle" background="/imgs/bgbot.jpg"><img src="/imgs/choose.jpg" width="521" height="146"></td>
195
+ <td align="center" valign="middle" background="/imgs/bgbot.jpg"></td>
170
196
  </tr>
171
197
  <tr>
172
198
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -1,3 +1,4 @@
1
+
1
2
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
3
  <html>
3
4
  <head>
@@ -74,7 +75,6 @@
74
75
  <option value='.co.az'>.co.az</option>
75
76
  <option value='.net.az'>.net.az</option>
76
77
  <option value='.int.az'>.int.az</option>
77
- <option value='.gov.az'>.gov.az</option>
78
78
  <option value='.biz.az'>.biz.az</option>
79
79
  <option value='.org.az'>.org.az</option>
80
80
  <option value='.edu.az'>.edu.az</option>
@@ -91,10 +91,10 @@
91
91
  <td background="/imgs/vline.gif" valign="top">
92
92
  <table width="100%" border="0" cellspacing="0" cellpadding="10">
93
93
  <tr>
94
- <td>Do a easy search below for your desired domain name, to check
94
+ <td>Do an easy search below for your desired domain name, to check
95
95
  for its availability before you proceed to register. <br>
96
96
  You can find info about the following domains : <br>
97
- az, com.az, net.az, int.az, gov.az, org.az, .edu.az, .info.az,
97
+ az, com.az, net.az, int.az, org.az, .edu.az, .info.az,
98
98
  .pp.az, .mil.az, .name.az and biz.az.</td>
99
99
  </tr>
100
100
  </table>
@@ -112,54 +112,95 @@
112
112
  <td colspan="6" bgcolor="#D9D5D1"><img src="/imgs/dot.gif" width="14" height="1"></td>
113
113
  </tr>
114
114
  <td colspan="5" valign="top">
115
- <br>
116
- <div align="center"><b>INFORMATION ABOUT DOMAIN "johnsmith.az"</b></div><br>
117
-
118
- <div align="center"><b>
119
-
120
- </b></div><br>
121
-
122
- <table border="0" cellspacing="0" cellpadding="10" width="100%">
123
- <tr>
124
- <td><img src="/imgs/dot.gif" width="10"></td>
125
- <td valign="top" width="30%"><table border="0" cellspacing="0" cellpadding="5">
126
-
127
- <tr><td>Name </td><td>John Smith</td></tr>
128
-
129
- </td></tr>
130
-
131
- </p>
132
- </table> </td>
133
- <td valign="top" width="30%"><table border="0" cellspacing="0" cellpadding="5">
134
- <tr><td>Address </td><td>221B Baker Street</td></tr>
135
- <tr><td>Phone </td><td>+123000000000</td></tr>
136
- <tr><td>Fax </td><td><br></td></tr>
137
- <tr><td>Email </td><td><a href=mailto:john.smith@example.com>john.smith@example.com</a></td></tr>
138
- </p>
139
- </table>
140
- </td>
141
- <td valign="top" width="30%">
142
- <table border="0" cellspacing="0" cellpadding="5">
143
- <tr>
144
- <td valign="top" colspan=2 valign="top">
145
-
146
-
147
- <tr><td>Name Servers : </td><td>s.ns.example.net</td></tr>
148
-
149
- <tr><td>Name Servers : </td><td>m.ns.example.net</td></tr>
150
-
151
- <tr><td>Name Servers : </td><td>i.ns.example.net</td></tr>
152
-
153
- <tr><td>Name Servers : </td><td>t.ns.example.net</td></tr>
154
-
155
- <tr><td>Name Servers : </td><td>h.ns.example.net</td></tr>
156
-
157
- </td></tr>
158
- </table>
159
- </td>
160
- </tr>
161
- </table> </p>
162
-
115
+
116
+ <pre>
117
+
118
+
119
+ Info for domain JOHNSMITH.AZ
120
+
121
+ Status:
122
+ Name Servers: S.NS.EXAMPLE.NET,M.NS.EXAMPLE.NET,I.NS.EXAMPLE.NET,T.NS.EXAMPLE.NET,H.NS.EXAMPLE.NET
123
+
124
+
125
+
126
+
127
+
128
+ Type: Registrant
129
+ Status: ok
130
+ Email: john.smith@example.com
131
+ Voice phone: +123000000000
132
+ Fax: +123.0
133
+
134
+ International info:
135
+ Organisation:
136
+ Name: John Smith
137
+ Address:
138
+ Country Code: UK
139
+ Province: UK1000
140
+ City: London
141
+ Street addr: 221B Baker Street
142
+ Postal code: UK1000
143
+
144
+
145
+
146
+
147
+ Type: Admin contact
148
+ Status: ok
149
+ Email: john.smith@example.com
150
+ Voice phone: +123000000000
151
+ Fax: +123.0
152
+
153
+ International info:
154
+ Organisation:
155
+ Name: John Smith
156
+ Address:
157
+ Country Code: UK
158
+ Province:
159
+ City: Baku
160
+ Street addr: NO ADDRESS
161
+ Postal code:
162
+
163
+
164
+
165
+
166
+ Type: Tech contact
167
+ Status: ok
168
+ Email: john.smith@example.com
169
+ Voice phone: +123000000000
170
+ Fax: +123.0
171
+
172
+ International info:
173
+ Organisation:
174
+ Name: John Smith
175
+ Address:
176
+ Country Code: UK
177
+ Province:
178
+ City: Baku
179
+ Street addr: NO ADDRESS
180
+ Postal code:
181
+
182
+
183
+
184
+
185
+ Type: Billing contact
186
+ Status: ok
187
+ Email: john.smith@example.com
188
+ Voice phone: +123000000000
189
+ Fax: +123.0
190
+
191
+ International info:
192
+ Organisation:
193
+ Name: John Smith
194
+ Address:
195
+ Country Code: UK
196
+ Province:
197
+ City: Baku
198
+ Street addr: NO ADDRESS
199
+ Postal code:
200
+
201
+
202
+
203
+ </pre>
163
204
  <img src="/imgs/dot.gif" width="14" height="1">
164
205
  </td>
165
206
  <td><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -170,7 +211,7 @@
170
211
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
171
212
  </tr> <tr>
172
213
  <td valign="top" background="/imgs/bgbot.jpg"><img src="/imgs/who.gif" width="29" height="146"></td>
173
- <td align="center" valign="middle" background="/imgs/bgbot.jpg"><img src="/imgs/choose.jpg" width="521" height="146"></td>
214
+ <td align="center" valign="middle" background="/imgs/bgbot.jpg"></td>
174
215
  </tr>
175
216
  <tr>
176
217
  <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
@@ -4,6 +4,15 @@ require 'whoaz'
4
4
 
5
5
  FakeWeb.allow_net_connect = false
6
6
 
7
+ # Patch for Ruby >= 2.2
8
+ # https://github.com/chrisk/fakeweb/pull/59
9
+ module FakeWeb
10
+ class StubSocket
11
+ def close
12
+ end
13
+ end
14
+ end
15
+
7
16
  def load_fixture(name)
8
17
  File.open(File.dirname(__FILE__) + "/fixtures/#{name}.html").read
9
18
  end
@@ -1,25 +1,19 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Whoaz::Whois do
4
- it { Whoaz.should respond_to :whois }
4
+ it { expect(Whoaz).to respond_to :whois }
5
5
 
6
6
  describe "empty domain query" do
7
7
  it "should raise EmptyDomain" do
8
- expect { Whoaz.whois }.to raise_error Whoaz::EmptyDomain, 'Domain not specified'
8
+ expect { Whoaz.whois }.to raise_error Whoaz::EmptyDomain, 'Domain name is not specified'
9
9
  end
10
10
  end
11
11
 
12
12
  describe "invalid domain query" do
13
13
  it "should raise InvalidDomain" do
14
- expect { Whoaz.whois 'google' }.to raise_error Whoaz::InvalidDomain, 'Invalid domain specified'
15
- expect { Whoaz.whois 'goo.gl' }.to raise_error Whoaz::InvalidDomain, 'Invalid domain specified'
16
- end
17
- end
18
-
19
- describe "less than 3 characters long domain query" do
20
- it "should raise DomainNameError" do
21
- fake_url Whoaz::WHOIS_URL, 'less_than_3_chars', {:domain => 'i', :dom => '.az'}
22
- expect { Whoaz.whois 'i.az' }.to raise_error Whoaz::DomainNameError, 'Whois query for this domain name is not supported.'
14
+ expect { Whoaz.whois 'google' }.to raise_error Whoaz::InvalidDomain, 'Invalid domain name is specified'
15
+ expect { Whoaz.whois 'goo.gl' }.to raise_error Whoaz::InvalidDomain, 'Invalid domain name is specified'
16
+ expect { Whoaz.whois 'алм.az' }.to raise_error Whoaz::InvalidDomain, 'Domain name contains non-ASCII characters'
23
17
  end
24
18
  end
25
19
 
@@ -28,11 +22,15 @@ describe Whoaz::Whois do
28
22
  before { fake_url Whoaz::WHOIS_URL, 'organization', {:domain => 'google', :dom => '.az'} }
29
23
 
30
24
  describe "#free?" do
31
- specify { Whoaz.whois('google.az').free?.should be_false }
25
+ specify { expect(Whoaz.whois('google.az').free?).to be false }
32
26
  end
33
27
 
34
28
  describe "#registered?" do
35
- specify { Whoaz.whois('google.az').registered?.should be_true }
29
+ specify { expect(Whoaz.whois('google.az').registered?).to be true }
30
+ end
31
+
32
+ describe "#available?" do
33
+ specify { expect(Whoaz.whois('google.az').available?).to be false }
36
34
  end
37
35
  end
38
36
 
@@ -40,11 +38,15 @@ describe Whoaz::Whois do
40
38
  before { fake_url Whoaz::WHOIS_URL, 'free', {:domain => '404', :dom => '.az'} }
41
39
 
42
40
  describe "#free?" do
43
- specify { Whoaz.whois('google.az').free?.should be_true }
41
+ specify { expect(Whoaz.whois('google.az').free?).to be true }
44
42
  end
45
43
 
46
44
  describe "#registered?" do
47
- specify { Whoaz.whois('404.az').registered?.should be_false }
45
+ specify { expect(Whoaz.whois('404.az').registered?).to be false }
46
+ end
47
+
48
+ describe "#available?" do
49
+ specify { expect(Whoaz.whois('google.az').available?).to be true }
48
50
  end
49
51
  end
50
52
  end
@@ -54,13 +56,19 @@ describe Whoaz::Whois do
54
56
  before { fake_url Whoaz::WHOIS_URL, 'person', {:domain => 'johnsmith', :dom => '.az'} }
55
57
  subject { Whoaz.whois 'johnsmith.az' }
56
58
 
59
+ describe "#domain" do
60
+ it "should return a domain name" do
61
+ expect(subject.domain).to eq('johnsmith.az')
62
+ end
63
+ end
64
+
57
65
  describe "#organization" do
58
- specify { subject.organization.should be_nil }
66
+ specify { expect(subject.organization).to eq('') }
59
67
  end
60
68
 
61
69
  describe "#name" do
62
70
  it "should return a registrant name" do
63
- subject.name.should == 'John Smith'
71
+ expect(subject.name).to eq('John Smith')
64
72
  end
65
73
  end
66
74
  end
@@ -69,45 +77,51 @@ describe Whoaz::Whois do
69
77
  before { fake_url Whoaz::WHOIS_URL, 'organization', {:domain => 'google', :dom => '.az'} }
70
78
  subject { Whoaz.whois 'google.az' }
71
79
 
80
+ describe "#domain" do
81
+ it "should return a domain name" do
82
+ expect(subject.domain).to eq('google.az')
83
+ end
84
+ end
85
+
72
86
  describe "#organization" do
73
87
  it "should return a registrant organization" do
74
- subject.organization.should == 'Google Inc.'
88
+ expect(subject.organization).to eq('Google Inc.')
75
89
  end
76
90
  end
77
91
 
78
92
  describe "#name" do
79
93
  it "should return a registrant name" do
80
- subject.name.should == 'Admin'
94
+ expect(subject.name).to eq('Admin,')
81
95
  end
82
96
  end
83
97
 
84
98
  describe "#address" do
85
99
  it "should return a registrant address" do
86
- subject.address.should == '94043, Mountain View, 1600 Amphitheatre Parkway'
100
+ expect(subject.address).to eq("Country Code: US\n Province: CA\n City: Mountain View\n Street addr: 1600 Amphitheatre Parkway\n Postal code: 94043")
87
101
  end
88
102
  end
89
103
 
90
104
  describe "#phone" do
91
105
  it "should return a registrant phone" do
92
- subject.phone.should == '+16503300100'
106
+ expect(subject.phone).to eq('+16503300100')
93
107
  end
94
108
  end
95
109
 
96
110
  describe "#fax" do
97
111
  it "should return a registrant fax" do
98
- subject.fax.should == '+16506188571'
112
+ expect(subject.fax).to eq('+16506188571')
99
113
  end
100
114
  end
101
115
 
102
116
  describe "#email" do
103
117
  it "should return a registrant email" do
104
- subject.email.should == 'dns-admin@google.com'
118
+ expect(subject.email).to eq('dns-admin@google.com')
105
119
  end
106
120
  end
107
121
 
108
122
  describe "#nameservers" do
109
123
  it "should return domain nameservers" do
110
- subject.nameservers.should == ["ns1.google.com", "ns2.google.com"]
124
+ expect(subject.nameservers).to eq(["NS1.GOOGLE.COM", "NS2.GOOGLE.COM"])
111
125
  end
112
126
  end
113
127
  end
@@ -6,7 +6,8 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["mail@narkoz.me"]
7
7
  gem.description = %q{A gem that provides a nice way to interact with Whois.Az}
8
8
  gem.summary = %q{Gets domain whois information from Whois.Az}
9
- gem.homepage = "https://github.com/narkoz/whoaz"
9
+ gem.homepage = "https://narkoz.github.io/whoaz"
10
+ gem.license = "BSD"
10
11
 
11
12
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
13
  gem.files = `git ls-files`.split("\n")
@@ -15,6 +16,8 @@ Gem::Specification.new do |gem|
15
16
  gem.require_paths = ["lib"]
16
17
  gem.version = Whoaz::VERSION
17
18
 
19
+ gem.required_ruby_version = ">= 2.0.0"
20
+
18
21
  gem.add_runtime_dependency 'nokogiri'
19
22
 
20
23
  gem.add_development_dependency 'rake'
metadata CHANGED
@@ -1,60 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whoaz
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nihad Abbasov
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-01-29 00:00:00.000000000 Z
11
+ date: 2017-05-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
- requirement: &2169904380 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *2169904380
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rake
27
- requirement: &2169903960 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *2169903960
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: rspec
38
- requirement: &2169903540 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - ">="
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *2169903540
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: fakeweb
49
- requirement: &2169903120 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - ">="
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *2169903120
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
58
69
  description: A gem that provides a nice way to interact with Whois.Az
59
70
  email:
60
71
  - mail@narkoz.me
@@ -63,57 +74,49 @@ executables:
63
74
  extensions: []
64
75
  extra_rdoc_files: []
65
76
  files:
66
- - .gitignore
77
+ - ".gitignore"
78
+ - ".travis.yml"
67
79
  - Gemfile
68
- - LICENSE
80
+ - LICENSE.txt
69
81
  - README.md
70
82
  - Rakefile
71
83
  - bin/whoaz
72
84
  - lib/whoaz.rb
73
85
  - lib/whoaz/errors.rb
74
- - lib/whoaz/ruby_ext.rb
75
86
  - lib/whoaz/version.rb
76
87
  - lib/whoaz/whois.rb
77
88
  - spec/fixtures/free.html
78
- - spec/fixtures/less_than_3_chars.html
79
89
  - spec/fixtures/organization.html
80
90
  - spec/fixtures/person.html
81
91
  - spec/spec_helper.rb
82
92
  - spec/whoaz/whois_spec.rb
83
93
  - whoaz.gemspec
84
- homepage: https://github.com/narkoz/whoaz
85
- licenses: []
94
+ homepage: https://narkoz.github.io/whoaz
95
+ licenses:
96
+ - BSD
97
+ metadata: {}
86
98
  post_install_message:
87
99
  rdoc_options: []
88
100
  require_paths:
89
101
  - lib
90
102
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
103
  requirements:
93
- - - ! '>='
104
+ - - ">="
94
105
  - !ruby/object:Gem::Version
95
- version: '0'
96
- segments:
97
- - 0
98
- hash: 4109073648025391866
106
+ version: 2.0.0
99
107
  required_rubygems_version: !ruby/object:Gem::Requirement
100
- none: false
101
108
  requirements:
102
- - - ! '>='
109
+ - - ">="
103
110
  - !ruby/object:Gem::Version
104
111
  version: '0'
105
- segments:
106
- - 0
107
- hash: 4109073648025391866
108
112
  requirements: []
109
113
  rubyforge_project:
110
- rubygems_version: 1.8.15
114
+ rubygems_version: 2.6.10
111
115
  signing_key:
112
- specification_version: 3
116
+ specification_version: 4
113
117
  summary: Gets domain whois information from Whois.Az
114
118
  test_files:
115
119
  - spec/fixtures/free.html
116
- - spec/fixtures/less_than_3_chars.html
117
120
  - spec/fixtures/organization.html
118
121
  - spec/fixtures/person.html
119
122
  - spec/spec_helper.rb
@@ -1,5 +0,0 @@
1
- class Object
2
- def try(method)
3
- send method if respond_to? method
4
- end
5
- end
@@ -1,147 +0,0 @@
1
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
- <html>
3
- <head>
4
- <title>Whois.Az</title>
5
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
6
- <link href="/whois.css" rel="stylesheet" type="text/css">
7
- </head>
8
-
9
- <body bgcolor="#F7F7F7" background="/imgs/bg.jpg" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
10
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
11
- <tr>
12
- <td><img src="/imgs/whois.gif" hspace="16"></td>
13
- <td width="100%" valign="middle" align="center"><a href="http://www.az"><img border=0 src="/imgs/intrans.gif" alt="IntraNS" width="468" height="60"></a></td>
14
-
15
- <td background="/imgs/bg1.jpg"><img src="/imgs/dot.gif" width="18" height="1"></td>
16
- </tr>
17
- </table>
18
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
19
- <tr>
20
- <td><img src="/imgs/dot.gif" width="16" height="8"></td>
21
- <td width="100%" bgcolor="#AAA8A8"><img src="/imgs/dot.gif" width="16" height="6"></td>
22
- <td background="/imgs/bg1.jpg"><img src="/imgs/dot.gif" width="18" height="1"></td>
23
- </tr>
24
- </table>
25
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
26
- <tr>
27
- <td><img src="/imgs/dot.gif" width="16" height="8"></td>
28
- <td valign="top" width="90%" background="/imgs/topbg.gif"><img src="/imgs/welcome.gif" width="228" height="15" vspace="10"></td>
29
- <td background="/imgs/topbg.gif"><img src="/imgs/dot.gif" width="2" height="67"></td>
30
- <td valign="top" align="right" width="90%" background="/imgs/topbg.gif"><img src="/imgs/i.gif" width="32" height="28" hspace="10" vspace="8"><br>
31
- <a href="/index_ru.html">ru</a> <a href="/index_az.html">az</a> <a href="/index.html">en</a><img src="/imgs/dot.gif" width="22" height="8"></td>
32
- <td background="/imgs/bg1.jpg"><img src="/imgs/dot.gif" width="18" height="1"></td>
33
- </tr></table>
34
- <table width="100%" border="0" cellspacing="0" cellpadding="0">
35
- <tr>
36
- <td><img src="/imgs/dot.gif" width="13" height="1"></td>
37
- <td align="left"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
38
- <td colspan="2" width="33%" background="/imgs/topbg1.gif" valign="top"><img src="/imgs/1.gif" width="98" height="8"><img src="/imgs/dot.gif" width="152" height="8"></td>
39
- <td colspan="2" width="33%" background="/imgs/topbg1.gif" valign="top"><img src="/imgs/2.gif" width="123" height="8"><img src="/imgs/dot.gif" width="128" height="8"></td>
40
- <td colspan="2" width="33%" background="/imgs/topbg1.gif" valign="top"><img src="/imgs/3.gif" width="65" height="8"></td>
41
- </tr>
42
- <tr><td colspan="6" width="100%" background="/imgs/linebg.gif"><img src="/imgs/dot.gif" width="16" height="7"></td>
43
- </tr>
44
- <tr>
45
- <td colspan="2" width="33%" bgcolor="#EEECE9" valign="top">&nbsp;</td>
46
- <td width="33%" align="right" bgcolor="#EEECE9" valign="top" class="title">check
47
- the domain name<img src="/imgs/dot.gif" width="1" height="3"></td>
48
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
49
- <td width="33%" align="right" bgcolor="#EEECE9" valign="top" class="title">information about domains in .az zone<img src="/imgs/dot.gif" width="1" height="3"></td>
50
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
51
-
52
- </tr><tr>
53
- <td width="30%" bgcolor="#E3DFDC" valign="top"></td>
54
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
55
- <td width="30%" align="right" bgcolor="#E3DFDC" valign="top" class="title"><img src="/imgs/dot.gif" width="10" height="3"></td>
56
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
57
- <td width="30%" align="right" bgcolor="#E3DFDC" valign="top" class="title"><img src="/imgs/dot.gif" width="10" height="3"></td>
58
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
59
- </tr>
60
- <tr>
61
- <td background="/imgs/mapbg.jpg" align="center" valign="top"><img src="/imgs/map.jpg" width="230" height="117"></td>
62
- <td bgcolor="#EEECE9" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
63
- <td background="/imgs/hline.gif" valign="top"><br>
64
- <form name="whois" action="/cgi-bin/whois.cgi" method="post">
65
- <input type="hidden" name="lang" value="en"> <ul>
66
- 1.Enter the name of
67
- your domain (ex.nt.az)<br>
68
- 2.Select your desired *ext</ul>
69
- <ul><table cellpadding="0" cellspacing="0" border="0">
70
- <tr><td valign="top"><input type='text' name='domain' size='18' maxlength="50" class='sub'></td>
71
- <td valign="top"><select name='dom' class='sub'>
72
- <option selected value='.az'>.az</option>
73
- <option value='.com.az'>.com.az</option>
74
- <option value='.co.az'>.co.az</option>
75
- <option value='.net.az'>.net.az</option>
76
- <option value='.int.az'>.int.az</option>
77
- <option value='.gov.az'>.gov.az</option>
78
- <option value='.biz.az'>.biz.az</option>
79
- <option value='.org.az'>.org.az</option>
80
- <option value='.edu.az'>.edu.az</option>
81
- <option value='.mil.az'>.mil.az</option>
82
- <option value='.pp.az'>.pp.az</option>
83
- <option value='.name.az'>.name.az</option>
84
- <option value='.info.az'>.info.az</option>
85
- </select><a href="JavaScript:document.whois.submit()"><img src="/imgs/tick.gif" width="20" height="16" border="0"></a>
86
- </form></td>
87
- </tr>
88
- </table>
89
- </td>
90
- <td bgcolor="#EEECE9"" valign="top"><img src="/imgs/dot.gif" width="14" height="6"></td>
91
- <td background="/imgs/vline.gif" valign="top">
92
- <table width="100%" border="0" cellspacing="0" cellpadding="10">
93
- <tr>
94
- <td>Do a easy search below for your desired domain name, to check
95
- for its availability before you proceed to register. <br>
96
- You can find info about the following domains : <br>
97
- az, com.az, net.az, int.az, gov.az, org.az, .edu.az, .info.az,
98
- .pp.az, .mil.az, .name.az and biz.az.</td>
99
- </tr>
100
- </table>
101
- </td><td bgcolor="#EEECE9"><img src="/imgs/dot.gif"></td>
102
- </tr></table>
103
- <table width="100%" border="0" cellspacing="0" cellpadding="0" background="/imgs/mid.jpg"><tr>
104
- <td width="30%" bgcolor="#E3DFDC"><img src="/imgs/dot.gif" width="14" height="1"></td>
105
- <td bgcolor="#EEECE9"><img src="/imgs/dot.gif" width="14" height="1"></td>
106
- <td width="30%" bgcolor="#E3DFDC"><img src="/imgs/dot.gif" width="10" height="1"></td>
107
- <td bgcolor="#EEECE9"><img src="/imgs/dot.gif" width="14" height="1"></td>
108
- <td width="30%" bgcolor="#E3DFDC"><img src="/imgs/dot.gif" width="10" height="1"></td>
109
- <td bgcolor="#EEECE9"><img src="/imgs/dot.gif" width="14" height="1"></td>
110
- </tr>
111
- <tr>
112
- <td colspan="6" bgcolor="#D9D5D1"><img src="/imgs/dot.gif" width="14" height="1"></td>
113
- </tr>
114
- <td colspan="5" valign="top">
115
-
116
- <p align="center"><br> Using of domain names contains less than 3 symbols is not allowed </p>
117
-
118
- <img src="/imgs/dot.gif" width="14" height="1">
119
- </td>
120
- <td><img src="/imgs/dot.gif" width="14" height="1"></td>
121
- </tr>
122
- </table>
123
-
124
- <table width="100%" border="0" cellspacing="0"><tr>
125
- <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
126
- </tr> <tr>
127
- <td valign="top" background="/imgs/bgbot.jpg"><img src="/imgs/who.gif" width="29" height="146"></td>
128
- <td align="center" valign="middle" background="/imgs/bgbot.jpg"><img src="/imgs/choose.jpg" width="521" height="146"></td>
129
- </tr>
130
- <tr>
131
- <td colspan="2" bgcolor="#999999"><img src="/imgs/dot.gif" width="14" height="1"></td>
132
- </tr>
133
- <tr>
134
- <td colspan="2" background="/imgs/bottom.jpg" align="right">Copyright
135
- &copy; by <a href="http://www.nt.az/">Network Technologies</a><img src="/imgs/dot.gif" width="11" height="56"></td>
136
- </tr>
137
- <tr>
138
- <td colspan="2" bgcolor="#BABABA"><img src="/imgs/dot.gif" width="14" height="1"></td>
139
- </tr>
140
- </table>
141
-
142
- </td>
143
- <td background="/imgs/bg1.jpg"><img src="/imgs/dot.gif" width="18" height="1"></td>
144
- </tr>
145
- </table>
146
- </body>
147
- </html>