diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 13798dc7..4dc9c788 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.39.19", + "version": "2.39.20", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index bc184d60..ca83abfa 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -154,6 +154,14 @@ DomainUserSetting( Setting('setting_storage', 'level', 0, 'number', 'level', null, FLAG_HIDDEN | FLAG_DISABLED), ); +const ignoreUA = [ + 'bingbot', + 'Gatus', + 'Googlebot', + 'Uptime', + 'YandexBot', +].join('\n'); + SystemSetting( Setting('setting_file', 'file.endPoint', 'http://127.0.0.1:9000', 'text', 'file.endPoint', 'Storage engine endPoint'), Setting('setting_file', 'file.accessKey', null, 'text', 'file.accessKey', 'Storage engine accessKey'), @@ -182,6 +190,7 @@ SystemSetting( Setting('setting_server', 'server.language', 'zh_CN', langRange, 'server.language', 'Default display language'), Setting('setting_server', 'server.login', true, 'boolean', 'server.login', 'Allow builtin-login', FLAG_PRO), Setting('setting_server', 'server.message', true, 'boolean', 'server.message', 'Allow users send messages'), + Setting('setting_server', 'server.ignoreUA', ignoreUA, 'textarea', 'server.ignoreUA', 'ignoredUA'), Setting('setting_limits', 'limit.problem_files_max', 100, 'number', 'limit.problem_files_max', 'Max files per problem'), Setting('setting_limits', 'limit.problem_files_size_max', 128 * 1024 * 1024, 'number', 'limit.problem_files_size_max', 'Max files size per problem'), Setting('setting_limits', 'limit.user_files', 100, 'number', 'limit.user_files', 'Max files for user'), diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index ab0bbfed..0c6a0b28 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -620,16 +620,18 @@ export class Handler extends HandlerCommon { } async saveCookie() { + const ua = this.request.headers['user-agent'] || ''; + if (!this.session.uid && system.get('server.ignoreUA').split('\n').filter((i) => i && ua.includes(i)).length) return; const expireSeconds = this.session.save ? system.get('session.saved_expire_seconds') : system.get('session.unsaved_expire_seconds'); const $update = { updateIp: this.request.ip, - updateUa: this.request.headers['user-agent'] || '', + updateUa: ua, }; const $create = { createIp: this.request.ip, - createUa: this.request.headers['user-agent'] || '', + createUa: ua, createHost: this.request.host, }; if (this.session._id) {