From 3aadb9511d93281ab52755c63670f489ce7af692 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 21 Mar 2021 18:22:15 +0800 Subject: [PATCH] core: allow setting priv_default --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/domain.ts | 4 ++-- packages/hydrooj/src/model/setting.ts | 2 ++ packages/hydrooj/src/model/user.ts | 2 +- packages/migrate-hustoj/script.ts | 6 ++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index c686e501..c5b186d0 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.20.25", + "version": "2.20.26", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/model/domain.ts b/packages/hydrooj/src/model/domain.ts index 5a7d2b28..cab21644 100644 --- a/packages/hydrooj/src/model/domain.ts +++ b/packages/hydrooj/src/model/domain.ts @@ -168,7 +168,7 @@ class DomainModel { } static setMultiUserInDomain(domainId: string, query: any, params: any) { - return collUser.updateMany({ domainId, ...query }, { $set: params }); + return collUser.updateMany({ domainId, ...query }, { $set: params }, { upsert: true }); } static getMultiUserInDomain(domainId: string, query: any = {}) { @@ -176,7 +176,7 @@ class DomainModel { } static setUserInDomain(domainId: string, uid: number, params: any) { - return collUser.updateOne({ domainId, uid }, { $set: params }); + return collUser.updateOne({ domainId, uid }, { $set: params }, { upsert: true }); } @ArgMethod diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index e1d5f9e8..d5d3ec60 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -38,6 +38,7 @@ export const DOMAIN_USER_SETTINGS_BY_KEY: SettingDict = {}; export const DOMAIN_SETTINGS_BY_KEY: SettingDict = {}; export const SYSTEM_SETTINGS_BY_KEY: SettingDict = {}; +// eslint-disable-next-line max-len export type SettingType = 'text' | 'yaml' | 'number' | 'markdown' | 'password' | 'boolean' | 'textarea' | [string, string][] | Record; export const Setting = ( @@ -160,6 +161,7 @@ SystemSetting( Setting('setting_server', 'server.xff', null, 'text', 'IP Header', 'e.g. x-forwarded-for (lowercase)'), Setting('setting_server', 'server.language', 'zh_CN', langRange, 'Default display language'), Setting('setting_server', 'server.login', true, 'boolean', 'Allow builtin-login'), + Setting('setting_basic', 'default.priv', builtin.PRIV.PRIV_DEFAULT, 'number', 'Default Privilege'), Setting('setting_basic', 'problem.categories', builtin.CATEGORIES, 'yaml', 'Problem Categories'), Setting('setting_basic', 'lang.texts', builtin.LANG_TEXTS, 'yaml', 'LANG_TEXTS'), Setting('setting_basic', 'pagination.problem', 100, 'number', 'Problems per page'), diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index f0d4d2d2..6241adbf 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -195,7 +195,7 @@ class UserModel { @ArgMethod static async create( mail: string, uname: string, password: string, - uid: number = 0, regip: string = '127.0.0.1', priv: number = PRIV.PRIV_DEFAULT, + uid: number = 0, regip: string = '127.0.0.1', priv: number = system.get('default.priv'), ) { const salt = String.random(); if (!uid) uid = await system.inc('user'); diff --git a/packages/migrate-hustoj/script.ts b/packages/migrate-hustoj/script.ts index d9b6f841..689f2715 100644 --- a/packages/migrate-hustoj/script.ts +++ b/packages/migrate-hustoj/script.ts @@ -4,9 +4,7 @@ import mysql from 'mysql'; import 'hydrooj'; import { buildContent } from 'hydrooj/dist/lib/content'; -const { - user, problem, builtin: { PRIV }, -} = global.Hydro.model; +const { user, problem, system } = global.Hydro.model; export async function run({ host = 'localhost', port = 27017, name = 'vijos4', username, password, @@ -45,7 +43,7 @@ export async function run({ const [udocs] = await query('SELECT * FROM `users`'); for (const udoc of udocs) { - const uid = await user.create(udoc.email, udoc.nick, '', null, udoc.ip, udoc.defunct === 'Y' ? 0 : PRIV.PRIV_DEFAULT); + const uid = await user.create(udoc.email, udoc.nick, '', null, udoc.ip, udoc.defunct === 'Y' ? 0 : system.get('default.priv')); uidMap[udoc.uid] = uid; await user.setById(uid, { nSubmit: udoc.submit,