From 875bf696e23efcb7ae38d70a080e454841969644 Mon Sep 17 00:00:00 2001 From: undefined Date: Thu, 30 Jul 2020 13:16:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8session=E6=97=A0=E6=95=88=E6=97=B6?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=87=B3guest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hydro/handler/manage.ts | 59 +++++++++++++++++++---------------------- hydro/model/user.ts | 9 +++++-- hydro/service/server.ts | 9 +++++++ package.json | 2 +- 4 files changed, 45 insertions(+), 34 deletions(-) diff --git a/hydro/handler/manage.ts b/hydro/handler/manage.ts index 275f652a7..a50a9486a 100644 --- a/hydro/handler/manage.ts +++ b/hydro/handler/manage.ts @@ -94,38 +94,35 @@ class SystemScriptHandler extends SystemHandler { const args = JSON.parse(raw); validate(global.Hydro.script[id].validate, args); const rid = await record.add(domainId, -1, this.user._id, '-', id, false, { input: 'raw' }); - judge.next({ domainId, rid, message: `Running script: ${id}` }); - async function report(data) { - judge.next({ domainId, rid, ...data }); - } - setTimeout(() => { - const start = new Date().getTime(); - global.Hydro.script[id].run(args, report) - .then((ret: any) => { - const time = new Date().getTime() - start; - judge.end({ - domainId, - rid, - status: STATUS.STATUS_ACCEPTED, - message: ret.toString(), - judger: 1, - time, - memory: 0, - }); - }) - .catch((err: Error) => { - const time = new Date().getTime() - start; - judge.end({ - domainId, - rid, - status: STATUS.STATUS_SYSTEM_ERROR, - message: `${err}\n${err.stack}`, - judger: 1, - time, - memory: 0, - }); + const report = (data) => judge.next({ domainId, rid, ...data }); + report({ message: `Running script: ${id}` }); + const start = new Date().getTime(); + // Maybe async? + global.Hydro.script[id].run(args, report) + .then((ret: any) => { + const time = new Date().getTime() - start; + judge.end({ + domainId, + rid, + status: STATUS.STATUS_ACCEPTED, + message: ret.toString(), + judger: 1, + time, + memory: 0, }); - }, 300); + }) + .catch((err: Error) => { + const time = new Date().getTime() - start; + judge.end({ + domainId, + rid, + status: STATUS.STATUS_SYSTEM_ERROR, + message: `${err}\n${err.stack}`, + judger: 1, + time, + memory: 0, + }); + }); this.response.body = { rid }; this.response.redirect = this.url('record_detail', { rid }); } diff --git a/hydro/model/user.ts b/hydro/model/user.ts index 0174f8150..bc0889c5b 100644 --- a/hydro/model/user.ts +++ b/hydro/model/user.ts @@ -210,8 +210,13 @@ export async function getPrefixList(prefix: string, limit = 50) { return udocs; } -export function setPriv(uid: number, priv: number) { - return coll.findOneAndUpdate({ _id: uid }, { $set: priv }, { returnOriginal: false }); +export async function setPriv(uid: number, priv: number) { + const udoc = await coll.findOneAndUpdate( + { _id: uid }, + { $set: { priv } }, + { returnOriginal: false }, + ); + return udoc.value; } export function ban(uid: number) { diff --git a/hydro/service/server.ts b/hydro/service/server.ts index 2ae9929dc..84e1f4d28 100644 --- a/hydro/service/server.ts +++ b/hydro/service/server.ts @@ -380,6 +380,15 @@ export class Handler { token.TYPE_TOKEN, 600, { uid: this.session.uid, domainId }, ), ]); + if (!this.user) { + this.session.uid = 0; + [this.user, this.UIContext.token] = await Promise.all([ + user.getById(domainId, this.session.uid), + token.createOrUpdate( + token.TYPE_TOKEN, 600, { uid: this.session.uid, domainId }, + ), + ]); + } this.csrfToken = this.getCsrfToken(this.session._id || String.random(32)); this.UIContext.csrfToken = this.csrfToken; } diff --git a/package.json b/package.json index df1d68534..48e5f8986 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.10.10", + "version": "2.10.11", "main": "dist/loader.js", "bin": "bin/hydrooj.js", "repository": "https://github.com/hydro-dev/Hydro.git",