added a plain css style and some error handling

okor лет %!s(int64=13): %!d(string=назад)
Родитель
Сommit
928eabf0ec
6 измененных файлов с 132 добавлено и 72 удалено
  1. 35 23
      main.rb
  2. 36 0
      public/css/styles.css
  3. BIN
      public/fonts/orbitron_medium.otf
  4. 8 0
      views/error.haml
  5. 9 7
      views/index.haml
  6. 44 42
      views/lookup.haml

+ 35 - 23
main.rb

@@ -2,6 +2,7 @@ require 'sinatra'
2 2
 require 'whois'
3 3
 require 'haml'
4 4
 require 'json'
5
+require 'ostruct'
5 6
 
6 7
 helpers do
7 8
 
@@ -22,30 +23,41 @@ get '/ip.json' do
22 23
 end
23 24
 
24 25
 get '/lookup' do
25
-	@lookup_info = Whois.query(params[:url])
26
-	@formatted_response = {
27
-		"domain" => @lookup_info.domain,
28
-		"created_on" => @lookup_info.created_on,
29
-		"expires_on" => @lookup_info.expires_on,
30
-		"whois_server" => @lookup_info.referral_whois,
31
-		"nameservers" => @lookup_info.nameservers,
32
-		"admin_contacts" => @lookup_info.admin_contacts[0],
33
-		"techical_contacts" => @lookup_info.technical_contacts,
34
-		"detailed" => @lookup_info.to_s.gsub(/\n/, '<br>')
35
-	}
36
-	haml :lookup
26
+	begin
27
+		@lookup_info = Whois.query(params[:url])
28
+		admin_contacts = Hash[@lookup_info.admin_contacts[0].each_pair.to_a]
29
+		technical_contacts = Hash[@lookup_info.technical_contacts[0].each_pair.to_a]
30
+
31
+		@formatted_response = {
32
+			"domain" => @lookup_info.domain,
33
+			"created_on" => @lookup_info.created_on,
34
+			"expires_on" => @lookup_info.expires_on,
35
+			"whois_server" => @lookup_info.referral_whois,
36
+			"nameservers" => @lookup_info.nameservers,
37
+			"admin_contacts" => admin_contacts,
38
+			"techical_contacts" => technical_contacts
39
+		}
40
+		haml :lookup
41
+	rescue
42
+		haml :error
43
+	end
37 44
 end
38 45
 
39 46
 get '/lookup.json' do
40
-	@lookup_info = Whois.query(params[:url])
41
-	content_type :json
42
-	{ :domain => @lookup_info.domain,
43
-		:created_on => @lookup_info.created_on,
44
-		:expires_on => @lookup_info.expires_on,
45
-		:whois_server => @lookup_info.referral_whois,
46
-		:nameservers => @lookup_info.nameservers,
47
-		:admin_contacts => @lookup_info.admin_contacts[0],
48
-		:techical_contacts => @lookup_info.technical_contacts[0],
49
-		:detailed => @lookup_info
50
-	}.to_json
47
+	begin
48
+		@lookup_info = Whois.query(params[:url])
49
+		admin_contacts = Hash[@lookup_info.admin_contacts[0].each_pair.to_a]
50
+		technical_contacts = Hash[@lookup_info.technical_contacts[0].each_pair.to_a]
51
+		content_type :json
52
+		{ :domain => @lookup_info.domain,
53
+			:created_on => @lookup_info.created_on,
54
+			:expires_on => @lookup_info.expires_on,
55
+			:whois_server => @lookup_info.referral_whois,
56
+			:nameservers => @lookup_info.nameservers,
57
+			:admin_contacts => admin_contacts,
58
+			:techical_contacts => technical_contacts
59
+		}.to_json
60
+	rescue
61
+		{"Error" => "Bad Request"}.to_json
62
+	end
51 63
 end

+ 36 - 0
public/css/styles.css

@@ -0,0 +1,36 @@
1
+@font-face {
2
+  font-family: 'Orbitron';
3
+  font-style: normal;
4
+  font-weight: 400;
5
+  src: local('Orbitron'), url('/fonts/orbitron_medium') format('opentype');
6
+}
7
+
8
+
9
+body {
10
+  font-family: 'Orbitron', sans-serif;
11
+  font-size: 14px;
12
+  background: #dedede;
13
+}
14
+
15
+
16
+
17
+p {
18
+  margin: 0;
19
+}
20
+
21
+.info {
22
+  width: 500px;
23
+  margin: 0 auto 15px auto;
24
+  padding: 15px;
25
+  border: solid 1px #ccc;
26
+  background-color: white;
27
+  box-shadow: 0 0 5px rgba(0,0,0,0.2);
28
+}
29
+
30
+p.title {
31
+  font-weight: bold;
32
+  font-size: 1.1em;
33
+  margin: 0 0 10px 0;
34
+  padding-bottom: 3px;
35
+  border-bottom: solid 1px #ccc;
36
+}

