From 964b8ebbc2a5c6d5f5d80200346e29281539a8c9 Mon Sep 17 00:00:00 2001 From: cgeek <cem.moreau@gmail.com> Date: Tue, 19 Aug 2014 18:17:44 +0200 Subject: [PATCH] Now able to accept empty keyblocks --- app/lib/streams/parsers/doc/keyblock.js | 1 + app/service/KeychainService.js | 27 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/app/lib/streams/parsers/doc/keyblock.js b/app/lib/streams/parsers/doc/keyblock.js index 6f8bdf90c..377de1d22 100644 --- a/app/lib/streams/parsers/doc/keyblock.js +++ b/app/lib/streams/parsers/doc/keyblock.js @@ -114,6 +114,7 @@ function extractKeyChanges(raw) { var keychanges = []; var currentKC; var lines = raw.split(/\n/); + lines = lines.slice(0, lines.length - 1); var nbKeys = 0; lines.forEach(function(line){ if (line.match(/^#####----(F|N|U|L|B):[A-Z0-9]{40}----#####$/)) { diff --git a/app/service/KeychainService.js b/app/service/KeychainService.js index ef3ce86a1..f861ad5cb 100644 --- a/app/service/KeychainService.js +++ b/app/service/KeychainService.js @@ -175,7 +175,7 @@ function KeyService (conn, conf, PublicKeyService) { checkPulseBlockKeychanges(block, done); } else if (current) { - done('Post-root blocks are not managed yet'); + checkNormalBlockKeychanges(block, done); } else { checkRootBlockKeychanges(block, function (err) { @@ -217,6 +217,29 @@ function KeyService (conn, conf, PublicKeyService) { }); } + function checkNormalBlockKeychanges(block, done) { + var newLinks = {}; + async.forEach(block.keysChanges, function(kc, callback){ + if (kc.type != 'U') { + callback('Only UPDATE block are managed for now'); + return; + } + async.waterfall([ + function (next){ + // Check keychange (certifications verification notably) + checkKeychange(block, kc, next); + }, + function (next){ + // Memorize new links from signatures + newLinks[kc.fingerprint] = kc.certifiers; + next(); + }, + ], callback); + }, function (err) { + done(err, newLinks); + }); + } + function checkKeychange (block, kc, done) { try { @@ -933,6 +956,8 @@ function KeyService (conn, conf, PublicKeyService) { block.version = 1; block.currency = current.currency; block.number = current.number + 1; + block.previousHash = current.hash; + block.previousIssuer = current.issuer; // Members merkle var stayers = members.slice(); // copy var leavers = leaving.slice(); // copy -- GitLab