暴漏server对象

pull/10/head
undefined 4 years ago
parent 0194ab4eb0
commit e66d5a0221

@ -61,7 +61,7 @@ class DiscussionHandler extends Handler {
// TODO(twd2): do more visibility check eg. contest
// TODO(twd2): exclude problem/contest discussions?
// TODO(iceboy): continuation based pagination.
if (ObjectID.isValid(name)) name = new ObjectID(name);
if (ObjectID.isValid(name.toString())) name = new ObjectID(name);
this.vnode = await discussion.getVnode(domainId, typeMapper[type], name, this);
if (this.ddoc) {
this.ddoc.parentType = this.ddoc.parentType || this.vnode.type;

@ -351,6 +351,9 @@ class ProblemSettingsHandler extends ProblemManageHandler {
[this.pdoc.title, 'problem_detail', { pid }, true],
['problem_settings', null],
];
if (this.response.body.config) {
this.response.body.config = yaml.safeDump(this.response.body.config);
}
}
@param('pid', Types.String, null, parsePid)
@ -386,7 +389,6 @@ class ProblemEditHandler extends ProblemManageHandler {
[this.pdoc.title, 'problem_detail', { pid }, true],
['problem_edit', null],
];
this.response.body.page_name = 'problem_edit';
}
@param('title', Types.String, isTitle)
@ -395,7 +397,7 @@ class ProblemEditHandler extends ProblemManageHandler {
const pid = checkPid(this.request.body.pid);
const pdoc = await problem.get(domainId, this.request.params.pid);
await problem.edit(domainId, pdoc.docId, { title, content, pid });
this.response.redirect = this.url('problem_detail', this.request.params.pid);
this.response.redirect = this.url('problem_detail', { pid: this.request.params.pid });
}
}

@ -124,7 +124,7 @@ class RecordMainConnectionHandler extends RecordConnectionHandler {
this.domainId, { _id: { $in: rids } },
).toArray();
for (const rdoc of rdocs) {
this.onRecordChange({ value: rdoc });
this.onRecordChange({ value: { rdoc } });
}
}
}

@ -160,6 +160,8 @@ export function getNode(domainId: string, _id: string) {
export async function getVnode(domainId: string, type: number, id: string, handler: any) {
if (type === document.TYPE_PROBLEM) {
// @ts-ignore
if (Number.isSafeInteger(parseInt(id, 10))) id = parseInt(id, 10);
const pdoc = await problem.get(domainId, id);
if (!pdoc) return null;
if (pdoc.hidden && handler) handler.checkPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN);

@ -14,6 +14,7 @@ export let db: mongodb.Db = null;
mongodb.MongoClient.connect(mongourl, { useNewUrlParser: true, useUnifiedTopology: true })
.then((Client) => {
db = Client.db(opts.name);
global.Hydro.service.db.db = db;
bus.publish('system_database_connected', null);
});

@ -32,9 +32,9 @@ import * as blacklist from '../model/blacklist';
import * as token from '../model/token';
import * as opcount from '../model/opcount';
const app = new Koa();
const server = http.createServer(app.callback());
const router = new Router();
export const app = new Koa();
export const server = http.createServer(app.callback());
export const router = new Router();
type MethodDecorator = (target: any, name: string, obj: any) => any;
type Converter = (value: any) => any;
@ -705,7 +705,8 @@ export function Connection(
RouteConnHandler: any,
...permPrivChecker: Array<number | bigint | Function>
) {
const sock = sockjs.createServer({ prefix, log: (a, b) => console.log(a, b) });
const log = argv.debug ? console.log : () => { };
const sock = sockjs.createServer({ prefix, log });
const checker = Checker(permPrivChecker);
sock.on('connection', async (conn) => {
const h: Dictionary<any> = new RouteConnHandler(conn);
@ -757,6 +758,9 @@ export async function start() {
global.Hydro.service.server = {
Types,
app,
server,
router,
param,
multipart,
requireCsrfToken,

@ -1,6 +1,6 @@
{
"name": "hydrooj",
"version": "2.11.5",
"version": "2.11.7",
"main": "dist/loader.js",
"bin": "bin/hydrooj.js",
"repository": "https://github.com/hydro-dev/Hydro.git",

Loading…
Cancel
Save