Added IP masking, based on Google Analytics

Andrew committed May 01, 2018
commit 309cc5387b85a052c47f4bb19a8023be7f867e93
Showing 3 changed files with 24 additions and 1 deletions
CHANGELOG.md +1 -0
@@ @@ -1,5 +1,6 @@
## 2.0.3 [unreleased]
+ - Added IP masking
- Fixed `visitable` for Rails 4.2
## 2.0.2
ahoy.rb b/lib/ahoy.rb +3 -0
@@ @@ -67,6 +67,9 @@ module Ahoy
mattr_accessor :token_generator
self.token_generator = -> { SecureRandom.uuid }
+ mattr_accessor :mask_ip
+ self.mask_ip = false
+
def self.log(message)
Rails.logger.info { "[ahoy] #{message}" }
end
ahoy/visit_properties.rb b/lib/ahoy/visit_properties.rb +20 -1
@@ @@ -1,3 +1,4 @@
+ require "ipaddr"
require "browser"
require "referer-parser"
require "user_agent_parser"
@@ @@ -69,9 +70,27 @@ module Ahoy
}
end
+ # masking based on Google Analytics anonymization
+ # https://support.google.com/analytics/answer/2763052
+ def ip
+ ip = request.remote_ip
+ if ip && Ahoy.mask_ip
+ addr = IPAddr.new(ip)
+ if addr.ipv4?
+ # set last octet to 0
+ addr.mask(24).to_s
+ else
+ # set last 80 bits to zeros
+ addr.mask(48).to_s
+ end
+ else
+ ip
+ end
+ end
+
def request_properties
{
- ip: request.remote_ip,
+ ip: ip,
user_agent: ensure_utf8(request.user_agent),
referrer: referrer,
landing_page: landing_page,