diff --git a/lib/metadata.js b/lib/metadata.js index 2a33bb21c..037024b57 100644 --- a/lib/metadata.js +++ b/lib/metadata.js @@ -54,6 +54,51 @@ commands.RM_OWNERS = function (meta, args) { }); }; +// ["ADD_PENDING_OWNERS", ["7eEqelGso3EBr5jHlei6av4r9w2B9XZiGGwA1EgZ-5I="], 1561623438989] +commands.ADD_PENDING_OWNERS = function (meta, args) { + // bail out if args isn't an array + if (!Array.isArray(args)) { + throw new Error('METADATA_INVALID_PENDING_OWNERS'); + } + + // you shouldn't be able to get here if there are no owners + // because only an owner should be able to change the owners + if (meta.pending_owners && !Array.isArray(meta.pending_owners)) { + throw new Error("METADATA_NONSENSE_PENDING_OWNERS"); + } + + // Add pending_owners array if it doesn't exist + if (!meta.pending_owners) { + meta.pending_owners = deduplicate(args); + return; + } + // or fill it + args.forEach(function (owner) { + if (meta.pending_owners.indexOf(owner) >= 0) { return; } + meta.pending_owners.push(owner); + }); +}; + +// ["RM_PENDING_OWNERS", ["CrufexqXcY-z+eKJlEbNELVy5Sb7E-EAAEFI8GnEtZ0="], 1561623439989] +commands.RM_PENDING_OWNERS = function (meta, args) { + // what are you doing if you don't have owners to remove? + if (!Array.isArray(args)) { + throw new Error('METADATA_INVALID_PENDING_OWNERS'); + } + // if there aren't any owners to start, this is also pointless + if (!Array.isArray(meta.pending_owners)) { + throw new Error("METADATA_NONSENSE_PENDING_OWNERS"); + } + + // remove owners one by one + // we assume there are no duplicates + args.forEach(function (owner) { + var index = meta.pending_owners.indexOf(owner); + if (index < 0) { return; } + meta.pending_owners.splice(index, 1); + }); +}; + // ["RESET_OWNERS", ["7eEqelGso3EBr5jHlei6av4r9w2B9XZiGGwA1EgZ-5I="], 1561623439989] commands.RESET_OWNERS = function (meta, args) { // expect a new array, even if it's empty