From 01d6d48c749850883ca195c37aef288bf694afa4 Mon Sep 17 00:00:00 2001 From: undefined Date: Fri, 28 May 2021 22:52:12 +0800 Subject: [PATCH] core: add PRIV_SEND_MESSAGE --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/handler/home.ts | 1 + packages/hydrooj/src/model/builtin.ts | 1 + packages/hydrooj/src/model/problem.ts | 2 +- packages/hydrooj/src/upgrade.ts | 9 ++++++++- 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index c87032c19..b588cb713 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.28.1", + "version": "2.28.2", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/home.ts b/packages/hydrooj/src/handler/home.ts index 64f6dc0db..3faffe12f 100644 --- a/packages/hydrooj/src/handler/home.ts +++ b/packages/hydrooj/src/handler/home.ts @@ -372,6 +372,7 @@ class HomeMessagesHandler extends Handler { @param('uid', Types.Int) @param('content', Types.Content) async postSend(domainId: string, uid: number, content: string) { + this.checkPriv(PRIV.PRIV_SEND_MESSAGE); const udoc = await user.getById('system', uid); if (!udoc) throw new UserNotFoundError(uid); if (udoc.avatar) udoc.avatarUrl = avatar(udoc.avatar); diff --git a/packages/hydrooj/src/model/builtin.ts b/packages/hydrooj/src/model/builtin.ts index 47f1924dd..58fceb7b8 100644 --- a/packages/hydrooj/src/model/builtin.ts +++ b/packages/hydrooj/src/model/builtin.ts @@ -238,6 +238,7 @@ export const PRIV = { PRIV_VIEW_JUDGE_STATISTICS: 1 << 15, PRIV_UNLIMITED_ACCESS: 1 << 22, PRIV_VIEW_SYSTEM_NOTIFICATION: 1 << 23, + PRIV_SEND_MESSAGE: 1 << 24, PRIV_ALL: -1, PRIV_DEFAULT: 0, diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index fdf50262d..93b6d851f 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -248,7 +248,7 @@ export class ProblemModel { const ddocs = await Promise.all(Object.keys(parsed).map((i) => domain.get(i))); const f = ddocs.filter((i) => !( i.share === '*' - || (`,${i.share.replace(/,/g, ',').split(',').map((q) => q.trim()).join(',')},`).includes(`,${domainId},`) + || (`,${(i.share || '').replace(/,/g, ',').split(',').map((q) => q.trim()).join(',')},`).includes(`,${domainId},`) )); if (f.length) { if (doThrow) throw new ProblemNotFoundError(f[0]._id, parsed[f[0]._id][0].pid); diff --git a/packages/hydrooj/src/upgrade.ts b/packages/hydrooj/src/upgrade.ts index 1b75811eb..7b8b7fb4d 100644 --- a/packages/hydrooj/src/upgrade.ts +++ b/packages/hydrooj/src/upgrade.ts @@ -24,7 +24,7 @@ import * as discussion from './model/discussion'; import domain from './model/domain'; import * as document from './model/document'; import * as system from './model/system'; -import { STATUS } from './model/builtin'; +import { PRIV, STATUS } from './model/builtin'; import RecordModel from './model/record'; import StorageModel from './model/storage'; import { size } from './lib/misc'; @@ -398,6 +398,13 @@ const scripts: UpgradeScript[] = [ await iterateAllDomain((ddoc) => RecordModel.coll.updateMany({ domainId: ddoc._id }, { $set: { pdomain: ddoc._id } })); return true; }, + async function _30_31() { + const _FRESH_INSTALL_IGNORE = 1; + await iterateAllUser(async (udoc) => { + await user.setPriv(udoc._id, udoc.priv | PRIV.PRIV_SEND_MESSAGE); + }); + return true; + }, ]; export default scripts;