diff --git a/app/lib/indexer.ts b/app/lib/indexer.ts index f4df3584c06d89f4bbc16eb912ee5b8a9e59fe2f..6e5616d204817612a23e8df9c530149579ac4262 100644 --- a/app/lib/indexer.ts +++ b/app/lib/indexer.ts @@ -183,6 +183,14 @@ export interface Ranger { (n:number, m:number): Promise<DBHead[]> } +export interface ExclusionByCert { + op: 'UPDATE' + pub: string + written_on: string + writtenOn: number + kick: true +} + function pushIindex(index: IndexEntry[], entry: IindexEntry): void { index.push(entry) } @@ -1766,16 +1774,17 @@ export class Indexer { // BR_G95 static async ruleIndexGenExclusionByCertificatons(HEAD: DBHead, cindex: CindexEntry[], iindex: IindexEntry[], conf: ConfDTO, dal:FileDAL) { - const exclusions = []; + const exclusions: ExclusionByCert[] = []; const expiredCerts = Underscore.filter(cindex, (c: CindexEntry) => c.expired_on > 0); for (const CERT of expiredCerts) { const just_expired = Underscore.filter(cindex, (c: CindexEntry) => c.receiver == CERT.receiver && c.expired_on > 0); const just_received = Underscore.filter(cindex, (c: CindexEntry) => c.receiver == CERT.receiver && c.expired_on == 0); const non_expired_global = await dal.cindexDAL.getValidLinksTo(CERT.receiver); if ((count(non_expired_global) - count(just_expired) + count(just_received)) < conf.sigQty) { - const isInExcluded = Underscore.filter(iindex, (i: IindexEntry) => i.member === false && i.pub === CERT.receiver)[0]; + const isInExcluded = Underscore.filter(iindex, (i: IindexEntry) => i.member === false && i.pub === CERT.receiver)[0] + const isInKicked = Underscore.filter(exclusions, e => e.pub === CERT.receiver)[0] const idty = await dal.iindexDAL.getFullFromPubkey(CERT.receiver) - if (!isInExcluded && idty.member) { + if (!isInExcluded && !isInKicked && idty.member) { exclusions.push({ op: 'UPDATE', pub: CERT.receiver,