From 70cb6f6589ea06e83efbdf4493fb2ae412c5d1b9 Mon Sep 17 00:00:00 2001 From: mtvpls Date: Thu, 1 Jan 2026 22:38:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=89=B4=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/cron/{ => [password]}/route.ts | 14 +++++++++++++- src/middleware.ts | 2 +- start.js | 3 ++- vercel.json | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-) rename src/app/api/cron/{ => [password]}/route.ts (97%) diff --git a/src/app/api/cron/route.ts b/src/app/api/cron/[password]/route.ts similarity index 97% rename from src/app/api/cron/route.ts rename to src/app/api/cron/[password]/route.ts index 6659055..667b413 100644 --- a/src/app/api/cron/route.ts +++ b/src/app/api/cron/[password]/route.ts @@ -11,8 +11,20 @@ import { SearchResult } from '@/lib/types'; export const runtime = 'nodejs'; -export async function GET(request: NextRequest) { +export async function GET( + request: NextRequest, + { params }: { params: { password: string } } +) { console.log(request.url); + + const cronPassword = process.env.CRON_PASSWORD || 'mtvpls'; + if (params.password !== cronPassword) { + return NextResponse.json( + { success: false, message: 'Unauthorized' }, + { status: 401 } + ); + } + try { console.log('Cron job triggered:', new Date().toISOString()); diff --git a/src/middleware.ts b/src/middleware.ts index 13fcefc..047d04c 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -133,6 +133,6 @@ function shouldSkipAuth(pathname: string): boolean { // 配置middleware匹配规则 export const config = { matcher: [ - '/((?!_next/static|_next/image|favicon.ico|login|register|oidc-register|warning|api/login|api/register|api/logout|api/auth/oidc|api/cron|api/server-config|api/proxy-m3u8|api/cms-proxy|api/tvbox/subscribe|api/theme/css|api/openlist/cms-proxy|api/openlist/play).*)', + '/((?!_next/static|_next/image|favicon.ico|login|register|oidc-register|warning|api/login|api/register|api/logout|api/auth/oidc|api/cron/|api/server-config|api/proxy-m3u8|api/cms-proxy|api/tvbox/subscribe|api/theme/css|api/openlist/cms-proxy|api/openlist/play).*)', ], }; diff --git a/start.js b/start.js index 5561a53..0e46be5 100644 --- a/start.js +++ b/start.js @@ -58,8 +58,9 @@ const intervalId = setInterval(() => { // 执行 cron 任务的函数 function executeCronJob() { + const cronPassword = process.env.CRON_PASSWORD || 'mtvpls'; const cronUrl = `http://${process.env.HOSTNAME || 'localhost'}:${process.env.PORT || 3000 - }/api/cron`; + }/api/cron/${cronPassword}`; console.log(`Executing cron job: ${cronUrl}`); diff --git a/vercel.json b/vercel.json index eeba265..e7fa861 100644 --- a/vercel.json +++ b/vercel.json @@ -12,7 +12,7 @@ ], "crons": [ { - "path": "/api/cron", + "path": "/api/cron/mtvpls", "schedule": "0 1 * * *" } ]