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