Adding secretsAreCompromised flag
This commit is contained in:
parent
af3503db86
commit
8cc016c2a5
@ -35,6 +35,7 @@ export default class Services {
|
||||
private currentBlockHeight: number = -1;
|
||||
private relayReadyResolver: (() => void) | null = null;
|
||||
private relayReadyPromise: Promise<void> | null = null;
|
||||
private secretsAreCompromised: boolean = false;
|
||||
// Private constructor to prevent direct instantiation from outside
|
||||
private constructor() {}
|
||||
|
||||
@ -407,6 +408,12 @@ export default class Services {
|
||||
const sp_addresses = member.sp_addresses;
|
||||
if (!sp_addresses || sp_addresses.length === 0) continue;
|
||||
|
||||
if (this.secretsAreCompromised) {
|
||||
console.warn(`[findUnconnectedAddresses] 🚩 Flag 'secretsAreCompromised' détecté. Forçage de la reconnexion pour ${address}.`);
|
||||
unconnected.add(address);
|
||||
continue; // Important: passe au membre suivant
|
||||
}
|
||||
|
||||
for (const address of sp_addresses) {
|
||||
if (address === myAddress) continue; // On s'ignore soi-même
|
||||
|
||||
@ -415,6 +422,11 @@ export default class Services {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.secretsAreCompromised && unconnected.size > 0) {
|
||||
console.log("[findUnconnectedAddresses] 🚩 Drapeau 'secretsAreCompromised' réinitialisé car une reconnexion va être tentée.");
|
||||
this.secretsAreCompromised = false;
|
||||
}
|
||||
return unconnected;
|
||||
}
|
||||
|
||||
@ -782,34 +794,26 @@ export default class Services {
|
||||
const membersList = this.getAllMembers();
|
||||
const processes = await this.getProcesses();
|
||||
try {
|
||||
// console.debug('[Services:parseCipher] 🤫 Tentative de déchiffrement du message...');
|
||||
console.debug('[Services:parseCipher] 🤫 Tentative de déchiffrement du message...');
|
||||
const apiReturn = this.sdkClient.parse_cipher(message, membersList, processes);
|
||||
// console.debug('[Services:parseCipher] ✅ Message déchiffré, traitement...');
|
||||
console.debug('[Services:parseCipher] ✅ Message déchiffré, traitement...');
|
||||
await this.handleApiReturn(apiReturn);
|
||||
|
||||
// Si le déchiffrement réussit, c'est que nos secrets sont bons.
|
||||
// On réinitialise le drapeau (au cas où il était levé).
|
||||
if (this.secretsAreCompromised) {
|
||||
console.log("[Services:parseCipher] ✅ Le déchiffrement a réussi. Réinitialisation du drapeau 'secretsAreCompromised'.");
|
||||
this.secretsAreCompromised = false;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`[Services:parseCipher] 💥 Échec critique du déchiffrement: ${e}`);
|
||||
console.warn(`[Services:parseCipher] Impossible de déchiffrer un message entrant.`);
|
||||
console.warn(`[Services:parseCipher] Contrainte d'anonymat: L'expéditeur est inconnu, impossible d'invalider un seul secret.`);
|
||||
console.warn(`[Services:parseCipher] ACTION: Réinitialisation de TOUS les secrets pour forcer une reconnexion...`);
|
||||
|
||||
// Appel de la "bombe" pour casser la boucle de secrets périmés
|
||||
await this.clearSecretsFromDB();
|
||||
|
||||
console.warn(`[Services:parseCipher] ACTION: Forçage d'une reconnexion à tous les processus connus...`);
|
||||
try {
|
||||
// On récupère tous les processus qu'on connaît
|
||||
const allProcesses = await this.getProcesses();
|
||||
|
||||
for (const process of Object.values(allProcesses)) {
|
||||
// On force la vérification des connexions.
|
||||
// Comme les secrets sont vides, 'ensureConnections' va (via 'findUnconnectedAddresses')
|
||||
// appeler 'connectAddresses' et recréer les secrets.
|
||||
await this.ensureConnections(process);
|
||||
}
|
||||
console.log('[Services:parseCipher] ✅ Resynchronisation des secrets terminée.');
|
||||
} catch (reconnectError) {
|
||||
console.error('[Services:parseCipher] 💥 Échec lors de la tentative de reconnexion post-nettoyage:', reconnectError);
|
||||
}
|
||||
console.warn(`[Services:parseCipher] Contrainte d'anonymat: L'expéditeur est inconnu.`);
|
||||
|
||||
// --- 🚨 NOUVELLE LOGIQUE 🚨 ---
|
||||
// On ne supprime rien. On lève juste un drapeau pour
|
||||
// forcer 'ensureConnections' à se méfier de la BDD.
|
||||
console.warn(`[Services:parseCipher] 🚩 ACTION: Levée du drapeau 'secretsAreCompromised'.`);
|
||||
this.secretsAreCompromised = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1659,19 +1663,6 @@ export default class Services {
|
||||
}
|
||||
}
|
||||
|
||||
// --- AMÉLIORATION: Ajout de logs clairs ---
|
||||
public async clearSecretsFromDB() {
|
||||
console.warn('[Services:clearSecretsFromDB] 💣 Réinitialisation de TOUS les secrets (partagés et non confirmés)...');
|
||||
const db = await Database.getInstance();
|
||||
try {
|
||||
await db.clearStore('shared_secrets');
|
||||
await db.clearStore('unconfirmed_secrets');
|
||||
console.warn('[Services:clearSecretsFromDB] ✅ Magasins de secrets vidés.');
|
||||
} catch (e) {
|
||||
console.error('[Services:clearSecretsFromDB] 💥 Échec de la suppression des secrets:', e);
|
||||
}
|
||||
}
|
||||
|
||||
public async restoreSecretsFromBackUp(secretsStore: SecretsStore) {
|
||||
console.log('[Services:restoreSecretsFromBackUp] 💾 Restauration des secrets depuis un backup...');
|
||||
const db = await Database.getInstance();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user