UNPKG

plivo

Version:

A Node.js SDK to make voice calls and send SMS using Plivo and to generate Plivo XML

55 lines (42 loc) 2.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.computeOldSignature = computeOldSignature; exports.verifyOldSignature = verifyOldSignature; exports.validateSignature = validateSignature; var _uriParser = require('uri-parser'); var parser = _interopRequireWildcard(_uriParser); var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var utf8 = require('utf8'); var buildUrl = require('build-url'); var base64 = require('base-64'); function computeOldSignature(authId, uri, params) { var joinedParams = uri + _lodash2.default.join(_lodash2.default.map(_lodash2.default.sortBy(_lodash2.default.toPairs(params)), function (item) { return item[0] + item[1]; }), ''); // console.log(joinedParams); return _crypto2.default.createHmac('sha1', authId).update(joinedParams).digest('base64'); } function verifyOldSignature(authId, uri, params, signature) { return computeOldSignature(authId, uri, params) === signature; } function validateSignature(uri, nonce, signature, auth_token) { nonce = utf8.encode(nonce); signature = utf8.encode(signature); auth_token = utf8.encode(auth_token); uri = utf8.encode(uri); var parsed_uri = parser.parse(uri); var url_protocol = parsed_uri.protocol == '' ? 'http://' : parsed_uri.protocol + '://'; var proxy = parsed_uri.port == '' ? parsed_uri.host : parsed_uri.host + ':' + parsed_uri.port; var base_url = buildUrl(url_protocol + proxy, { path: parsed_uri.path }); var hmac = _crypto2.default.createHmac('sha256', auth_token); var hmacBytes = base64.decode(hmac.update(base_url + nonce).digest('base64')); var authentication_string = base64.encode(hmacBytes); return authentication_string == signature; }