mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
core: send: 区分远端错误与本地错误
This commit is contained in:
1 parent
6f96e7fa9e
commit
f2fbbb8af9
4 files changed
+29
-10
No files matched your search
@@ -1,7 +1,8 @@
|
||||
/* eslint-disable no-await-in-loop */
|
||||
import superagent from 'superagent';
|
||||
import { PassThrough } from 'stream';
|
||||
import { PermissionError, InvalidTokenError } from '../error';
|
||||
import { PermissionError, InvalidTokenError, RemoteOnlineJudgeError } from '../error';
|
||||
import { Logger } from '../logger';
|
||||
import { ProblemAdd } from '../lib/ui';
|
||||
import { PERM } from '../model/builtin';
|
||||
import * as token from '../model/token';
|
||||
@@ -11,6 +12,9 @@ import {
|
||||
Handler, Types, Route, post,
|
||||
} from '../service/server';
|
||||
import storage from '../service/storage';
|
||||
import { logAndReturn } from '../utils';
|
||||
|
||||
const logger = new Logger('remote');
|
||||
|
||||
export class ProblemSendHandler extends Handler {
|
||||
async get() {
|
||||
@@ -23,10 +27,13 @@ export class ProblemSendHandler extends Handler {
|
||||
target = target.split('@');
|
||||
const getHidden = this.user.hasPerm(PERM.PERM_VIEW_PROBLEM_HIDDEN);
|
||||
const getData = this.user.hasPerm(PERM.PERM_READ_PROBLEM_DATA);
|
||||
const pdocs = await problem.getList(domainId, _pids, getHidden, true, ['docId', 'owner']);
|
||||
const pdocs = await problem.getList(domainId, _pids, true, true, ['docId', 'owner', 'hidden']);
|
||||
const pids = new Set<number>();
|
||||
for (const key in pdocs) {
|
||||
pids.add(pdocs[key].docId);
|
||||
if (pdocs[key].hidden && !getHidden && pdocs[key].owner !== this.user._id) {
|
||||
throw new PermissionError(PERM.PERM_VIEW_PROBLEM_HIDDEN);
|
||||
}
|
||||
if (!getData && pdocs[key].owner !== this.user._id) {
|
||||
throw new PermissionError(PERM.PERM_READ_PROBLEM_DATA);
|
||||
}
|
||||
@@ -36,7 +43,7 @@ export class ProblemSendHandler extends Handler {
|
||||
await superagent.post(`${target[1]}/d/${target[0]}/problem/receive`)
|
||||
.send({
|
||||
operation: 'request', url: `${url}d/${domainId}/problem/send`, tokenId, expire,
|
||||
});
|
||||
}).catch(logAndReturn(logger));
|
||||
this.back();
|
||||
}
|
||||
|
||||
@@ -87,7 +94,9 @@ export class ProblemReceiveHandler extends Handler {
|
||||
@post('expire', Types.UnsignedInt)
|
||||
async postRequest(domainId: string, url: string, tokenId: string, expire: number) {
|
||||
const res = await superagent.post(url)
|
||||
.send({ operation: 'info', token: tokenId });
|
||||
.send({ operation: 'info', token: tokenId })
|
||||
.catch(logAndReturn(logger));
|
||||
if (res instanceof Error) throw new RemoteOnlineJudgeError(res.message);
|
||||
const [id] = await token.add(token.TYPE_IMPORT, expire, {
|
||||
domainId, tokenId, source: url, pdocs: res.body.pdocs, pids: res.body.pids,
|
||||
});
|
||||
@@ -117,7 +126,8 @@ export class ProblemReceiveHandler extends Handler {
|
||||
operation: 'fetch',
|
||||
token: data.tokenId,
|
||||
pids: filterPid.length ? filterPid.map((i) => (+i ? +i : i)) : data.pids,
|
||||
});
|
||||
}).catch(logAndReturn(logger));
|
||||
if (res instanceof Error) throw new RemoteOnlineJudgeError(res.message);
|
||||
const tasks = [];
|
||||
const pids = [];
|
||||
const { pdocs } = res.body;
|
||||
|
||||
Reference in new issue
Block a user