core: import.syzoj: async

This commit is contained in:
undefined committed 2020-12-23 18:07:44 +08:00
1 parent b7330b05d1
commit e3dad8ff60
6 files changed
+29 -17

No files matched your search

+1 -1
View File
@@ -26,7 +26,7 @@
"@typescript-eslint/eslint-plugin": "^3.9.1", "@typescript-eslint/eslint-plugin": "^3.9.1",
"@typescript-eslint/parser": "^3.9.1", "@typescript-eslint/parser": "^3.9.1",
"cross-spawn": "^7.0.3", "cross-spawn": "^7.0.3",
"eslint": "^7.14.0", "eslint": "^7.16.0",
"eslint-config-airbnb-base": "^14.2.1", "eslint-config-airbnb-base": "^14.2.1",
"eslint-import-resolver-typescript": "^2.3.0", "eslint-import-resolver-typescript": "^2.3.0",
"eslint-plugin-import": "^2.22.1", "eslint-plugin-import": "^2.22.1",
+2 -2
View File
@@ -7,14 +7,14 @@
"repository": "https://github.com/hydro-dev/Hydro.git", "repository": "https://github.com/hydro-dev/Hydro.git",
"dependencies": { "dependencies": {
"adm-zip": "^0.5.1", "adm-zip": "^0.5.1",
"axios": "^0.21.0", "axios": "^0.21.1",
"bson": "^4.2.2", "bson": "^4.2.2",
"fs-extra": "^9.0.1", "fs-extra": "^9.0.1",
"js-yaml": "^3.14.1", "js-yaml": "^3.14.1",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"p-queue": "^6.6.1", "p-queue": "^6.6.1",
"shell-quote": "^1.7.2", "shell-quote": "^1.7.2",
"systeminformation": "^4.32.0", "systeminformation": "^4.33.1",
"yargs": "^16.2.0" "yargs": "^16.2.0"
}, },
"peerDependencies": { "peerDependencies": {
+3 -3
View File
@@ -1,6 +1,6 @@
{ {
"name": "hydrooj", "name": "hydrooj",
"version": "2.15.5", "version": "2.15.6",
"bin": "bin/hydrooj.js", "bin": "bin/hydrooj.js",
"main": "dist/loader.js", "main": "dist/loader.js",
"typings": "dist/loader.d.ts", "typings": "dist/loader.d.ts",
@@ -24,7 +24,7 @@
"koa-static-cache": "^5.1.3", "koa-static-cache": "^5.1.3",
"lodash": "^4.17.20", "lodash": "^4.17.20",
"lru-cache": "^6.0.0", "lru-cache": "^6.0.0",
"minio": "7.0.17", "minio": "7.0.18",
"moment-timezone": "^0.5.32", "moment-timezone": "^0.5.32",
"mongodb": "^3.6.3", "mongodb": "^3.6.3",
"nodemailer": "^6.4.17", "nodemailer": "^6.4.17",
@@ -32,7 +32,7 @@
"serialize-javascript": "^5.0.1", "serialize-javascript": "^5.0.1",
"sockjs": "^0.3.20", "sockjs": "^0.3.20",
"superagent": "^6.1.0", "superagent": "^6.1.0",
"systeminformation": "^4.32.0", "systeminformation": "^4.33.1",
"terminal-kit": "^1.44.0", "terminal-kit": "^1.44.0",
"yargs": "^16.2.0" "yargs": "^16.2.0"
}, },
+11 -8
View File
@@ -12,7 +12,7 @@ import type { ContentNode } from '../interface';
import * as problem from '../model/problem'; import * as problem from '../model/problem';
import { PERM } from '../model/builtin'; import { PERM } from '../model/builtin';
import { import {
Route, Handler, Types, param, post, Route, Handler, Types, post,
} from '../service/server'; } from '../service/server';
import storage from '../service/storage'; import storage from '../service/storage';
import { isPid } from '../lib/validator'; import { isPid } from '../lib/validator';
@@ -212,8 +212,8 @@ class ProblemImportSYZOJHandler extends Handler {
} }
@post('url', Types.String, true) @post('url', Types.String, true)
@param('pid', Types.String, true, isPid) @post('pid', Types.String, true, isPid)
@param('hidden', Types.Boolean) @post('hidden', Types.Boolean)
@post('prefix', Types.String, true) @post('prefix', Types.String, true)
@post('start', Types.UnsignedInt, true) @post('start', Types.UnsignedInt, true)
@post('end', Types.UnsignedInt, true) @post('end', Types.UnsignedInt, true)
@@ -226,16 +226,19 @@ class ProblemImportSYZOJHandler extends Handler {
const base = `${prefix}${start}/`; const base = `${prefix}${start}/`;
assert(base.match(RE_SYZOJ), new ValidationError('prefix')); assert(base.match(RE_SYZOJ), new ValidationError('prefix'));
const [, protocol, host] = RE_SYZOJ.exec(base); const [, protocol, host] = RE_SYZOJ.exec(base);
for (let i = start; i <= end; i++) { (async () => {
// eslint-disable-next-line no-await-in-loop for (let i = start; i <= end; i++) {
await this.v3(domainId, undefined, hidden, protocol, host, i, true); // eslint-disable-next-line no-await-in-loop
} await this.v3(domainId, undefined, hidden, protocol, host, i, true);
logger.info('%s %d-%d-%d', prefix, start, i, end);
}
})().catch(logger.error);
this.response.redirect = this.url('problem_main');
} else { } else {
assert(url.match(RE_SYZOJ), new ValidationError('url')); assert(url.match(RE_SYZOJ), new ValidationError('url'));
if (!url.endsWith('/')) url += '/'; if (!url.endsWith('/')) url += '/';
const [, protocol, host, n, pid] = RE_SYZOJ.exec(url); const [, protocol, host, n, pid] = RE_SYZOJ.exec(url);
if (n === 'p') { if (n === 'p') {
// SYZOJ-NG
const docId = await this.v3( const docId = await this.v3(
domainId, targetPid, hidden, domainId, targetPid, hidden,
protocol, host, pid, false, protocol, host, pid, false,
+5 -1
View File
@@ -5,8 +5,10 @@ import { safeDump } from 'js-yaml';
import db from './db'; import db from './db';
import * as bus from './bus'; import * as bus from './bus';
import * as sysinfo from '../lib/sysinfo'; import * as sysinfo from '../lib/sysinfo';
import { Logger } from '../logger';
const coll = db.collection('status'); const coll = db.collection('status');
const logger = new Logger('monitor');
function crypt(str: string) { function crypt(str: string) {
const cipher = crypto.createCipheriv('des-ecb', 'hydro-oj', ''); const cipher = crypto.createCipheriv('des-ecb', 'hydro-oj', '');
@@ -47,7 +49,9 @@ export async function feedback() {
cpu: inf.cpu, cpu: inf.cpu,
flags: inf.flags, flags: inf.flags,
})); }));
axios.post('https://feedback.undefined.moe/', { payload }); axios.post('https://feedback.undefined.moe/', { payload }).catch(() => {
logger.warn('Cannot connect to hydro center.');
});
} }
export async function update() { export async function update() {
+7 -2
View File
@@ -556,7 +556,10 @@ export class Handler {
const templateName = this.request.query.template || this.response.template; const templateName = this.request.query.template || this.response.template;
if (templateName) { if (templateName) {
this.response.body = this.response.body || {}; this.response.body = this.response.body || {};
await this.render(templateName, this.response.body); const s = templateName.split('.');
if (global.Hydro.ui.template[`${s[0]}.${this.domainId}.${s[1]}`]) {
await this.render(`${s[0]}.${this.domainId}.${s[1]}`, this.response.body);
} else await this.render(templateName, this.response.body);
} }
} }
} }
@@ -620,8 +623,9 @@ export class Handler {
async onerror(error: HydroError) { async onerror(error: HydroError) {
if (!error.msg) error.msg = () => error.message; if (!error.msg) error.msg = () => error.message;
if (error instanceof UserFacingError) error.stack = '';
if (!(error instanceof NotFoundError)) { if (!(error instanceof NotFoundError)) {
logger.error(error.msg(), error.params); logger.error(this.request.path, error.msg(), error.params);
logger.error(error.stack); logger.error(error.stack);
} }
this.response.status = error instanceof UserFacingError ? error.code : 500; this.response.status = error instanceof UserFacingError ? error.code : 500;
@@ -813,6 +817,7 @@ export class ConnectionHandler {
async message(message: any) { } // eslint-disable-line async message(message: any) { } // eslint-disable-line
onerror(err: HydroError) { onerror(err: HydroError) {
if (err instanceof UserFacingError) err.stack = this.conn.pathname;
if (!(err instanceof NotFoundError)) logger.error(err); if (!(err instanceof NotFoundError)) logger.error(err);
this.send({ this.send({
error: { error: {