From 8d75bb1b68b5ba527d251c491eb6476d2d988389 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 10 Oct 2024 10:04:28 +0800 Subject: [PATCH] core: replace detect-browser with ua-parser-js --- packages/hydrooj/package.json | 4 ++-- packages/hydrooj/src/handler/home.ts | 9 ++++++--- packages/hydrooj/src/lib/useragent.ts | 5 ----- packages/ui-default/backendlib/template.ts | 7 +++++++ packages/ui-default/templates/home_security.html | 6 +++--- 5 files changed, 18 insertions(+), 13 deletions(-) delete mode 100644 packages/hydrooj/src/lib/useragent.ts diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 94c38e893..7b024a057 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -25,7 +25,6 @@ "adm-zip": "0.5.14", "cac": "^6.7.14", "cordis": "3.18.1", - "detect-browser": "^5.3.0", "emoji-regex": "^10.4.0", "emojis-list": "2.1.0", "fs-extra": "^11.2.0", @@ -51,7 +50,8 @@ "shorty.js": "^1.0.1", "superagent": "^10.1.0", "tar": "6.2.1", - "thirty-two": "^1.0.2" + "thirty-two": "^1.0.2", + "ua-parser-js": "^1.0.39" }, "devDependencies": { "@types/adm-zip": "^0.4.34", diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index fa42f38ff..d2eefa4e1 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -3,6 +3,7 @@ import { generateRegistrationOptions, verifyRegistrationResponse } from '@simple import yaml from 'js-yaml'; import { pick } from 'lodash'; import { Binary, ObjectId } from 'mongodb'; +import Parser from 'ua-parser-js'; import { Context } from '../context'; import { AuthOperationError, BlacklistedError, DomainAlreadyExistsError, InvalidTokenError, @@ -12,7 +13,6 @@ import { import { DomainDoc, MessageDoc, Setting } from '../interface'; import avatar, { validate } from '../lib/avatar'; import * as mail from '../lib/mail'; -import * as useragent from '../lib/useragent'; import { verifyTFA } from '../lib/verifyTFA'; import BlackListModel from '../model/blacklist'; import { PERM, PRIV } from '../model/builtin'; @@ -187,7 +187,11 @@ class HomeSecurityHandler extends Handler { for (const session of sessions) { session.isCurrent = session._id === this.session._id; session._id = md5(session._id); - session.updateUa = useragent.parse(session.updateUa || session.createUa || ''); + const ua = session.updateUa || session.createUa; + if (ua) { + const parser = new Parser(ua); + session.updateUaInfo = parser.getResult(); + } session.updateGeoip = this.ctx.geoip?.lookup?.( session.updateIp || session.createIp, this.translate('geoip_locale'), @@ -202,7 +206,6 @@ class HomeSecurityHandler extends Handler { 'authenticatorAttachment', 'regat', 'fmt', ])), geoipProvider: this.ctx?.geoip?.provider, - icon: (str = '') => str.split(' ')[0].toLowerCase(), }; } diff --git a/packages/hydrooj/src/lib/useragent.ts b/packages/hydrooj/src/lib/useragent.ts deleted file mode 100644 index 0dfb414d2..000000000 --- a/packages/hydrooj/src/lib/useragent.ts +++ /dev/null @@ -1,5 +0,0 @@ -import * as browser from 'detect-browser'; - -export function parse(str: string) { - return browser.parseUserAgent(str); -} diff --git a/packages/ui-default/backendlib/template.ts b/packages/ui-default/backendlib/template.ts index 7758a60dd..d2f679006 100644 --- a/packages/ui-default/backendlib/template.ts +++ b/packages/ui-default/backendlib/template.ts @@ -157,6 +157,13 @@ env.addGlobal('set', (obj, key, val) => { env.addGlobal('findSubModule', (prefix) => Object.keys(global.Hydro.ui.template).filter((n) => n.startsWith(prefix))); env.addGlobal('templateExists', (name) => !!global.Hydro.ui.template[name]); +const supportedPlatformIcons = ['android', 'chromeos', 'ios', 'linux', 'mac', 'mobile', 'windows']; +env.addGlobal('platformIcon', (platform) => { + const key = platform?.toLowerCase(); + if (supportedPlatformIcons.includes(key)) return key; + return 'unknown'; +}); + const render = (name: string, state: any) => new Promise((resolve, reject) => { env.render(name, { page_name: name.split('.')[0], diff --git a/packages/ui-default/templates/home_security.html b/packages/ui-default/templates/home_security.html index 406f933f5..ae47ea3d1 100644 --- a/packages/ui-default/templates/home_security.html +++ b/packages/ui-default/templates/home_security.html @@ -153,7 +153,7 @@
  • - +

    {{ _('Last Update At') }}: {{ datetimeSpan(session.updateAt)|safe }}

    @@ -161,8 +161,8 @@

    {{ _('Hostname') }}: {{ session.createHost }}

    {% endif %}

    {{ _('Location') }}: {{ _(session.updateGeoip.display) }} ({{ session.updateIp }})

    -

    {{ _('Operating System') }}: {{ session.updateUa.os }}

    -

    {{ _('Browser') }}: {{ session.updateUa.name }} {{ session.updateUa.version }}

    +

    {{ _('Operating System') }}: {{ session.updateUaInfo.os.name }} {{ session.updateUaInfo.os.version }}

    +

    {{ _('Browser') }}: {{ session.updateUaInfo.browser.name }} {{ session.updateUaInfo.browser.version }}

    {% if session.isCurrent %}

    {{ _('This is the current session') }}

    {% endif %}