diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index a7e04f2c5..61ed3ce1c 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.1.14", + "version": "3.1.15", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/handler/contest.ts b/packages/hydrooj/src/handler/contest.ts index 9d57e7b67..b7248b128 100644 --- a/packages/hydrooj/src/handler/contest.ts +++ b/packages/hydrooj/src/handler/contest.ts @@ -18,6 +18,33 @@ import user from '../model/user'; import { Handler, param, Route, Types, } from '../service/server'; +import { registerResolver, registerValue } from './api'; + +registerValue('Contest', [ + ['_id', 'ObjectID!'], + ['domainId', 'String!'], + ['docId', 'ObjectID!'], + ['owner', 'Int!'], + ['beginAt', 'Date!'], + ['title', 'String!'], + ['content', 'String!'], + ['beginAt', 'Date!'], + ['endAt', 'Date!'], + ['attend', 'Int!'], + ['pids', '[Int]!'], + ['rated', 'Boolean!'], +]); + +registerResolver( + 'Query', 'contest(id: ObjectID!)', 'Contest', + async (arg, ctx) => { + arg.id = new ObjectID(arg.id); + ctx.tdoc = await contest.get(ctx.domainId, new ObjectID(arg.id)); + if (!ctx.tdoc) throw new ContestNotFoundError(ctx.domainId, arg.id); + return ctx.tdoc; + }, + 'Get a contest by ID', +); export class ContestListHandler extends Handler { @param('rule', Types.Range(contest.RULES), true) diff --git a/packages/hydrooj/src/handler/misc.ts b/packages/hydrooj/src/handler/misc.ts index 8e7fac3ef..eec805dec 100644 --- a/packages/hydrooj/src/handler/misc.ts +++ b/packages/hydrooj/src/handler/misc.ts @@ -106,7 +106,7 @@ export class FSDownloadHandler extends Handler { this.response.etag = file.etag; this.response.body = await storage.get(target); this.response.type = file['Content-Type'] || type; - this.response.disposition = `attachment; filename=${encodeURIComponent(filename)}`; + if (!noDisposition) this.response.disposition = `attachment; filename=${encodeURIComponent(filename)}`; } else { this.response.redirect = await storage.signDownloadLink( target, noDisposition ? undefined : filename, false, 'user', diff --git a/packages/ui-default/entry.js b/packages/ui-default/entry.js index 59f9018f7..d05984d7f 100644 --- a/packages/ui-default/entry.js +++ b/packages/ui-default/entry.js @@ -23,8 +23,8 @@ console.log( document.addEventListener('DOMContentLoaded', () => { window.UiContext = JSON.parse(window.UiContext); - // eslint-disable-next-line - try { __webpack_public_path__ = UiContext.cdn_prefix } catch (e) { } + // eslint-disable-next-line camelcase + try { __webpack_public_path__ = UiContext.cdn_prefix; } catch (e) { } // Locale & langs const { version, payload } = JSON.parse(localStorage.getItem('hydro-constant') || '{}'); diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index db13e8d46..4502d0244 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.26.8", + "version": "4.26.9", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js", diff --git a/packages/ui-default/pages/api.page.tsx b/packages/ui-default/pages/api.page.tsx index 6583d6f4e..23e7874b5 100644 --- a/packages/ui-default/pages/api.page.tsx +++ b/packages/ui-default/pages/api.page.tsx @@ -26,7 +26,7 @@ const page = new NamedPage('api', async () => { defaultQuery={defaultQuery} fetcher={async (graphQLParams) => { const data = await fetch( - '/api', + '', { method: 'POST', headers: {