diff --git a/packages/geoip/test/lib.spec.ts b/packages/geoip/test/lib.spec.ts deleted file mode 100644 index 673e709de..000000000 --- a/packages/geoip/test/lib.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import 'hydrooj'; -import 'hydrooj/src/lib/i18n'; - -let lib; -try { - lib = require('@hydrooj/geoip/lib'); -} catch (e) { - console.warn('Maxmind db load fail'); -} - -describe('geoip', () => { - test('lookup', () => { - if (lib) { - expect(lib.lookup('127.0.0.1', 'zh_CN').display).toStrictEqual('Unknown address'); - expect(lib.lookup('1.1.1.1', 'zh-CN').display).toStrictEqual('大洋洲 澳大利亚'); - expect(lib.provider.includes('MaxMind')).toBeTruthy(); - } - }); -}); diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index cc1cbebd6..dc787fb00 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.24.8", + "version": "2.24.9", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/user.ts b/packages/hydrooj/src/handler/user.ts index a2169e742..4eb0bae3f 100644 --- a/packages/hydrooj/src/handler/user.ts +++ b/packages/hydrooj/src/handler/user.ts @@ -237,12 +237,16 @@ class UserSearchHandler extends Handler { @param('q', Types.String) @param('exectMatch', Types.Boolean) async get(domainId: string, q: string, exactMatch = false) { - let udoc = await user.getById(domainId, parseInt(q, 10)); + let udoc = await user.getById(domainId, +q); const udocs: User[] = udoc ? [udoc] : []; - udoc = await user.getByUname(domainId, q); - if (udoc) udocs.push(udoc); - udoc = await user.getByEmail(domainId, q); - if (udoc) udocs.push(udoc); + if (!udocs.length) { + udoc = await user.getByUname(domainId, q); + if (udoc) udocs.push(udoc); + else { + udoc = await user.getByEmail(domainId, q); + if (udoc) udocs.push(udoc); + } + } if (!exactMatch) udocs.push(...await user.getPrefixList(domainId, q, 20)); for (const i in udocs) { udocs[i].avatarUrl = avatar(udocs[i].avatar); diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index 4b345443a..174fc9a0e 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -276,11 +276,11 @@ class UserModel { @ArgMethod static async getPrefixList(domainId: string, prefix: string, limit: number = 50) { prefix = prefix.toLowerCase(); - const $regex = new RegExp(`^${escapeRegExp(prefix)}`, 'gmi'); - const uids = await coll.find({ unameLower: { $regex } }) - .limit(limit).map((doc) => doc._id).toArray(); + const $regex = new RegExp(`\\A${escapeRegExp(prefix)}`, 'gmi'); + const udocs = await coll.find({ unameLower: { $regex } }) + .limit(limit).project({ _id: 1 }).toArray(); const users = []; - for (const uid of uids) users.push(UserModel.getById(domainId, uid)); + for (const { _id } of udocs) users.push(UserModel.getById(domainId, _id)); return await Promise.all(users); }