mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
core: fix #1078
This commit is contained in:
3 files changed
+4
-38
No files matched your search
@@ -253,42 +253,6 @@ export function findFileSync(pathname: string, doThrow: boolean | Error = true)
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function retry<Arg extends any[], Ret>(func: (...args: Arg) => Ret, ...args: Arg): Promise<Ret>;
|
|
||||||
export async function retry<Arg extends any[], Ret>(times: number, func: (...args: Arg) => Ret, ...args: Arg): Promise<Ret>;
|
|
||||||
// eslint-disable-next-line consistent-return
|
|
||||||
export async function retry(arg0: number | ((...args: any[]) => any), func: any, ...args: any[]): Promise<any> {
|
|
||||||
let res;
|
|
||||||
if (typeof arg0 !== 'number') {
|
|
||||||
args = [func, ...args];
|
|
||||||
func = arg0;
|
|
||||||
arg0 = 3;
|
|
||||||
}
|
|
||||||
for (let i = 1; i <= arg0; i++) {
|
|
||||||
try {
|
|
||||||
// eslint-disable-next-line no-await-in-loop
|
|
||||||
res = await func(...args);
|
|
||||||
} catch (e) {
|
|
||||||
if (i === arg0) throw e;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function CallableInstance(property = '__call__') {
|
|
||||||
let func;
|
|
||||||
if (typeof property === 'function') func = property;
|
|
||||||
else func = this.constructor.prototype[property];
|
|
||||||
const apply = function __call__(...args) { return func.apply(apply, ...args); };
|
|
||||||
Object.setPrototypeOf(apply, this.constructor.prototype);
|
|
||||||
for (const p of Object.getOwnPropertyNames(func)) {
|
|
||||||
Object.defineProperty(apply, p, Object.getOwnPropertyDescriptor(func, p));
|
|
||||||
}
|
|
||||||
return apply;
|
|
||||||
}
|
|
||||||
|
|
||||||
CallableInstance.prototype = Object.create(Function.prototype);
|
|
||||||
|
|
||||||
export const htmlEncode = (str: string) => str.replace(/[&<>'"]/g,
|
export const htmlEncode = (str: string) => str.replace(/[&<>'"]/g,
|
||||||
(tag: string) => ({
|
(tag: string) => ({
|
||||||
'&': '&',
|
'&': '&',
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ export class ProblemMainHandler extends Handler {
|
|||||||
for (const pid of pids) {
|
for (const pid of pids) {
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
const pdoc = await problem.get(domainId, pid);
|
const pdoc = await problem.get(domainId, pid);
|
||||||
|
if (!pdoc) throw new ProblemNotFoundError(domainId, pid);
|
||||||
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
|
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
await problem.edit(domainId, pid, { hidden: true });
|
await problem.edit(domainId, pid, { hidden: true });
|
||||||
@@ -266,6 +267,7 @@ export class ProblemMainHandler extends Handler {
|
|||||||
for (const pid of pids) {
|
for (const pid of pids) {
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
const pdoc = await problem.get(domainId, pid);
|
const pdoc = await problem.get(domainId, pid);
|
||||||
|
if (!pdoc) throw new ProblemNotFoundError(domainId, pid);
|
||||||
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
|
if (!this.user.own(pdoc, PERM.PERM_EDIT_PROBLEM_SELF)) this.checkPerm(PERM.PERM_EDIT_PROBLEM);
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
await problem.edit(domainId, pid, { hidden: false });
|
await problem.edit(domainId, pid, { hidden: false });
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Dictionary } from 'lodash';
|
|||||||
import moment from 'moment-timezone';
|
import moment from 'moment-timezone';
|
||||||
import Schema from 'schemastery';
|
import Schema from 'schemastery';
|
||||||
import { LangConfig, parseLang } from '@hydrooj/common';
|
import { LangConfig, parseLang } from '@hydrooj/common';
|
||||||
import { findFileSync, randomstring, retry } from '@hydrooj/utils';
|
import { findFileSync, randomstring } from '@hydrooj/utils';
|
||||||
import { Context } from '../context';
|
import { Context } from '../context';
|
||||||
import { Setting as _Setting } from '../interface';
|
import { Setting as _Setting } from '../interface';
|
||||||
import { Logger } from '../logger';
|
import { Logger } from '../logger';
|
||||||
@@ -386,7 +386,7 @@ export async function apply(ctx: Context) {
|
|||||||
if (!setting.value) continue;
|
if (!setting.value) continue;
|
||||||
const current = await ctx.db.collection('system').findOne({ _id: setting.key });
|
const current = await ctx.db.collection('system').findOne({ _id: setting.key });
|
||||||
if (!current || current.value == null || current.value === '') {
|
if (!current || current.value == null || current.value === '') {
|
||||||
await retry(system.set, setting.key, setting.value);
|
await system.set(setting.key, setting.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in new issue
Block a user