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
|
# File 'lib/x-real-ip/middleware.rb', line 12
def call(env)
real_ips = env["HTTP_X_REAL_IP"]
if real_ips
env["HTTP_X_FORWARDED_FOR"] = real_ips
else
real_ips = env["HTTP_X_FORWARDED_FOR"]
end
if real_ips
proxies = []
list = real_ips.split(',')
return @app.call(env) if list.empty?
begin
list.push env["REMOTE_ADDR"]
while tmp = list.pop
addr = tmp
if is_trusted?(tmp)
proxies.push tmp
else
break
end
end
if addr
env["x.proxies"] = proxies.join(',')
env["REMOTE_ADDR"] = addr
proto = env["HTTP_X_FORWARDED_PROTO"] || env['HTTP_X_REAL_PROTO']
if (proto && proto == 'https')
env["rack.url_scheme"] = 'https'
end
end
rescue => e
$stderr.puts "Error in x-real-ip: #{$!}"
$stderr.puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
end
end
@app.call(env)
end
|