Files
securebit-chat/example_master_key_usage.js

62 lines
3.1 KiB
JavaScript
Raw Normal View History

// Пример использования новой системы мастер-ключей
import { EnhancedSecureWebRTCManager } from './src/network/EnhancedSecureWebRTCManager.js';
// Создание менеджера WebRTC
const webrtcManager = new EnhancedSecureWebRTCManager(
(message) => console.log('Received:', message),
(status) => console.log('Status:', status),
(keyData) => console.log('Key exchange:', keyData),
(verificationData) => console.log('Verification required:', verificationData)
);
// Настройка callback для запроса пароля
webrtcManager.setMasterKeyPasswordCallback((isRetry, callback) => {
// В реальном приложении здесь должен быть UI для ввода пароля
const message = isRetry ?
'Неверный пароль. Введите мастер-пароль повторно:' :
'Введите мастер-пароль для разблокировки безопасного хранилища:';
// Пример с prompt (в реальном приложении используйте модальное окно)
const password = prompt(message);
callback(password);
});
// Настройка callback для истечения сессии
webrtcManager.setMasterKeySessionExpiredCallback((reason) => {
console.warn(`Сессия мастер-ключа истекла: ${reason}`);
// Уведомить пользователя
if (reason === 'inactivity') {
alert('Сессия заблокирована из-за неактивности. Потребуется повторный ввод пароля.');
} else if (reason === 'timeout') {
alert('Сессия истекла по таймауту. Потребуется повторный ввод пароля.');
}
});
// Проверка статуса мастер-ключа
console.log('Мастер-ключ разблокирован:', webrtcManager.isMasterKeyUnlocked());
console.log('Статус сессии:', webrtcManager.getMasterKeySessionStatus());
// Ручная блокировка мастер-ключа
// webrtcManager.lockMasterKey();
// Пример использования в реальном приложении:
async function initializeSecureConnection() {
try {
// При первом обращении к зашифрованным ключам будет запрошен пароль
const offer = await webrtcManager.createSecureOffer();
console.log('Secure offer created:', offer);
// Мастер-ключ теперь разблокирован и будет автоматически заблокирован:
// - через 15 минут бездействия
// - через 5 минут после потери фокуса окна
// - при ручном вызове lockMasterKey()
} catch (error) {
console.error('Failed to create secure offer:', error);
}
}
// Запуск примера
initializeSecureConnection();