/
geolocate.rb
50 lines (40 loc) · 1.11 KB
/
geolocate.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
require 'rubygems'
require 'sinatra'
require 'sinatra/activerecord'
require 'json'
require 'geoip'
require 'rack'
require 'time'
class GeoipEntry < ActiveRecord::Base
end
configure do
GEOIP = GeoIP.new('GeoLiteCity.dat')
end
configure :production do
ENV['APP_ROOT'] ||= File.dirname(__FILE__)
$:.unshift "#{ENV['APP_ROOT']}/vendor/plugins/newrelic_rpm/lib"
require 'newrelic_rpm'
end
get '/locate' do
response['Access-Control-Allow-Origin'] = "*"
result = {:message => "Something went wrong while geolocating your IP Address!"}.to_json
if geoip_result = GEOIP.city(request.ip)
result = geoip_result.to_hash
end
result.to_json
end
post '/location_save' do
locations = request.env["rack.input"].read.split(';')
GeoipEntry.create(:ip_address => request.ip, :user_agent => request.user_agent, :w3c_latitude => locations[0],
:w3c_longitude => locations[1], :ip_latitude => locations[2], :ip_longitude => locations[3], :distance => locations[4])
end
get '/locations' do
entries = []
GeoipEntry.find(:all).each do |e|
entries << e.entry
end
entries.to_json
end
get '/' do
erb :vpn
end