From f98339d6ce552145dc046886d6fc8978563e2b5e Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Sat, 23 Aug 2014 22:37:20 +0200
Subject: [PATCH] Fix: certifications for NEWCOMERS were not recorded

---
 app/lib/keyhelper.js           | 7 +++++++
 app/models/keyblock.js         | 4 ++--
 app/service/KeychainService.js | 5 ++---
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/app/lib/keyhelper.js b/app/lib/keyhelper.js
index e61ca3497..9b908e2ef 100644
--- a/app/lib/keyhelper.js
+++ b/app/lib/keyhelper.js
@@ -32,6 +32,13 @@ module.exports = {
     return new KeyHelper(packets);
   },
 
+  fromEncodedSeparatedPackets: function (encodedKeyPackets, encodedOtherCertifications){
+    var key = this.fromDecodedPackets(base64.decode(encodedKeyPackets));
+    if (encodedOtherCertifications)
+      key.setOtherCertifications(this.toPacketlist(encodedOtherCertifications));
+    return key;
+  },
+
   toPacketlist: function (encodedPackets){
     var packets = new PacketList();
     packets.read(base64.decode(encodedPackets));
diff --git a/app/models/keyblock.js b/app/models/keyblock.js
index 8a0e78b82..cce0243ec 100644
--- a/app/models/keyblock.js
+++ b/app/models/keyblock.js
@@ -75,8 +75,8 @@ KeyBlockSchema.methods = {
   getNewPubkeys: function() {
     var pubkeys = [];
     this.keysChanges.forEach(function(kc){
-      if (kc.type == 'F' || kc.type == 'N') {
-        pubkeys.push(kc.keypackets);
+      if (kc.type == 'N') {
+        pubkeys.push(keyhelper.fromEncodedSeparatedPackets(kc.keypackets, kc.certpackets));
       }
     });
     return pubkeys;
diff --git a/app/service/KeychainService.js b/app/service/KeychainService.js
index cc5a87931..c9f1ddaa3 100644
--- a/app/service/KeychainService.js
+++ b/app/service/KeychainService.js
@@ -520,8 +520,7 @@ function KeyService (conn, conf, PublicKeyService) {
       function (next){
         // Save new pubkeys (from NEWCOMERS)
         var pubkeys = block.getNewPubkeys();
-        async.forEach(pubkeys, function(encodedPackets, callback){
-          var key = keyhelper.fromEncodedPackets(encodedPackets);
+        async.forEach(pubkeys, function(key, callback){
           var fpr = key.getFingerprint();
           var uid = key.getUserID();
           var kid = fpr.substring(24);
@@ -529,7 +528,7 @@ function KeyService (conn, conf, PublicKeyService) {
             fingerprint: fpr,
             keyID: kid,
             uid: uid,
-            packets: encodedPackets
+            packets: key.getEncodedPacketList()
           });
           async.parallel({
             trusted: function(callback){
-- 
GitLab