59 lines
1.2 KiB
Ruby
59 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
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)
|
|
ipinfo[:location].presence || I18n.t('staff_action_logs.unknown')
|
|
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
|
|
'fab-android'
|
|
when :macos, :ios
|
|
'fab-apple'
|
|
when :linux
|
|
'fab-linux'
|
|
when :windows
|
|
'fab-windows'
|
|
else
|
|
'question'
|
|
end
|
|
end
|
|
end
|