guide
Version:
Encrypted Globally Unique Identifier generator.
63 lines (45 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
var _base64Url = require('base64-url');
var _errors = require('./errors');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @throws InvalidGuideError Throws if input guide cannot be decrypted.
* @throws UnexpectedNamespaceValueError Throws if the namespace contained in the payload does not match the expected namespace.
* @throws UnexpectedResourceTypeNameValueError Throws if the resource type name contained in the payload does not match the expected resource type name.
*/
/*:: import type {
FromGuideType
} from './types';*/ // @flow
var fromGuide /*: FromGuideType*/ = function fromGuide(initializationVectorValue, expectedNamespace, expectedResourceTypeName, guide) {
var decodedGuide = new Buffer((0, _base64Url.unescape)(guide), 'base64');
var tag = decodedGuide.slice(0, 16);
var body /*: Buffer*/ = decodedGuide.slice(16);
var decipher = _crypto2.default.createDecipher('aes-256-gcm', initializationVectorValue);
decipher.setAuthTag(tag);
var payload = void 0;
try {
var decryptedGuide = decipher.update(body).toString() + decipher.final().toString();
payload = JSON.parse(decryptedGuide);
} catch (error) {
// console.log('error', error);
throw new _errors.InvalidGuideError(guide);
}
if (expectedNamespace !== payload.namespace) {
throw new _errors.UnexpectedNamespaceValueError(guide, expectedNamespace, expectedResourceTypeName, payload);
}
if (expectedResourceTypeName !== payload.type) {
throw new _errors.UnexpectedResourceTypeNameValueError(guide, expectedNamespace, expectedResourceTypeName, payload);
}
return {
id: payload.id,
namespace: payload.namespace,
type: payload.type
};
};
exports.default = fromGuide;
//# sourceMappingURL=fromGuide.js.map