From 54d2a548c5b1584e6795fa1b270a518f5cac1f16 Mon Sep 17 00:00:00 2001 From: shinya Date: Sun, 27 Jul 2025 15:14:22 +0800 Subject: [PATCH] feat: force set password --- README.md | 6 +-- src/app/warning/page.tsx | 97 ++++++++++++++++++++++++++++++++++++++++ src/middleware.ts | 9 ++-- 3 files changed, 105 insertions(+), 7 deletions(-) create mode 100644 src/app/warning/page.tsx diff --git a/README.md b/README.md index 75d2eef..afea800 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ 1. **Fork** 本仓库到你的 GitHub 账户。 2. 登陆 [Vercel](https://vercel.com/),点击 **Add New → Project**,选择 Fork 后的仓库。 -3. (强烈建议)设置 PASSWORD 环境变量。 +3. 设置 PASSWORD 环境变量。 4. 保持默认设置完成首次部署。 5. 如需自定义 `config.json`,请直接修改 Fork 后仓库中该文件。 6. 每次 Push 到 `main` 分支将自动触发重新构建。 @@ -113,7 +113,7 @@ 3. 选择 Pages,导入现有的 Git 存储库,选择 Fork 后的仓库 4. 构建命令填写 **pnpm install --frozen-lockfile && pnpm run pages:build**,预设框架为无,构建输出目录为 `.vercel/output/static` 5. 保持默认设置完成首次部署。进入设置,将兼容性标志设置为 `nodejs_compat` -6. (强烈建议)首次部署完成后进入设置,新增 PASSWORD 密钥(变量和机密下),而后重试部署。 +6. 首次部署完成后进入设置,新增 PASSWORD 密钥(变量和机密下),而后重试部署。 7. 如需自定义 `config.json`,请直接修改 Fork 后仓库中该文件。 8. 每次 Push 到 `main` 分支将自动触发重新构建。 @@ -136,7 +136,7 @@ docker pull ghcr.io/senshinya/moontv:latest # 运行容器 # -d: 后台运行 -p: 映射端口 3000 -> 3000 -docker run -d --name moontv -p 3000:3000 ghcr.io/senshinya/moontv:latest +docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:latest ``` 访问 `http://服务器 IP:3000` 即可。(需自行到服务器控制台放通 `3000` 端口) diff --git a/src/app/warning/page.tsx b/src/app/warning/page.tsx new file mode 100644 index 0000000..b3dfa95 --- /dev/null +++ b/src/app/warning/page.tsx @@ -0,0 +1,97 @@ +import { Metadata } from 'next'; + +export const metadata: Metadata = { + title: '安全警告 - MoonTV', + description: '站点安全配置警告', +}; + +export default function WarningPage() { + return ( +
+
+ {/* 警告图标 */} +
+
+ + + +
+
+ + {/* 标题 */} +
+

+ 安全合规配置警告 +

+
+
+ + {/* 警告内容 */} +
+
+

+ ⚠️ 安全风险提示 +

+

+ 检测到您的站点未配置访问控制,存在潜在的安全风险和法律合规问题。 +

+
+ +
+

+ 主要风险 +

+
    +
  • + + 未经授权的访问可能导致内容被恶意传播 +
  • +
  • + + 服务器资源可能被滥用,影响正常服务 +
  • +
  • + + 可能收到相关权利方的法律通知 +
  • +
  • + + 服务提供商可能因合规问题终止服务 +
  • +
+
+ +
+

+ 🔒 安全配置建议 +

+

+ 请立即配置{' '} + + PASSWORD + {' '} + 环境变量以启用访问控制。 +

+
+
+ + {/* 底部装饰 */} +
+
+

为确保系统安全性和合规性,请及时完成安全配置

+
+
+
+
+ ); +} diff --git a/src/middleware.ts b/src/middleware.ts index 86abfc3..b672d79 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -14,9 +14,10 @@ export async function middleware(request: NextRequest) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; - // 如果没有设置密码,直接放行 - if (storageType === 'localstorage' && !process.env.PASSWORD) { - return NextResponse.next(); + if (!process.env.PASSWORD) { + // 如果没有设置密码,重定向到警告页面 + const warningUrl = new URL('/warning', request.url); + return NextResponse.redirect(warningUrl); } // 从cookie获取认证信息 @@ -132,6 +133,6 @@ function shouldSkipAuth(pathname: string): boolean { // 配置middleware匹配规则 export const config = { matcher: [ - '/((?!_next/static|_next/image|favicon.ico|login|api/login|api/register|api/logout|api/cron|api/server-config).*)', + '/((?!_next/static|_next/image|favicon.ico|login|warning|api/login|api/register|api/logout|api/cron|api/server-config).*)', ], };