diff --git a/app/logical/current_user.rb b/app/logical/current_user.rb index 4c8d80349..5145ec7a7 100644 --- a/app/logical/current_user.rb +++ b/app/logical/current_user.rb @@ -40,6 +40,14 @@ class CurrentUser RequestStore[:current_ip_addr] = ip_addr end + def self.country + RequestStore[:country] + end + + def self.country=(country) + RequestStore[:country] = country + end + def self.root_url RequestStore[:current_root_url] || "https://#{Danbooru.config.hostname}" end diff --git a/app/logical/danbooru_logger.rb b/app/logical/danbooru_logger.rb index 63f8c2179..bbe5b40a8 100644 --- a/app/logical/danbooru_logger.rb +++ b/app/logical/danbooru_logger.rb @@ -51,7 +51,7 @@ class DanbooruLogger name: user&.name, level: user&.level_string, ip: request.remote_ip, - country: request.headers["CF-IPCountry"], + country: CurrentUser.country, safe_mode: CurrentUser.safe_mode? } end diff --git a/app/logical/session_loader.rb b/app/logical/session_loader.rb index 2407d5520..12f12e189 100644 --- a/app/logical/session_loader.rb +++ b/app/logical/session_loader.rb @@ -34,6 +34,7 @@ class SessionLoader update_last_logged_in_at update_last_ip_addr set_time_zone + set_country set_safe_mode initialize_session_cookies CurrentUser.user.unban! if CurrentUser.user.ban_expired? @@ -101,6 +102,12 @@ class SessionLoader Time.zone = CurrentUser.user.time_zone end + # Depends on Cloudflare + # https://support.cloudflare.com/hc/en-us/articles/200168236-Configuring-Cloudflare-IP-Geolocation + def set_country + CurrentUser.country = request.headers["CF-IPCountry"] + end + def set_safe_mode safe_mode = request.host.match?(/safebooru/i) || params[:safe_mode].to_s.truthy? || CurrentUser.user.enable_safe_mode? CurrentUser.safe_mode = safe_mode