chainscript
Version:
Client for chainscript.io
81 lines (56 loc) • 2.12 kB
JavaScript
;
exports.__esModule = true;
exports['default'] = verifyFiles;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _multihashes = require('multihashes');
var _multihashes2 = _interopRequireDefault(_multihashes);
var _bs58 = require('bs58');
var _bs582 = _interopRequireDefault(_bs58);
var _invertHash = require('invert-hash');
var _invertHash2 = _interopRequireDefault(_invertHash);
var _objectPath = require('object-path');
var _objectPath2 = _interopRequireDefault(_objectPath);
var _hashFile = require('./hashFile');
var _hashFile2 = _interopRequireDefault(_hashFile);
var INVERTED_HASH_MAP = _invertHash2['default'](_hashFile.HASH_MAP);
function verifyFiles(cwd, json, root) {
var top = _objectPath2['default'].get(json, root || '');
var hashes = Object.keys(top);
var errors = [];
var next = function next() {
var _again = true;
_function: while (_again) {
hash = file = buf = algorithmName = algorithm = undefined;
_again = false;
if (hashes.length === 0) {
if (errors.length > 0) {
throw new Error(errors.map(function (err) {
return err.message;
}).join('\n'));
}
return true;
}
var hash = hashes.shift();
var file = top[hash];
var buf = new Buffer(_bs582['default'].decode(hash));
var algorithmName = _multihashes2['default'].decode(buf).name;
var algorithm = INVERTED_HASH_MAP[algorithmName];
if (typeof algorithm === 'undefined') {
errors.push(new Error('Unsupported algorithm: ' + algorithmName));
_again = true;
continue _function;
}
return _hashFile2['default'](_path2['default'].resolve(cwd, file), algorithm).then(function (h) {
if (hash !== h) {
errors.push(new Error('Mismatch: ' + file));
}
})['catch'](function (err) {
return errors.push(err);
}).then(next);
}
};
return next();
}
module.exports = exports['default'];