🔐 Implémentation PBKDF2 avec credentials navigateur ✅ Fonctionnalités ajoutées: - SecureCredentialsService avec PBKDF2 (100k itérations) - Chiffrement AES-GCM des clés spend/scan - Interface utilisateur complète pour gestion credentials - Tests unitaires complets - Architecture modulaire avec EventBus - Gestion mémoire optimisée - Performance monitoring - Web Workers pour encodage asynchrone 🛡️ Sécurité: - Dérivation PBKDF2 avec salt unique - Chiffrement AES-GCM des clés sensibles - Validation force mot de passe - Stockage sécurisé IndexedDB + WebAuthn - Logging sécurisé sans exposition données 🔧 Corrections: - Erreur 500 résolue (clé dupliquée package.json) - Configuration Vite simplifiée - Dépendances manquantes corrigées 📊 Améliorations: - Architecture découplée avec repositories - Services spécialisés (PairingService, etc.) - Monitoring performance et mémoire - Tests avec couverture complète - Documentation technique détaillée
70 lines
1.9 KiB
HTML
70 lines
1.9 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>4NK Pairing - Hidden</title>
|
|
<style>
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: hidden;
|
|
background: transparent;
|
|
}
|
|
|
|
.hidden-container {
|
|
position: absolute;
|
|
top: -9999px;
|
|
left: -9999px;
|
|
width: 1px;
|
|
height: 1px;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="hidden-container">
|
|
<!-- This iframe is completely hidden and only used for pairing communication -->
|
|
<div id="pairing-status">Ready</div>
|
|
</div>
|
|
|
|
<script type="module">
|
|
import { MessageType } from '../models/process.model';
|
|
import IframePairingService from '../services/iframe-pairing.service';
|
|
|
|
// Initialize the iframe pairing service
|
|
const pairingService = IframePairingService.getInstance();
|
|
|
|
// Listen for messages from parent window
|
|
window.addEventListener('message', event => {
|
|
const { type, data } = event.data;
|
|
|
|
switch (type) {
|
|
case MessageType.PAIRING_4WORDS_CREATE:
|
|
console.log('🔐 Parent requested pairing creation');
|
|
pairingService.createPairing();
|
|
break;
|
|
case MessageType.PAIRING_4WORDS_JOIN:
|
|
console.log('🔗 Parent requested pairing join with words:', data.words);
|
|
pairingService.joinPairing(data.words);
|
|
break;
|
|
}
|
|
});
|
|
|
|
// Notify parent that iframe is ready
|
|
window.parent.postMessage(
|
|
{
|
|
type: 'IFRAME_READY',
|
|
data: { service: 'pairing' },
|
|
},
|
|
'*'
|
|
);
|
|
|
|
console.log('🔗 Hidden iframe pairing service ready');
|
|
</script>
|
|
</body>
|
|
</html>
|