1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 |
|
9 | var _fs = require("fs");
|
10 |
|
11 | var _fs2 = _interopRequireDefault(_fs);
|
12 |
|
13 | var _JwtGenerator = require("./JwtGenerator");
|
14 |
|
15 | var _JwtGenerator2 = _interopRequireDefault(_JwtGenerator);
|
16 |
|
17 | var _HashGenerator = require("./HashGenerator");
|
18 |
|
19 | var _HashGenerator2 = _interopRequireDefault(_HashGenerator);
|
20 |
|
21 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
22 |
|
23 | function _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 | */
|
40 | var 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 |
|
144 | exports.default = Credentials;
|
145 | module.exports = exports["default"];
|
146 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9DcmVkZW50aWFscy5qcyJdLCJuYW1lcyI6WyJDcmVkZW50aWFscyIsImFwaUtleSIsImFwaVNlY3JldCIsInByaXZhdGVLZXkiLCJhcHBsaWNhdGlvbklkIiwic2lnbmF0dXJlU2VjcmV0Iiwic2lnbmF0dXJlTWV0aG9kIiwiQnVmZmVyIiwic3RhcnRzV2l0aCIsInVuZGVmaW5lZCIsImV4aXN0c1N5bmMiLCJFcnJvciIsInJlYWRGaWxlU3luYyIsIl9qd3RHZW5lcmF0b3IiLCJfaGFzaEdlbmVyYXRvciIsImNsYWltcyIsImFwcGxpY2F0aW9uX2lkIiwidG9rZW4iLCJnZW5lcmF0ZSIsInBhcmFtcyIsImdlbmVyYXRvciIsIm9iaiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0FBRUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7SUFlTUEsVztBQUNKLHVCQUNFQyxNQURGLEVBRUVDLFNBRkYsRUFHRUMsVUFIRixFQUlFQyxhQUpGLEVBS0VDLGVBTEYsRUFNRUMsZUFORixFQU9FO0FBQUE7O0FBQ0EsU0FBS0wsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsU0FBakI7O0FBRUEsU0FBS0MsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtDLGFBQUwsR0FBcUJBLGFBQXJCOztBQUVBLFNBQUtDLGVBQUwsR0FBdUJBLGVBQXZCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkEsZUFBdkI7O0FBRUEsUUFBSUgsc0JBQXNCSSxNQUExQixFQUFrQztBQUNoQyxXQUFLSixVQUFMLEdBQWtCQSxVQUFsQjtBQUNELEtBRkQsTUFFTyxJQUNMLE9BQU9BLFVBQVAsS0FBc0IsUUFBdEIsSUFDQUEsV0FBV0ssVUFBWCxDQUFzQiw2QkFBdEIsQ0FGSyxFQUdMO0FBQ0EsV0FBS0wsVUFBTCxHQUFrQixJQUFJSSxNQUFKLENBQVdKLFVBQVgsQ0FBbEI7QUFDRCxLQUxNLE1BS0EsSUFBSUEsZUFBZU0sU0FBbkIsRUFBOEI7QUFDbkMsVUFBSSxDQUFDLGFBQUdDLFVBQUgsQ0FBY1AsVUFBZCxDQUFMLEVBQWdDO0FBQzlCLGNBQU0sSUFBSVEsS0FBSixhQUFtQlIsVUFBbkIsbUJBQU47QUFDRDtBQUNELFdBQUtBLFVBQUwsR0FBa0IsYUFBR1MsWUFBSCxDQUFnQlQsVUFBaEIsQ0FBbEI7QUFDRDs7QUFFRDtBQUNBLFNBQUtVLGFBQUwsR0FBcUIsNEJBQXJCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQiw2QkFBdEI7QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7a0NBYUU7QUFBQSxVQUZBVixhQUVBLHVFQUZnQixLQUFLQSxhQUVyQjtBQUFBLFVBREFELFVBQ0EsdUVBRGEsS0FBS0EsVUFDbEI7O0FBQ0EsVUFBSVksU0FBUztBQUNYQyx3QkFBZ0JaO0FBREwsT0FBYjtBQUdBLFVBQUlhLFFBQVEsS0FBS0osYUFBTCxDQUFtQkssUUFBbkIsQ0FBNEJmLFVBQTVCLEVBQXdDWSxNQUF4QyxDQUFaO0FBQ0EsYUFBT0UsS0FBUDtBQUNEOzs7c0NBR0NFLE0sRUFHQTtBQUFBLFVBRkFkLGVBRUEsdUVBRmtCLEtBQUtBLGVBRXZCO0FBQUEsVUFEQUMsZUFDQSx1RUFEa0IsS0FBS0EsZUFDdkI7O0FBQ0EsYUFBTyxLQUFLUSxjQUFMLENBQW9CSSxRQUFwQixDQUNMWixlQURLLEVBRUxELGVBRkssRUFHTGMsTUFISyxDQUFQO0FBS0Q7O0FBRUQ7Ozs7Ozs7cUNBSWlCQyxTLEVBQVc7QUFDMUIsV0FBS1AsYUFBTCxHQUFxQk8sU0FBckI7QUFDRDs7QUFFRDs7Ozs7OztzQ0FJa0JBLFMsRUFBVztBQUMzQixXQUFLTixjQUFMLEdBQXNCTSxTQUF0QjtBQUNEOztBQUVEOzs7Ozs7OzswQkFLYUMsRyxFQUFLO0FBQ2hCLFVBQUlBLGVBQWVyQixXQUFuQixFQUFnQztBQUM5QixlQUFPcUIsR0FBUDtBQUNELE9BRkQsTUFFTztBQUNMLGVBQU8sSUFBSXJCLFdBQUosQ0FDTHFCLElBQUlwQixNQURDLEVBRUxvQixJQUFJbkIsU0FGQyxFQUdMbUIsSUFBSWxCLFVBSEMsRUFJTGtCLElBQUlqQixhQUpDLEVBS0xpQixJQUFJaEIsZUFMQyxFQU1MZ0IsSUFBSWYsZUFOQyxDQUFQO0FBUUQ7QUFDRjs7Ozs7O2tCQUdZTixXIiwiZmlsZSI6IkNyZWRlbnRpYWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBKd3RHZW5lcmF0b3IgZnJvbSBcIi4vSnd0R2VuZXJhdG9yXCI7XG5pbXBvcnQgSGFzaEdlbmVyYXRvciBmcm9tIFwiLi9IYXNoR2VuZXJhdG9yXCI7XG5cbi8qKlxuICogUmlnaHQgbm93IG9ubHkga2V5L3NlY3JldCBjcmVkZW50aWFscyBhcmUgc3VwcG9ydGVkLlxuICogSG93ZXZlciwgaW4gdGltZSBKV1Qgd2lsbCBhbHNvIGJlIHN1cHBvcnRlZC5cbiAqIFRoZSBgQ3JlZGVudGlhbHNgIG9iamVjdCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGlLZXkgLSBBIE5leG1vIEFQSSBLZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGlTZWNyZXQgLSBBIE5leG1vIEFQSSBTZWNyZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXBwbGljYXRpb25JZF0gLSBBIE5leG1vIEFwcGxpY2F0aW9uIElEXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IFtwcml2YXRlS2V5XSAtICBXaGVuIGEgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBpdCBzaG91bGRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHJlcHJlc2VudCB0aGUgcGF0aCB0byB0aGUgcHJpdmF0ZSBrZXksIG9yIHRoZSBhY3R1YWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBrZXkgaW4gc3RyaW5nIGZvcm1hdC4gSWYgYSBCdWZmZXIgaXMgcGFzc2VkIHRoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIHRoZSBrZXkgcmVhZCBmcm9tIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2lnbmF0dXJlU2VjcmV0XSAtIEEgTmV4bW8gc2lnbmF0dXJlIFNlY3JldFxuICogQHBhcmFtIHtzdHJpbmd9IFtzaWduYXR1cmVNZXRob2RdIC0gQSBOZXhtbyBjb21wYXRpYmxlIHJlcXVlc3Qgc2lnbmluZyBtZXRob2RcbiAqL1xuY2xhc3MgQ3JlZGVudGlhbHMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBhcGlLZXksXG4gICAgYXBpU2VjcmV0LFxuICAgIHByaXZhdGVLZXksXG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBzaWduYXR1cmVTZWNyZXQsXG4gICAgc2lnbmF0dXJlTWV0aG9kXG4gICkge1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMuYXBpU2VjcmV0ID0gYXBpU2VjcmV0O1xuXG4gICAgdGhpcy5wcml2YXRlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmFwcGxpY2F0aW9uSWQgPSBhcHBsaWNhdGlvbklkO1xuXG4gICAgdGhpcy5zaWduYXR1cmVTZWNyZXQgPSBzaWduYXR1cmVTZWNyZXQ7XG4gICAgdGhpcy5zaWduYXR1cmVNZXRob2QgPSBzaWduYXR1cmVNZXRob2Q7XG5cbiAgICBpZiAocHJpdmF0ZUtleSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgdGhpcy5wcml2YXRlS2V5ID0gcHJpdmF0ZUtleTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHByaXZhdGVLZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIHByaXZhdGVLZXkuc3RhcnRzV2l0aChcIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVwiKVxuICAgICkge1xuICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEJ1ZmZlcihwcml2YXRlS2V5KTtcbiAgICB9IGVsc2UgaWYgKHByaXZhdGVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHByaXZhdGVLZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBcIiR7cHJpdmF0ZUtleX1cIiBub3QgZm91bmQuYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnByaXZhdGVLZXkgPSBmcy5yZWFkRmlsZVN5bmMocHJpdmF0ZUtleSk7XG4gICAgfVxuXG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgdGhpcy5fand0R2VuZXJhdG9yID0gbmV3IEp3dEdlbmVyYXRvcigpO1xuICAgIHRoaXMuX2hhc2hHZW5lcmF0b3IgPSBuZXcgSGFzaEdlbmVyYXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgSnd0IHVzaW5nIHRoZSBQcml2YXRlIEtleSBpbiB0aGUgQ3JlZGVudGlhbHMuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNyZWRlbnRpYWxzLmFwcGxpY2F0aW9uSWQgd2lsbCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIHRva2VuLlxuICAgKiBIb3dldmVyLCB0aGlzIGNhbiBiZSBvdmVyd3JpdHRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcHBsaWNhdGlvbklkXSBhbiBhcHBsaWNhdGlvbiBJRCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgIGRlZmF1bHQgQ3JlZGVudGlhbHMuYXBwbGljYXRpb25JZCB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBKV1RcbiAgICovXG4gIGdlbmVyYXRlSnd0KFxuICAgIGFwcGxpY2F0aW9uSWQgPSB0aGlzLmFwcGxpY2F0aW9uSWQsXG4gICAgcHJpdmF0ZUtleSA9IHRoaXMucHJpdmF0ZUtleVxuICApIHtcbiAgICB2YXIgY2xhaW1zID0ge1xuICAgICAgYXBwbGljYXRpb25faWQ6IGFwcGxpY2F0aW9uSWRcbiAgICB9O1xuICAgIHZhciB0b2tlbiA9IHRoaXMuX2p3dEdlbmVyYXRvci5nZW5lcmF0ZShwcml2YXRlS2V5LCBjbGFpbXMpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGdlbmVyYXRlU2lnbmF0dXJlKFxuICAgIHBhcmFtcyxcbiAgICBzaWduYXR1cmVTZWNyZXQgPSB0aGlzLnNpZ25hdHVyZVNlY3JldCxcbiAgICBzaWduYXR1cmVNZXRob2QgPSB0aGlzLnNpZ25hdHVyZU1ldGhvZFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5faGFzaEdlbmVyYXRvci5nZW5lcmF0ZShcbiAgICAgIHNpZ25hdHVyZU1ldGhvZCxcbiAgICAgIHNpZ25hdHVyZVNlY3JldCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKi9cbiAgX3NldEp3dEdlbmVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICB0aGlzLl9qd3RHZW5lcmF0b3IgPSBnZW5lcmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKi9cbiAgX3NldEhhc2hHZW5lcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgdGhpcy5faGFzaEdlbmVyYXRvciA9IGdlbmVyYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgY3JlZGVudGlhbHMgaW5zdGFuY2UgaXMgdXNlZC5cbiAgICpcbiAgICogS2V5L1NlY3JldCBjcmVkZW50aWFscyBhcmUgb25seSBzdXBwb3J0ZWQgYXQgcHJlc2VudC5cbiAgICovXG4gIHN0YXRpYyBwYXJzZShvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbHMoXG4gICAgICAgIG9iai5hcGlLZXksXG4gICAgICAgIG9iai5hcGlTZWNyZXQsXG4gICAgICAgIG9iai5wcml2YXRlS2V5LFxuICAgICAgICBvYmouYXBwbGljYXRpb25JZCxcbiAgICAgICAgb2JqLnNpZ25hdHVyZVNlY3JldCxcbiAgICAgICAgb2JqLnNpZ25hdHVyZU1ldGhvZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3JlZGVudGlhbHM7XG4iXX0= |
\ | No newline at end of file |