geo_redirect 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -0
- data/lib/geo_redirect.rb +27 -2
- data/lib/geo_redirect/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -89,6 +89,15 @@ If that doesn't suit you, you can customize these when adding `GeoRedirect` to y
|
|
89
89
|
:config => 'geo_cfg.yml'
|
90
90
|
}
|
91
91
|
|
92
|
+
### Debugging
|
93
|
+
|
94
|
+
You can add a `logfile` path string when adding the middleware if you want it to log some of its decision process into the file.
|
95
|
+
This is useful when working on your configuration YAML.
|
96
|
+
|
97
|
+
Rails.application.middleware.use GeoRedirect::Middleware, :logfile => 'log/geo_redirect.log'
|
98
|
+
|
99
|
+
`GeoRedirect`'s log messages will always be prefixed with `[GeoRedirect]`.
|
100
|
+
|
92
101
|
## Known Issues
|
93
102
|
|
94
103
|
A couple issues I know about but haven't had the time to fix:
|
data/lib/geo_redirect.rb
CHANGED
@@ -12,6 +12,7 @@ module GeoRedirect
|
|
12
12
|
# Some defaults
|
13
13
|
options[:db] ||= 'db/GeoIP.dat'
|
14
14
|
options[:config] ||= 'config/geo_redirect.yml'
|
15
|
+
@logfile = options[:logfile] || nil
|
15
16
|
|
16
17
|
@app = app
|
17
18
|
|
@@ -38,6 +39,8 @@ module GeoRedirect
|
|
38
39
|
puts "GeoRedirect middlware."
|
39
40
|
raise e
|
40
41
|
end
|
42
|
+
|
43
|
+
self.log "Initialized middleware"
|
41
44
|
end
|
42
45
|
|
43
46
|
def call(env)
|
@@ -57,6 +60,7 @@ module GeoRedirect
|
|
57
60
|
def session_exists?
|
58
61
|
host = @request.session['geo_redirect']
|
59
62
|
if host.present? && @config[host].nil? # Invalid var, remove it
|
63
|
+
self.log "Invalid session var, forgetting"
|
60
64
|
forget_host
|
61
65
|
host = nil
|
62
66
|
end
|
@@ -66,6 +70,7 @@ module GeoRedirect
|
|
66
70
|
|
67
71
|
def handle_session
|
68
72
|
host = @request.session['geo_redirect']
|
73
|
+
self.log "Handling session var: #{host}"
|
69
74
|
redirect_request(host)
|
70
75
|
end
|
71
76
|
|
@@ -77,6 +82,7 @@ module GeoRedirect
|
|
77
82
|
def handle_force
|
78
83
|
url = URI.parse(@request.url)
|
79
84
|
host = host_by_hostname(url.host)
|
85
|
+
self.log "Handling force flag: #{host}"
|
80
86
|
remember_host(host)
|
81
87
|
redirect_request(url.host, true)
|
82
88
|
end
|
@@ -84,15 +90,21 @@ module GeoRedirect
|
|
84
90
|
def handle_geoip
|
85
91
|
# Fetch country code
|
86
92
|
begin
|
87
|
-
|
93
|
+
ip_address = @request.env['HTTP_X_FORWARDED_FOR'] || @request.env['REMOTE_ADDR']
|
94
|
+
ip_address = ip_address.split(',').first.chop # take only the first given ip
|
95
|
+
self.log "Handling GeoIP lookup: IP #{ip_address}"
|
96
|
+
res = @db.country(ip_address)
|
88
97
|
code = res.try(:country_code)
|
89
98
|
country = res.try(:country_code2) unless code.nil? || code.zero?
|
90
99
|
rescue
|
91
100
|
country = nil
|
92
101
|
end
|
93
102
|
|
103
|
+
self.log "GeoIP match: country code #{country}"
|
104
|
+
|
94
105
|
unless country.nil?
|
95
106
|
host = host_by_country(country) # desired host
|
107
|
+
self.log "GeoIP host match: #{host}"
|
96
108
|
remember_host(host)
|
97
109
|
|
98
110
|
redirect_request(host)
|
@@ -119,7 +131,10 @@ module GeoRedirect
|
|
119
131
|
}.to_param
|
120
132
|
url.query = nil if url.query.empty?
|
121
133
|
|
122
|
-
|
134
|
+
self.log "Redirecting to #{url}"
|
135
|
+
[301,
|
136
|
+
{'Location' => url.to_s, 'Content-Type' => 'text/plain'},
|
137
|
+
['Moved Permanently\n']]
|
123
138
|
else
|
124
139
|
@app.call(@request.env)
|
125
140
|
end
|
@@ -136,11 +151,21 @@ module GeoRedirect
|
|
136
151
|
end
|
137
152
|
|
138
153
|
def remember_host(host)
|
154
|
+
self.log "Remembering: #{host}"
|
139
155
|
@request.session['geo_redirect'] = host
|
140
156
|
end
|
141
157
|
|
142
158
|
def forget_host
|
159
|
+
self.log "Forgetting: #{host}"
|
143
160
|
remember_host(nil)
|
144
161
|
end
|
162
|
+
|
163
|
+
protected
|
164
|
+
def log(message)
|
165
|
+
unless @logfile.nil?
|
166
|
+
@logger ||= Logger.new(@logfile)
|
167
|
+
@logger.debug("[GeoRedirect] #{message}")
|
168
|
+
end
|
169
|
+
end
|
145
170
|
end
|
146
171
|
end
|
data/lib/geo_redirect/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_redirect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: geoip
|