Skip to content
This repository was archived by the owner on Mar 14, 2025. It is now read-only.

Commit 207ecbc

Browse files
authored
Merge pull request #143 from loftwah/dl/cloudflare-proxy-analytics
support cloudflare
2 parents 21dc783 + 8063fa2 commit 207ecbc

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

app/middleware/page_view_tracker.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@ def html_response?(headers)
2323
def track_page_view(request)
2424
user = User.find_by(username: request.path.split('/').last)
2525
if user
26-
location = OFFLINE_GEOCODER.search(request.ip)
26+
# Extract the original IP from the Cloudflare headers if available
27+
real_ip = request.headers['CF-Connecting-IP'] || request.headers['X-Forwarded-For']&.split(',')&.first || request.ip
28+
29+
location = OFFLINE_GEOCODER.search(real_ip)
2730

2831
PageView.create(
2932
user: user,
3033
path: request.path,
3134
referrer: request.referrer,
3235
browser: request.user_agent,
3336
visited_at: Time.current,
34-
ip_address: request.ip,
37+
ip_address: real_ip,
3538
session_id: request.session[:session_id],
3639
country: location[:country],
3740
city: location[:name],
@@ -46,5 +49,5 @@ def track_page_view(request)
4649
Rails.logger.info "Duplicate page view detected and ignored"
4750
rescue => e
4851
Rails.logger.error "Error tracking page view: #{e.message}"
49-
end
52+
end
5053
end

0 commit comments

Comments
 (0)