feat: Implement settings password protection with a dedicated gate, management UI, and API integration.

This commit is contained in:
kuekhaoyang
2026-02-16 22:54:16 +08:00
parent a8c4586859
commit 98e314e31a
9 changed files with 432 additions and 6 deletions
+11 -1
View File
@@ -8,12 +8,14 @@ import { NextRequest, NextResponse } from 'next/server';
export const runtime = 'edge';
const ACCESS_PASSWORD = process.env.ACCESS_PASSWORD || '';
const SETTINGS_PASSWORD = process.env.SETTINGS_PASSWORD || '';
const PERSIST_PASSWORD = process.env.PERSIST_PASSWORD !== 'false';
const SUBSCRIPTION_SOURCES = process.env.SUBSCRIPTION_SOURCES || process.env.NEXT_PUBLIC_SUBSCRIPTION_SOURCES || '';
export async function GET() {
return NextResponse.json({
hasEnvPassword: ACCESS_PASSWORD.length > 0,
hasEnvSettingsPassword: SETTINGS_PASSWORD.length > 0,
persistPassword: PERSIST_PASSWORD,
subscriptionSources: SUBSCRIPTION_SOURCES,
});
@@ -21,7 +23,15 @@ export async function GET() {
export async function POST(request: NextRequest) {
try {
const { password } = await request.json();
const { password, type } = await request.json();
if (type === 'settings') {
if (!SETTINGS_PASSWORD) {
return NextResponse.json({ valid: false, message: 'No env settings password set' });
}
const valid = password === SETTINGS_PASSWORD;
return NextResponse.json({ valid });
}
if (!ACCESS_PASSWORD) {
return NextResponse.json({ valid: false, message: 'No env password set' });