import React, { useState, useEffect } from 'react'; const PasswordManager = () => { const [passwords, setPasswords] = useState([]); const [showAddForm, setShowAddForm] = useState(false); const [searchTerm, setSearchTerm] = useState(''); const [newPassword, setNewPassword] = useState({ title: '', server: '', username: '', password: '', category: 'server', notes: '' }); useEffect(() => { loadPasswords(); }, []); const loadPasswords = async () => { if (window.electronAPI) { const result = await window.electronAPI.loadPasswords(); if (result.success) { setPasswords(result.passwords || []); } } }; const savePasswords = async (passwordsList) => { if (window.electronAPI) { await window.electronAPI.savePasswords(passwordsList); } }; const addPassword = async () => { if (!newPassword.title) { alert('Заполните название'); return; } const password = { ...newPassword, id: Date.now().toString(), createdAt: new Date().toISOString() }; const updatedPasswords = [...passwords, password]; setPasswords(updatedPasswords); await savePasswords(updatedPasswords); setShowAddForm(false); setNewPassword({ title: '', server: '', username: '', password: '', category: 'server', notes: '' }); }; const deletePassword = async (passwordId) => { if (confirm('Удалить эту запись?')) { const updatedPasswords = passwords.filter(p => p.id !== passwordId); setPasswords(updatedPasswords); await savePasswords(updatedPasswords); } }; const copyToClipboard = async (text) => { if (window.electronAPI) { await window.electronAPI.copyToClipboard(text); alert('Скопировано в буфер обмена'); } }; const generatePassword = () => { const length = 16; const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*"; let password = ""; for (let i = 0; i < length; i++) { password += charset.charAt(Math.floor(Math.random() * charset.length)); } setNewPassword({...newPassword, password}); }; const filteredPasswords = passwords.filter(password => password.title.toLowerCase().includes(searchTerm.toLowerCase()) || password.username.toLowerCase().includes(searchTerm.toLowerCase()) || password.category.toLowerCase().includes(searchTerm.toLowerCase()) ); return (

Менеджер паролей

Безопасное хранение учетных данных

setSearchTerm(e.target.value)} className="w-full pl-3 pr-3 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white placeholder-gray-400 focus:ring-2 focus:ring-primary-500 focus:border-transparent text-sm" />
{showAddForm && (

Добавить новую запись

setNewPassword({...newPassword, title: e.target.value})} className="w-full bg-gray-700 border border-gray-600 rounded-lg px-3 py-2 text-white focus:ring-2 focus:ring-primary-500 focus:border-transparent text-sm" placeholder="Root доступ к серверу" />
setNewPassword({...newPassword, server: e.target.value})} className="w-full bg-gray-700 border border-gray-600 rounded-lg px-3 py-2 text-white focus:ring-2 focus:ring-primary-500 focus:border-transparent text-sm" placeholder="server.example.com" />
setNewPassword({...newPassword, username: e.target.value})} className="w-full bg-gray-700 border border-gray-600 rounded-lg px-3 py-2 text-white focus:ring-2 focus:ring-primary-500 focus:border-transparent text-sm" placeholder="admin" />
setNewPassword({...newPassword, password: e.target.value})} className="flex-1 bg-gray-700 border border-gray-600 rounded-lg px-3 py-2 text-white focus:ring-2 focus:ring-primary-500 focus:border-transparent text-sm" placeholder="Пароль" />