From: John Dong Date: Fri, 31 Aug 2007 15:26:15 +0000 (-0400) Subject: Fix WHOIS library not to puke on strange IP addresses X-Git-Url: https://projects.mako.cc/source/selectricity-live/commitdiff_plain/f38aa87edf153cf8f5f5c93a78fbf1424a8e62f2?ds=inline;hp=--cc Fix WHOIS library not to puke on strange IP addresses --- f38aa87edf153cf8f5f5c93a78fbf1424a8e62f2 diff --git a/app/controllers/quickvote_controller.rb b/app/controllers/quickvote_controller.rb index d8d3d59..b9c790f 100644 --- a/app/controllers/quickvote_controller.rb +++ b/app/controllers/quickvote_controller.rb @@ -168,7 +168,14 @@ class QuickvoteController < ApplicationController @election=QuickVote.ident_to_quickvote(params[:id]) @election.voters.each do |voter| next unless voter.ipaddress - location = GeoKit::Geocoders::IpGeocoder.geocode(voter.ipaddress) + location=nil + if Cache and location=Cache.get("GEO:#{voter.ipaddress}") + elsif Cache + location = GeoKit::Geocoders::IpGeocoder.geocode(voter.ipaddress) + Cache.set "GEO:#{voter.ipaddress}", location + else + location = GeoKit::Geocoders::IpGeocoder.geocode(voter.ipaddress) + end next unless location.lng and location.lat unless center diff --git a/app/views/quickvote/list_voters.rhtml b/app/views/quickvote/list_voters.rhtml index 1672499..695794f 100644 --- a/app/views/quickvote/list_voters.rhtml +++ b/app/views/quickvote/list_voters.rhtml @@ -27,13 +27,17 @@ voter.ipaddress =~ /^172\.[1-3]/ %> <% w=nil + puts "WHOIS #{voter.ipaddress}" if Cache and w=Cache.get("WHOIS:#{voter.ipaddress}") elsif Cache - w= Whois::Whois.new(IPAddr.new(voter.ipaddress),true) + puts "CREATE" + w= Whois::Whois.new(IPAddr.new(voter.ipaddress),false) + puts "SEARCH" w.search_whois + puts "DONE" Cache.set("WHOIS:#{voter.ipaddress}", w) else - w= Whois::Whois.new(IPAddr.new(voter.ipaddress),true) + w= Whois::Whois.new(IPAddr.new(voter.ipaddress),false) w.search_whois end diff --git a/lib/whois/whois.rb b/lib/whois/whois.rb index 9b07aef..88c735b 100755 --- a/lib/whois/whois.rb +++ b/lib/whois/whois.rb @@ -121,9 +121,10 @@ module Whois arr_tmp = ip_hash.sort{|b,c| c[0][/\/(.+)/, 1].to_i <=> b[0][/\/(.+)/, 1].to_i} arr_tmp.each do |l| ip_range = IPAddr.new l[0] - if ip_range.include? self.ip + if ip_range.include? self.ip and l[1].length > 0 return Object.instance_eval("Server::#{l[1]}.new") end + return Server::Ripe.new end end @@ -132,7 +133,7 @@ module Whois ipv6_list = YAML::load_file(File.dirname(__FILE__) + '/data/ipv6.yaml') server = server_with_hash(ipv6_list) unless server.kind_of? Server::Server - raise WhoisException.new("no server found for this IPv6 : #{self.ip}") + return Server::Ripe.new else return server end @@ -143,7 +144,7 @@ module Whois ipv4_list = YAML::load_file(File.dirname(__FILE__) + '/data/ipv4.yaml') server = server_with_hash(ipv4_list) unless server.kind_of? Server::Server - raise WhoisException.new("no server found for this IPv4 : #{self.ip}") + return Server::Ripe.new else return server end