From fa7eddb50adb13d01be9a6537f52aad6f5f48fc8 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Sun, 25 Feb 2024 21:20:57 +0800 Subject: [PATCH] fix: add reject error --- lib/errors/index.ts | 7 ++++--- lib/errors/reject.ts | 3 +++ lib/middleware/access-control.ts | 11 +++++------ lib/middleware/cache.ts | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 lib/errors/reject.ts diff --git a/lib/errors/index.ts b/lib/errors/index.ts index 1e1af8b45..055300e9a 100644 --- a/lib/errors/index.ts +++ b/lib/errors/index.ts @@ -1,5 +1,4 @@ import { type ErrorHandler } from 'hono'; -import _RequestInProgressError from './request-in-progress'; import { getDebugInfo, setDebugInfo } from '@/utils/debug-info'; import { config } from '@/config'; import Sentry from '@sentry/node'; @@ -8,7 +7,8 @@ import art from 'art-template'; import * as path from 'node:path'; import gitHash from '@/utils/git-hash'; -export const RequestInProgressError = _RequestInProgressError; +import RequestInProgressError from './request-in-progress'; +import RejectError from './reject'; export const errorHandler: ErrorHandler = (error, ctx) => { let message = ''; @@ -46,7 +46,8 @@ export const errorHandler: ErrorHandler = (error, ctx) => { ctx.status(503); message = error.message; ctx.set('Cache-Control', `public, max-age=${config.cache.requestTimeout}`); - } else if (ctx.res.status === 403) { + } else if (error instanceof RejectError) { + ctx.status(403); message = error.message; } else { ctx.status(404); diff --git a/lib/errors/reject.ts b/lib/errors/reject.ts new file mode 100644 index 000000000..629648226 --- /dev/null +++ b/lib/errors/reject.ts @@ -0,0 +1,3 @@ +class RejectError extends Error {} + +export default RejectError; diff --git a/lib/middleware/access-control.ts b/lib/middleware/access-control.ts index 159d46e10..9d119fa59 100644 --- a/lib/middleware/access-control.ts +++ b/lib/middleware/access-control.ts @@ -1,13 +1,12 @@ -import type { MiddlewareHandler, Context } from 'hono'; +import type { MiddlewareHandler } from 'hono'; import { config } from '@/config'; import md5 from '@/utils/md5'; import isLocalhost from 'is-localhost-ip'; import { getIp } from '@/utils/helpers'; +import RejectError from '@/errors/reject'; -const reject = (ctx: Context) => { - ctx.status(403); - - throw new Error('Authentication failed. Access denied.'); +const reject = () => { + throw new RejectError('Authentication failed. Access denied.'); }; const ipv4Pattern = /^(\d{1,3}\.){3}\d{1,3}$/; @@ -67,7 +66,7 @@ const middleware: MiddlewareHandler = async (ctx, next) => { return grant(); } - reject(ctx); + reject(); } }; diff --git a/lib/middleware/cache.ts b/lib/middleware/cache.ts index 73330228f..f57abfbd1 100644 --- a/lib/middleware/cache.ts +++ b/lib/middleware/cache.ts @@ -2,7 +2,7 @@ import xxhash from 'xxhash-wasm'; import type { MiddlewareHandler } from 'hono'; import { config } from '@/config'; -import { RequestInProgressError } from '@/errors'; +import RequestInProgressError from '@/errors/request-in-progress'; import cacheModule from '@/utils/cache/index'; import { Data } from '@/types';