61 lines
1.2 KiB
Ruby
61 lines
1.2 KiB
Ruby
require_dependency 'browser_detection'
|
|
require_dependency 'discourse_ip_info'
|
|
|
|
module UserAuthTokensMixin
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
attributes :id,
|
|
:client_ip,
|
|
:location,
|
|
:browser,
|
|
:device,
|
|
:os,
|
|
:icon,
|
|
:created_at
|
|
end
|
|
|
|
def client_ip
|
|
object.client_ip.to_s
|
|
end
|
|
|
|
def location
|
|
ipinfo = DiscourseIpInfo.get(client_ip, locale: I18n.locale)
|
|
|
|
location = [ipinfo[:city], ipinfo[:region], ipinfo[:country]].reject { |x| x.blank? }.join(", ")
|
|
return I18n.t('staff_action_logs.unknown') if location.blank?
|
|
|
|
location
|
|
end
|
|
|
|
def browser
|
|
val = BrowserDetection.browser(object.user_agent)
|
|
I18n.t("user_auth_tokens.browser.#{val}")
|
|
end
|
|
|
|
def device
|
|
val = BrowserDetection.device(object.user_agent)
|
|
I18n.t("user_auth_tokens.device.#{val}")
|
|
end
|
|
|
|
def os
|
|
val = BrowserDetection.os(object.user_agent)
|
|
I18n.t("user_auth_tokens.os.#{val}")
|
|
end
|
|
|
|
def icon
|
|
case BrowserDetection.os(object.user_agent)
|
|
when :android
|
|
'android'
|
|
when :macos, :ios
|
|
'apple'
|
|
when :linux
|
|
'linux'
|
|
when :windows
|
|
'windows'
|
|
else
|
|
'question'
|
|
end
|
|
end
|
|
end
|