whoaz 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>