UNPKG

12.6 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _fs = require("fs");
10
11var _fs2 = _interopRequireDefault(_fs);
12
13var _JwtGenerator = require("./JwtGenerator");
14
15var _JwtGenerator2 = _interopRequireDefault(_JwtGenerator);
16
17var _HashGenerator = require("./HashGenerator");
18
19var _HashGenerator2 = _interopRequireDefault(_HashGenerator);
20
21function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
23function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
24
25/**
26 * Right now only key/secret credentials are supported.
27 * However, in time JWT will also be supported.
28 * The `Credentials` object provides an abstraction to this.
29 *
30 * @param {string} apiKey - A Nexmo API Key
31 * @param {string} apiSecret - A Nexmo API Secret
32 * @param {string} [applicationId] - A Nexmo Application ID
33 * @param {string|Buffer} [privateKey] - When a string value is passed it should
34 * either represent the path to the private key, or the actual
35 * private key in string format. If a Buffer is passed then
36 * it should be the key read from the file system.
37 * @param {string} [signatureSecret] - A Nexmo signature Secret
38 * @param {string} [signatureMethod] - A Nexmo compatible request signing method
39 */
40var Credentials = function () {
41 function Credentials(apiKey, apiSecret, privateKey, applicationId, signatureSecret, signatureMethod) {
42 _classCallCheck(this, Credentials);
43
44 this.apiKey = apiKey;
45 this.apiSecret = apiSecret;
46
47 this.privateKey = null;
48 this.applicationId = applicationId;
49
50 this.signatureSecret = signatureSecret;
51 this.signatureMethod = signatureMethod;
52
53 if (privateKey instanceof Buffer) {
54 this.privateKey = privateKey;
55 } else if (typeof privateKey === "string" && privateKey.startsWith("-----BEGIN PRIVATE KEY-----")) {
56 this.privateKey = new Buffer(privateKey);
57 } else if (privateKey !== undefined) {
58 if (!_fs2.default.existsSync(privateKey)) {
59 throw new Error("File \"" + privateKey + "\" not found.");
60 }
61 this.privateKey = _fs2.default.readFileSync(privateKey);
62 }
63
64 /** @private */
65 this._jwtGenerator = new _JwtGenerator2.default();
66 this._hashGenerator = new _HashGenerator2.default();
67 }
68
69 /**
70 * Generate a Jwt using the Private Key in the Credentials.
71 * By default the credentials.applicationId will be used when creating the token.
72 * However, this can be overwritten.
73 *
74 * @param {string} [applicationId] an application ID to be used instead of the
75 * default Credentials.applicationId value.
76 *
77 * @returns {string} The generated JWT
78 */
79
80
81 _createClass(Credentials, [{
82 key: "generateJwt",
83 value: function generateJwt() {
84 var applicationId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.applicationId;
85 var privateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.privateKey;
86
87 var claims = {
88 application_id: applicationId
89 };
90 var token = this._jwtGenerator.generate(privateKey, claims);
91 return token;
92 }
93 }, {
94 key: "generateSignature",
95 value: function generateSignature(params) {
96 var signatureSecret = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.signatureSecret;
97 var signatureMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.signatureMethod;
98
99 return this._hashGenerator.generate(signatureMethod, signatureSecret, params);
100 }
101
102 /**
103 * @private
104 * Used for testing purposes only.
105 */
106
107 }, {
108 key: "_setJwtGenerator",
109 value: function _setJwtGenerator(generator) {
110 this._jwtGenerator = generator;
111 }
112
113 /**
114 * @private
115 * Used for testing purposes only.
116 */
117
118 }, {
119 key: "_setHashGenerator",
120 value: function _setHashGenerator(generator) {
121 this._hashGenerator = generator;
122 }
123
124 /**
125 * Ensures a credentials instance is used.
126 *
127 * Key/Secret credentials are only supported at present.
128 */
129
130 }], [{
131 key: "parse",
132 value: function parse(obj) {
133 if (obj instanceof Credentials) {
134 return obj;
135 } else {
136 return new Credentials(obj.apiKey, obj.apiSecret, obj.privateKey, obj.applicationId, obj.signatureSecret, obj.signatureMethod);
137 }
138 }
139 }]);
140
141 return Credentials;
142}();
143
144exports.default = Credentials;
145module.exports = exports["default"];
146//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DcmVkZW50aWFscy5qcyJdLCJuYW1lcyI6WyJDcmVkZW50aWFscyIsImFwaUtleSIsImFwaVNlY3JldCIsInByaXZhdGVLZXkiLCJhcHBsaWNhdGlvbklkIiwic2lnbmF0dXJlU2VjcmV0Iiwic2lnbmF0dXJlTWV0aG9kIiwiQnVmZmVyIiwic3RhcnRzV2l0aCIsInVuZGVmaW5lZCIsImV4aXN0c1N5bmMiLCJFcnJvciIsInJlYWRGaWxlU3luYyIsIl9qd3RHZW5lcmF0b3IiLCJfaGFzaEdlbmVyYXRvciIsImNsYWltcyIsImFwcGxpY2F0aW9uX2lkIiwidG9rZW4iLCJnZW5lcmF0ZSIsInBhcmFtcyIsImdlbmVyYXRvciIsIm9iaiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7SUFlTUEsVztBQUNKLHVCQUNFQyxNQURGLEVBRUVDLFNBRkYsRUFHRUMsVUFIRixFQUlFQyxhQUpGLEVBS0VDLGVBTEYsRUFNRUMsZUFORixFQU9FO0FBQUE7O0FBQ0EsU0FBS0wsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsU0FBakI7O0FBRUEsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLGFBQUwsR0FBcUJBLGFBQXJCOztBQUVBLFNBQUtDLGVBQUwsR0FBdUJBLGVBQXZCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkEsZUFBdkI7O0FBRUEsUUFBSUgsc0JBQXNCSSxNQUExQixFQUFrQztBQUNoQyxXQUFLSixVQUFMLEdBQWtCQSxVQUFsQjtBQUNELEtBRkQsTUFFTyxJQUNMLE9BQU9BLFVBQVAsS0FBc0IsUUFBdEIsSUFDQUEsV0FBV0ssVUFBWCxDQUFzQiw2QkFBdEIsQ0FGSyxFQUdMO0FBQ0EsV0FBS0wsVUFBTCxHQUFrQixJQUFJSSxNQUFKLENBQVdKLFVBQVgsQ0FBbEI7QUFDRCxLQUxNLE1BS0EsSUFBSUEsZUFBZU0sU0FBbkIsRUFBOEI7QUFDbkMsVUFBSSxDQUFDLGFBQUdDLFVBQUgsQ0FBY1AsVUFBZCxDQUFMLEVBQWdDO0FBQzlCLGNBQU0sSUFBSVEsS0FBSixhQUFtQlIsVUFBbkIsbUJBQU47QUFDRDtBQUNELFdBQUtBLFVBQUwsR0FBa0IsYUFBR1MsWUFBSCxDQUFnQlQsVUFBaEIsQ0FBbEI7QUFDRDs7QUFFRDtBQUNBLFNBQUtVLGFBQUwsR0FBcUIsNEJBQXJCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQiw2QkFBdEI7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7a0NBYUU7QUFBQSxVQUZBVixhQUVBLHVFQUZnQixLQUFLQSxhQUVyQjtBQUFBLFVBREFELFVBQ0EsdUVBRGEsS0FBS0EsVUFDbEI7O0FBQ0EsVUFBSVksU0FBUztBQUNYQyx3QkFBZ0JaO0FBREwsT0FBYjtBQUdBLFVBQUlhLFFBQVEsS0FBS0osYUFBTCxDQUFtQkssUUFBbkIsQ0FBNEJmLFVBQTVCLEVBQXdDWSxNQUF4QyxDQUFaO0FBQ0EsYUFBT0UsS0FBUDtBQUNEOzs7c0NBR0NFLE0sRUFHQTtBQUFBLFVBRkFkLGVBRUEsdUVBRmtCLEtBQUtBLGVBRXZCO0FBQUEsVUFEQUMsZUFDQSx1RUFEa0IsS0FBS0EsZUFDdkI7O0FBQ0EsYUFBTyxLQUFLUSxjQUFMLENBQW9CSSxRQUFwQixDQUNMWixlQURLLEVBRUxELGVBRkssRUFHTGMsTUFISyxDQUFQO0FBS0Q7O0FBRUQ7Ozs7Ozs7cUNBSWlCQyxTLEVBQVc7QUFDMUIsV0FBS1AsYUFBTCxHQUFxQk8sU0FBckI7QUFDRDs7QUFFRDs7Ozs7OztzQ0FJa0JBLFMsRUFBVztBQUMzQixXQUFLTixjQUFMLEdBQXNCTSxTQUF0QjtBQUNEOztBQUVEOzs7Ozs7OzswQkFLYUMsRyxFQUFLO0FBQ2hCLFVBQUlBLGVBQWVyQixXQUFuQixFQUFnQztBQUM5QixlQUFPcUIsR0FBUDtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU8sSUFBSXJCLFdBQUosQ0FDTHFCLElBQUlwQixNQURDLEVBRUxvQixJQUFJbkIsU0FGQyxFQUdMbUIsSUFBSWxCLFVBSEMsRUFJTGtCLElBQUlqQixhQUpDLEVBS0xpQixJQUFJaEIsZUFMQyxFQU1MZ0IsSUFBSWYsZUFOQyxDQUFQO0FBUUQ7QUFDRjs7Ozs7O2tCQUdZTixXIiwiZmlsZSI6IkNyZWRlbnRpYWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBKd3RHZW5lcmF0b3IgZnJvbSBcIi4vSnd0R2VuZXJhdG9yXCI7XG5pbXBvcnQgSGFzaEdlbmVyYXRvciBmcm9tIFwiLi9IYXNoR2VuZXJhdG9yXCI7XG5cbi8qKlxuICogUmlnaHQgbm93IG9ubHkga2V5L3NlY3JldCBjcmVkZW50aWFscyBhcmUgc3VwcG9ydGVkLlxuICogSG93ZXZlciwgaW4gdGltZSBKV1Qgd2lsbCBhbHNvIGJlIHN1cHBvcnRlZC5cbiAqIFRoZSBgQ3JlZGVudGlhbHNgIG9iamVjdCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGlLZXkgLSBBIE5leG1vIEFQSSBLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGlTZWNyZXQgLSBBIE5leG1vIEFQSSBTZWNyZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXBwbGljYXRpb25JZF0gLSBBIE5leG1vIEFwcGxpY2F0aW9uIElEXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IFtwcml2YXRlS2V5XSAtICBXaGVuIGEgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBpdCBzaG91bGRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHJlcHJlc2VudCB0aGUgcGF0aCB0byB0aGUgcHJpdmF0ZSBrZXksIG9yIHRoZSBhY3R1YWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBrZXkgaW4gc3RyaW5nIGZvcm1hdC4gSWYgYSBCdWZmZXIgaXMgcGFzc2VkIHRoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHRoZSBrZXkgcmVhZCBmcm9tIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2lnbmF0dXJlU2VjcmV0XSAtIEEgTmV4bW8gc2lnbmF0dXJlIFNlY3JldFxuICogQHBhcmFtIHtzdHJpbmd9IFtzaWduYXR1cmVNZXRob2RdIC0gQSBOZXhtbyBjb21wYXRpYmxlIHJlcXVlc3Qgc2lnbmluZyBtZXRob2RcbiAqL1xuY2xhc3MgQ3JlZGVudGlhbHMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBhcGlLZXksXG4gICAgYXBpU2VjcmV0LFxuICAgIHByaXZhdGVLZXksXG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBzaWduYXR1cmVTZWNyZXQsXG4gICAgc2lnbmF0dXJlTWV0aG9kXG4gICkge1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgdGhpcy5wcml2YXRlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuXG4gICAgdGhpcy5zaWduYXR1cmVTZWNyZXQgPSBzaWduYXR1cmVTZWNyZXQ7XG4gICAgdGhpcy5zaWduYXR1cmVNZXRob2QgPSBzaWduYXR1cmVNZXRob2Q7XG5cbiAgICBpZiAocHJpdmF0ZUtleSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgdGhpcy5wcml2YXRlS2V5ID0gcHJpdmF0ZUtleTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHByaXZhdGVLZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHByaXZhdGVLZXkuc3RhcnRzV2l0aChcIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVwiKVxuICAgICkge1xuICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEJ1ZmZlcihwcml2YXRlS2V5KTtcbiAgICB9IGVsc2UgaWYgKHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHByaXZhdGVLZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBcIiR7cHJpdmF0ZUtleX1cIiBub3QgZm91bmQuYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByaXZhdGVLZXkgPSBmcy5yZWFkRmlsZVN5bmMocHJpdmF0ZUtleSk7XG4gICAgfVxuXG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fand0R2VuZXJhdG9yID0gbmV3IEp3dEdlbmVyYXRvcigpO1xuICAgIHRoaXMuX2hhc2hHZW5lcmF0b3IgPSBuZXcgSGFzaEdlbmVyYXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgSnd0IHVzaW5nIHRoZSBQcml2YXRlIEtleSBpbiB0aGUgQ3JlZGVudGlhbHMuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNyZWRlbnRpYWxzLmFwcGxpY2F0aW9uSWQgd2lsbCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHRva2VuLlxuICAgKiBIb3dldmVyLCB0aGlzIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcHBsaWNhdGlvbklkXSBhbiBhcHBsaWNhdGlvbiBJRCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgIGRlZmF1bHQgQ3JlZGVudGlhbHMuYXBwbGljYXRpb25JZCB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBKV1RcbiAgICovXG4gIGdlbmVyYXRlSnd0KFxuICAgIGFwcGxpY2F0aW9uSWQgPSB0aGlzLmFwcGxpY2F0aW9uSWQsXG4gICAgcHJpdmF0ZUtleSA9IHRoaXMucHJpdmF0ZUtleVxuICApIHtcbiAgICB2YXIgY2xhaW1zID0ge1xuICAgICAgYXBwbGljYXRpb25faWQ6IGFwcGxpY2F0aW9uSWRcbiAgICB9O1xuICAgIHZhciB0b2tlbiA9IHRoaXMuX2p3dEdlbmVyYXRvci5nZW5lcmF0ZShwcml2YXRlS2V5LCBjbGFpbXMpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGdlbmVyYXRlU2lnbmF0dXJlKFxuICAgIHBhcmFtcyxcbiAgICBzaWduYXR1cmVTZWNyZXQgPSB0aGlzLnNpZ25hdHVyZVNlY3JldCxcbiAgICBzaWduYXR1cmVNZXRob2QgPSB0aGlzLnNpZ25hdHVyZU1ldGhvZFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5faGFzaEdlbmVyYXRvci5nZW5lcmF0ZShcbiAgICAgIHNpZ25hdHVyZU1ldGhvZCxcbiAgICAgIHNpZ25hdHVyZVNlY3JldCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKi9cbiAgX3NldEp3dEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICB0aGlzLl9qd3RHZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKi9cbiAgX3NldEhhc2hHZW5lcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgdGhpcy5faGFzaEdlbmVyYXRvciA9IGdlbmVyYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgY3JlZGVudGlhbHMgaW5zdGFuY2UgaXMgdXNlZC5cbiAgICpcbiAgICogS2V5L1NlY3JldCBjcmVkZW50aWFscyBhcmUgb25seSBzdXBwb3J0ZWQgYXQgcHJlc2VudC5cbiAgICovXG4gIHN0YXRpYyBwYXJzZShvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbHMoXG4gICAgICAgIG9iai5hcGlLZXksXG4gICAgICAgIG9iai5hcGlTZWNyZXQsXG4gICAgICAgIG9iai5wcml2YXRlS2V5LFxuICAgICAgICBvYmouYXBwbGljYXRpb25JZCxcbiAgICAgICAgb2JqLnNpZ25hdHVyZVNlY3JldCxcbiAgICAgICAgb2JqLnNpZ25hdHVyZU1ldGhvZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3JlZGVudGlhbHM7XG4iXX0=
\No newline at end of file