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 currentBlockHeight: number = -1;
|
||||||
private relayReadyResolver: (() => void) | null = null;
|
private relayReadyResolver: (() => void) | null = null;
|
||||||
private relayReadyPromise: Promise<void> | null = null;
|
private relayReadyPromise: Promise<void> | null = null;
|
||||||
|
private secretsAreCompromised: boolean = false;
|
||||||
// Private constructor to prevent direct instantiation from outside
|
// Private constructor to prevent direct instantiation from outside
|
||||||
private constructor() {}
|
private constructor() {}
|
||||||
|
|
||||||
@ -407,6 +408,12 @@ export default class Services {
|
|||||||
const sp_addresses = member.sp_addresses;
|
const sp_addresses = member.sp_addresses;
|
||||||
if (!sp_addresses || sp_addresses.length === 0) continue;
|
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) {
|
for (const address of sp_addresses) {
|
||||||
if (address === myAddress) continue; // On s'ignore soi-même
|
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;
|
return unconnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -782,34 +794,26 @@ export default class Services {
|
|||||||
const membersList = this.getAllMembers();
|
const membersList = this.getAllMembers();
|
||||||
const processes = await this.getProcesses();
|
const processes = await this.getProcesses();
|
||||||
try {
|
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);
|
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);
|
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) {
|
} catch (e) {
|
||||||
console.error(`[Services:parseCipher] 💥 Échec critique du déchiffrement: ${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.`);
|
||||||
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...`);
|
// --- 🚨 NOUVELLE LOGIQUE 🚨 ---
|
||||||
|
// On ne supprime rien. On lève juste un drapeau pour
|
||||||
// Appel de la "bombe" pour casser la boucle de secrets périmés
|
// forcer 'ensureConnections' à se méfier de la BDD.
|
||||||
await this.clearSecretsFromDB();
|
console.warn(`[Services:parseCipher] 🚩 ACTION: Levée du drapeau 'secretsAreCompromised'.`);
|
||||||
|
this.secretsAreCompromised = true;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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) {
|
public async restoreSecretsFromBackUp(secretsStore: SecretsStore) {
|
||||||
console.log('[Services:restoreSecretsFromBackUp] 💾 Restauration des secrets depuis un backup...');
|
console.log('[Services:restoreSecretsFromBackUp] 💾 Restauration des secrets depuis un backup...');
|
||||||
const db = await Database.getInstance();
|
const db = await Database.getInstance();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user