Skip to content
Snippets Groups Projects
Commit 2a30e11b authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Add minimum link quantity constraint

parent c31a52ac
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,14 @@ LinkSchema.pre('save', function (next) {
LinkSchema.methods = {
};
/**
* Mark as obsolete the links with an age equal to or below a given date
**/
LinkSchema.statics.currentValidLinks = function (fpr, done) {
var Link = this.model('Link');
Link.find({ target: fpr, obsolete: false }, done);
}
/**
* Mark as obsolete the links with an age equal to or below a given date
**/
......
......@@ -406,6 +406,12 @@ function KeyService (conn, conf, PublicKeyService) {
});
async.forEachSeries(newcomers, function (newcomer, newcomerTested) {
async.waterfall([
function (next) {
if (block.number > 0)
checkHaveEnoughLinks(newcomer, newLinks, next);
else
next();
},
function (next) {
// Check the newcomer IS RECOGNIZED BY the WoT + other newcomers
// (check we have a path WoT => newcomer)
......@@ -454,6 +460,20 @@ function KeyService (conn, conf, PublicKeyService) {
}
}
function checkHaveEnoughLinks(target, newLinks, done) {
async.waterfall([
function (next){
Link.currentValidLinks(target, next);
},
function (links, next){
var count = links.length;
if (newLinks[target] && newLinks[target].length)
count += newLinks[target].length;
next(count < LINK_QUANTITY_MIN && 'Key ' + target.substring(24) + ' does not have enough links (' + count + '/' + LINK_QUANTITY_MIN + ')');
},
], done);
}
function checkProofOfWork (block, done) {
var powRegexp = new RegExp('^0{' + MINIMUM_ZERO_START + '}');
if (!block.hash.match(powRegexp))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment