From 998248e2125c8bbeb6c97450312b5a25ebd7e2b9 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 1 Aug 2021 17:48:55 +0800 Subject: [PATCH] core: add server.url check --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/check.ts | 10 ++++------ packages/hydrooj/src/service/server.ts | 4 ++-- packages/hydrooj/src/service/storage.ts | 7 ++++--- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 781cacec8..734f1c995 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.30.9", + "version": "2.30.10", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", diff --git a/packages/hydrooj/src/check.ts b/packages/hydrooj/src/check.ts index eecaf85b3..04ed06c9e 100644 --- a/packages/hydrooj/src/check.ts +++ b/packages/hydrooj/src/check.ts @@ -22,11 +22,7 @@ const checks: Dictionary = { error(`Mongo Error: Database read-write failed.\n${e.message}`); } }, - async checkPerm(ctx, log, warn) { - const { username } = os.userInfo(); - if (username === 'root') warn('Hydro should not be run as root.'); - // TODO check cwd read-write - }, + // TODO check storage async checkSystem(ctx, log, warn) { const platform = os.platform(); if (platform !== 'linux') { @@ -37,7 +33,9 @@ const checks: Dictionary = { const from = system.get('smtp.from'); if (!from) warn('SMTP account was not provided, email verification disabled.'); }, - async checkIpHeader(ctx, log, warn) { + async checkSetting(ctx, log, warn) { + const url = system.get('server.url'); + if (url === '/') warn("server.url wasn't set."); const header = system.get('server.xff'); if (header && !ctx.request.ip) warn('IP header seems incorrect.\nCheck dashboard>settings>server.'); }, diff --git a/packages/hydrooj/src/service/server.ts b/packages/hydrooj/src/service/server.ts index 4ba26e7a1..d13dab15b 100644 --- a/packages/hydrooj/src/service/server.ts +++ b/packages/hydrooj/src/service/server.ts @@ -386,7 +386,7 @@ export class Handler extends HandlerCommon { args: any; ctx: Koa.Context; - request: { + declare request: { method: string, host: string, hostname: string, @@ -747,7 +747,7 @@ export function Route(name: string, path: string, RouteHandler: any, ...permPriv export class ConnectionHandler extends HandlerCommon { conn: sockjs.Connection; args: Record; - request: { + declare request: { params: Record; headers: Record; ip: string; diff --git a/packages/hydrooj/src/service/storage.ts b/packages/hydrooj/src/service/storage.ts index 57bb61b94..4d34fd861 100644 --- a/packages/hydrooj/src/service/storage.ts +++ b/packages/hydrooj/src/service/storage.ts @@ -193,13 +193,14 @@ class StorageService { async signDownloadLink(target: string, filename?: string, noExpire = false, useAlternativeEndpointFor?: 'user' | 'judge'): Promise { if (target.includes('..') || target.includes('//')) throw new Error('Invalid path'); try { + const headers = {}; + if (filename) headers['response-content-disposition'] = `attachment; filename="${encodeRFC5987ValueChars(filename)}"`; + if (/\.(jpe?g|png|gif)$/i.test(target)) headers['cache-control'] = 'max-age=604800'; const url = await this.client.presignedGetObject( this.opts.bucket, target, noExpire ? 24 * 60 * 60 * 7 : 30 * 60, - filename - ? { 'response-content-disposition': `attachment; filename="${encodeRFC5987ValueChars(filename)}"` } - : {}, + headers, ); if (useAlternativeEndpointFor) return this.replaceWithAlternativeUrlFor[useAlternativeEndpointFor](url); return url;