From 59f20f554a63e580d9ffa0bdc9cdcdfff2e8a498 Mon Sep 17 00:00:00 2001 From: cgeek Date: Wed, 27 Aug 2014 18:56:33 +0200 Subject: [PATCH] Fix: infinite ping-pong of keyblock when non-valid block --- app/lib/constants.js | 9 +++++++++ app/models/publickey.js | 5 +++-- app/service/KeychainService.js | 10 ++++++++-- server.js | 7 ++++++- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 app/lib/constants.js diff --git a/app/lib/constants.js b/app/lib/constants.js new file mode 100644 index 00000000..a37bed78 --- /dev/null +++ b/app/lib/constants.js @@ -0,0 +1,9 @@ +module.exports = { + + ERROR: { + + PUBKEY: { + ALREADY_UPDATED: 1 + } + } +}; diff --git a/app/models/publickey.js b/app/models/publickey.js index 7f1e2e67..5705c0fd 100644 --- a/app/models/publickey.js +++ b/app/models/publickey.js @@ -11,6 +11,7 @@ var md5 = require('../lib/md5'); var unix2dos = require('../lib/unix2dos'); var parsers = require('../lib/streams/parsers/doc'); var keyhelper = require('../lib/keyhelper'); +var constants = require('../lib/constants'); var logger = require('../lib/logger')('pubkey'); var PublicKeySchema = new Schema({ @@ -272,8 +273,8 @@ PublicKeySchema.statics.persist = function (pubkey, done) { } // If already treated this ASCII armored value if (~foundKeys[0].hashes.indexOf(comingHash)) { - // next('Key already up-to-date'); - // return; + next(constants.ERROR.PUBKEY.ALREADY_UPDATED); + return; } else { // Remembering incoming hash foundKeys[0].hashes.push(comingHash); diff --git a/app/service/KeychainService.js b/app/service/KeychainService.js index 77eddf03..b9a47a78 100644 --- a/app/service/KeychainService.js +++ b/app/service/KeychainService.js @@ -10,6 +10,7 @@ var parsers = require('../lib/streams/parsers/doc'); var keyhelper = require('../lib/keyhelper'); var logger = require('../lib/logger')('keychain'); var signature = require('../lib/signature'); +var constants = require('../lib/constants'); var moment = require('moment'); var inquirer = require('inquirer'); @@ -184,7 +185,7 @@ function KeyService (conn, conf, PublicKeyService, PeeringService) { next(); } ], function (err) { - done(err, block); + done(err, !err && block); }); }; @@ -678,7 +679,12 @@ function KeyService (conn, conf, PublicKeyService, PeeringService) { parsers.parsePubkey(next).asyncWrite(unix2dos(key.getArmored()), next); }, function (obj, next){ - PublicKeyService.submitPubkey(obj, next); + PublicKeyService.submitPubkey(obj, function (err) { + if (err == constants.ERROR.PUBKEY.ALREADY_UPDATED) + next(); + else + next(err); + }); }, ], callback); }, diff --git a/server.js b/server.js index 05128df3..2b675f4f 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,7 @@ var util = require('util'); var _ = require('underscore'); var mongoose = require('mongoose'); var common = require('./app/lib/common'); +var constants = require('./app/lib/constants'); var express = require('express'); var request = require('request'); var http = require('http'); @@ -80,7 +81,11 @@ function Server (dbConf, overrideConf, interceptors, onInit) { }, ], function (err, res) { if (err){ - logger.debug(err); + switch (err) { + case constants.ERROR.PUBKEY.ALREADY_UPDATED: msg = 'Key already up-to-date'; + default: msg = err.toString(); + } + logger.debug(msg); } if (res != null && res != undefined) { that.push(res); -- 2.22.0