diff --git a/app/modules/crawler/lib/sandbox.ts b/app/modules/crawler/lib/sandbox.ts index 438ac2713a3caff30eef229577da9586a680f25c..c72abc8f23925a930ba690aad02ec1133162d1d1 100644 --- a/app/modules/crawler/lib/sandbox.ts +++ b/app/modules/crawler/lib/sandbox.ts @@ -47,6 +47,12 @@ export const pullSandboxToLocalServer = async (currency:string, fromHost:any, to await submitIdentityToServer(idty, toServer, notify, logger) } + for (let i = 0; i < docs.revocations.length; i++) { + const idty = docs.revocations[i]; + watcher && watcher.writeStatus('Revocation ' + (i+1) + '/' + docs.revocations.length) + await submitRevocationToServer(idty, toServer, notify, logger) + } + for (let i = 0; i < docs.certifications.length; i++) { const cert = docs.certifications[i]; watcher && watcher.writeStatus('Certification ' + (i+1) + '/' + docs.certifications.length) @@ -65,7 +71,8 @@ function getDocumentsTree(currency:string, res:any) { const documents:any = { identities: [], certifications: [], - memberships: [] + memberships: [], + revocations: [] } for(const idty of res.identities) { const identity = rawer.getOfficialIdentity({ @@ -75,6 +82,17 @@ function getDocumentsTree(currency:string, res:any) { buid: idty.meta.timestamp, sig: idty.sig }) + if (idty.revocation_sig) { + const revocation = rawer.getOfficialRevocation({ + currency, + uid: idty.uid, + issuer: idty.pubkey, + buid: idty.meta.timestamp, + sig: idty.sig, + revocation: idty.revocation_sig + }) + documents.revocations.push(revocation) + } documents.identities.push(identity) for (const cert of idty.pendingCerts) { const certification = rawer.getOfficialCertification({ @@ -136,7 +154,17 @@ async function submitIdentityToServer(idty:any, toServer:any, notify:boolean, lo try { const obj = parsers.parseIdentity.syncWrite(idty) await toServer.writeIdentity(obj, notify) - logger && logger.trace('Sandbox pulling: success with identity \'%s\'', idty.uid) + logger && logger.trace('Sandbox pulling: success with identity \'%s\'', obj.uid) + } catch (e) { + // Silent error + } +} + +async function submitRevocationToServer(revocation:any, toServer:any, notify:boolean, logger:any) { + try { + const obj = parsers.parseRevocation.syncWrite(revocation) + await toServer.writeRevocation(obj, notify) + logger && logger.trace('Sandbox pulling: success with revocation \'%s\'', obj.uid) } catch (e) { // Silent error } diff --git a/test/integration/identity-pulling.js b/test/integration/identity-pulling.js index 544b45d0cc4205f1a0ce3a6656cd844f6d490583..6cfffb2fbcfda85eeecd793ecc419a5d2c688749 100644 --- a/test/integration/identity-pulling.js +++ b/test/integration/identity-pulling.js @@ -64,6 +64,9 @@ describe("Identity pulling", function() { // 1 certs for tic yield cat1.cert(tic2, s2, s2); // 0 certs for tuc + + // tic2 also revokes its pending identity + yield tic2.revoke() })); it('toc should not be known of s1', () => co(function*() { @@ -118,21 +121,25 @@ describe("Identity pulling", function() { assert.equal(json.identities[3].pubkey, 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd') assert.equal(json.identities[3].uid, 'cat') + assert.equal(json.identities[3].revocation_sig, null) assert.equal(json.identities[3].pendingCerts.length, 1) assert.equal(json.identities[3].pendingMemberships.length, 1) assert.equal(json.identities[0].pubkey, '2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc') assert.equal(json.identities[0].uid, 'tac') + assert.equal(json.identities[0].revocation_sig, null) assert.equal(json.identities[0].pendingCerts.length, 1) assert.equal(json.identities[0].pendingMemberships.length, 1) assert.equal(json.identities[2].pubkey, 'DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV') assert.equal(json.identities[2].uid, 'tic') + assert.equal(json.identities[2].revocation_sig, 'AAFSisqkMb/2L4/YmZXQWoKYxnz/PW1c2wbux+ZRe8Iw8dxthPR4Iw+g+/JKA5nPE+C/lkX2YFrIikgUpZdlAA==') assert.equal(json.identities[2].pendingCerts.length, 1) assert.equal(json.identities[2].pendingMemberships.length, 1) assert.equal(json.identities[1].pubkey, 'DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo') assert.equal(json.identities[1].uid, 'toc') + assert.equal(json.identities[1].revocation_sig, null) assert.equal(json.identities[1].pendingCerts.length, 2) assert.equal(json.identities[1].pendingMemberships.length, 1) })