BIN
public/fonts/orbitron_medium.otf


+ 8 - 0
views/error.haml

@@ -0,0 +1,8 @@
1
+!!!
2
+%html
3
+  %head
4
+    %title A free whois API service
5
+    %link{:rel => "stylesheet", :type => "text/css", :href => "/css/styles.css"}
6
+  %body
7
+    .info
8
+      %h1 Error: invalid request

+ 9 - 7
views/index.haml

@@ -1,10 +1,12 @@
1 1
 !!!
2 2
 %html
3
-	%head
4
-		%title A free whois API service
5
-	%body
6
-		%p Just enter a URL, to do a WHOIS lookup.
3
+  %head
4
+    %title A free whois API service
5
+    %link{:rel => "stylesheet", :type => "text/css", :href => "/css/styles.css"}
6
+  %body
7
+    .info
8
+      %p.title Just enter a URL, to do a WHOIS lookup.
7 9
 
8
-		%form{ :action => "/lookup", :method => "get"}
9
-			%input{ :type => "text", :name => "url"}
10
-			%input{ :type => "submit", :value => "Lookup Whois"}
10
+      %form{ :action => "/lookup", :method => "get"}
11
+        %input{ :type => "text", :name => "url"}
12
+        %input.submit{ :type => "submit", :value => "Lookup Whois"}

+ 44 - 42
views/lookup.haml

@@ -2,46 +2,48 @@
2 2
 %html
3 3
 	%head
4 4
 		%title A free whois API service
5
+		%link{:rel => "stylesheet", :type => "text/css", :href => "/css/styles.css"}
5 6
 	%body
6
-
7
-		%h3 URL
8
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
9
-			= @formatted_response["domain"]
10
-
11
-		%h3 Admin Contact
12
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
13
-			- if @formatted_response["admin_contacts"]
14
-				- @formatted_response["admin_contacts"].each do |contact|
15
-					= contact.to_s + " <br />"
16
-			- else
17
-				= "none"
18
-
19
-		%h3 Technical Contact
20
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
21
-			- if @formatted_response["technical_contacts"]
22
-				- @formatted_response["technical_contacts"].each do |contact|
23
-					= contact.to_s + " <br />"
24
-			- else
25
-				= "none"
26
-
27
-		%h3 Create Date
28
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
29
-			= @formatted_response["created_on"]
30
-
31
-		%h3 Expire Date
32
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
33
-			= @formatted_response["expires_on"]
34
-
35
-		%h3 WHOIS Server
36
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
37
-			= @formatted_response["whois_server"]
38
-
39
-		%h3 Nameservers
40
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
41
-			- @formatted_response["nameservers"].each do |name|
42
-				= name.to_s + " <br />"
43
-
44
-		%h3 Detailed Response	
45
-		%div{:style => "border: solid 1px black; padding: 10px; border-radius: 15px"}
46
-			= @formatted_response["detailed"]
47
-			
7
+		.info
8
+			%p.title URL
9
+			%p.content
10
+				= @formatted_response["domain"]
11
+
12
+		.info
13
+			%p.title Admin Contact
14
+			%p.content
15
+				- if @formatted_response["admin_contacts"]
16
+					- @formatted_response["admin_contacts"].each do |contact|
17
+						= "<strong>" + contact[0].to_s + "</strong>: " + contact[1].to_s + "<br />"
18
+				- else
19
+					= "none"
20
+
21
+		.info
22
+			%p.title Technical Contact
23
+			%p.content
24
+				- if @formatted_response["technical_contacts"]
25
+					- @formatted_response["technical_contacts"].each do |contact|
26
+						= contact.to_s + " <br />"
27
+				- else
28
+					= "none"
29
+
30
+		.info
31
+			%p.title Create Date
32
+			%p.content
33
+				= @formatted_response["created_on"]
34
+
35
+		.info
36
+			%p.title Expire Date
37
+			%p.content
38
+				= @formatted_response["expires_on"]
39
+
40
+		.info
41
+			%p.title WHOIS Server
42
+			%p.content
43
+				= @formatted_response["whois_server"]
44
+
45
+		.info
46
+			%p.title Nameservers
47
+			%p.content
48
+				- @formatted_response["nameservers"].each do |name|
49
+					= name.to_s + " <br />"