'use client'; import { useState } from 'react'; import { SettingsSection } from './SettingsSection'; import { Trash2, Plus, Eye, EyeOff, Shield, ShieldCheck } from 'lucide-react'; import { Switch } from '@/components/ui/Switch'; interface PasswordSettingsProps { enabled: boolean; passwords: string[]; envPasswordSet: boolean; onToggle: (enabled: boolean) => void; onAdd: (password: string) => void; onRemove: (password: string) => void; } export function PasswordSettings({ enabled, passwords, envPasswordSet, onToggle, onAdd, onRemove, }: PasswordSettingsProps) { const [newPassword, setNewPassword] = useState(''); const [error, setError] = useState(''); const [showPassword, setShowPassword] = useState(false); const handleAdd = (e: React.FormEvent) => { e.preventDefault(); if (!newPassword) return; if (passwords.includes(newPassword)) { setError('密码已存在'); return; } onAdd(newPassword); setNewPassword(''); setError(''); }; // If env password is set, access control is automatically enabled const isActive = enabled || envPasswordSet; return (
{/* Toggle - only shown if no env password */} {!envPasswordSet && (
)} {/* Env Password Notice */} {envPasswordSet && (

环境变量密码已启用

通过 ACCESS_PASSWORD 环境变量设置,无法在此删除

)} {isActive && (
{/* Local Passwords Section */}

本地保存密码

仅在当前浏览器/设备有效,可随时添加或删除

{passwords.length === 0 && !envPasswordSet && (

未设置本地密码。在至少添加一个密码之前,任何人都可以访问。

)} {passwords.length === 0 && envPasswordSet && (

暂无本地密码。可以添加额外的本地密码作为备用。

)}
{passwords.map((pwd, index) => (
{showPassword ? pwd : '••••••'}
))}
{ setNewPassword(e.target.value); setError(''); }} placeholder="添加新的本地密码..." className="w-full px-4 py-2 pr-10 rounded-[var(--radius-2xl)] bg-[var(--glass-bg)] border border-[var(--glass-border)] focus:outline-none focus:border-[var(--accent-color)] focus:shadow-[0_0_0_3px_color-mix(in_srgb,var(--accent-color)_30%,transparent)] transition-all duration-[0.4s] cubic-bezier(0.2,0.8,0.2,1) text-sm" />
{error &&

{error}

}
)}
); }