today_ai_weather/app/controllers/application_controller.rb

81 lines
2.5 KiB
Ruby
Raw Normal View History

2025-01-19 01:13:59 +08:00
class ApplicationController < ActionController::Base
include SeoConcern
2025-01-19 01:13:59 +08:00
# Only allow modern browsers supporting webp images, web push, badges, import maps, CSS nesting, and CSS :has.
2025-01-27 06:53:01 +08:00
# allow_browser versions: :modern
2025-01-27 08:23:44 +08:00
allow_browser versions: :modern,
patterns: [
/Mobile Safari/,
/Chrome\/[\d.]+/,
/Quark\/[\d.]+/,
/HuaweiBrowser\/[\d.]+/,
/MiuiBrowser\/[\d.]+/,
/VivoBrowser\/[\d.]+/,
/OppoBrowser\/[\d.]+/,
/UCBrowser\/[\d.]+/,
/QQBrowser\/[\d.]+/,
/MicroMessenger\/[\d.]+/,
/Alipay/,
/BaiduBoxApp/,
/baiduboxapp/i,
/SogouMobile/,
/Weibo/,
/DingTalk/,
/ToutiaoMicroApp/,
/BytedanceWebview/,
/ArkWeb/
2025-01-27 09:20:14 +08:00
],
on_failure: -> (browser) {
Rails.logger.warn <<~BROWSER_INFO
Browser Blocked:
User Agent: #{browser.ua}
Name: #{browser.name}
Version: #{browser.version}
Platform: #{browser.platform.name}
Device: #{browser.device.name}
Mobile: #{browser.mobile?}
Modern: #{browser.modern?}
Bot: #{browser.bot?}
BROWSER_INFO
}
before_action :set_locale
2025-01-27 09:00:54 +08:00
before_action :log_browser_info
after_action :track_action
2025-01-27 09:00:54 +08:00
def log_browser_info
# 构建详细的浏览器信息
browser_info = {
user_agent: request.user_agent,
path: request.path,
browser_name: browser.name,
browser_version: browser.version,
platform: browser.platform.name,
device: browser.device.name,
mobile: browser.mobile?,
tablet: browser.tablet?,
bot: browser.bot?,
matched_patterns: matched_browser_patterns,
timestamp: Time.current
}
# 使用 Rails.logger 记录信息both development and production
2025-01-27 09:14:19 +08:00
Rails.logger.info "Browser Info: #{browser_info.to_json}"
2025-01-27 09:00:54 +08:00
# 如果是被拦截的浏览器,记录额外信息
unless browser_allowed?
Rails.logger.warn "Browser Blocked: #{browser_info.to_json}"
end
end
protected
def track_action
ahoy.track "Viewed Application", request.path_parameters
end
private
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
2025-01-19 01:13:59 +08:00
end