1 | "use strict";
|
2 |
|
3 |
|
4 | var __assign = (this && this.__assign) || function () {
|
5 | __assign = Object.assign || function(t) {
|
6 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
7 | s = arguments[i];
|
8 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
9 | t[p] = s[p];
|
10 | }
|
11 | return t;
|
12 | };
|
13 | return __assign.apply(this, arguments);
|
14 | };
|
15 | Object.defineProperty(exports, "__esModule", { value: true });
|
16 | exports.Signer = void 0;
|
17 | var Util_1 = require("./Util");
|
18 | var signatureV4_1 = require("./clients/middleware/signing/signer/signatureV4");
|
19 | var IOT_SERVICE_NAME = 'iotdevicegateway';
|
20 |
|
21 | var AWS_ENDPOINT_REGEX = /([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(.cn)?$/;
|
22 | var Signer = (function () {
|
23 | function Signer() {
|
24 | }
|
25 | |
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | Signer.sign = function (request, accessInfo, serviceInfo) {
|
62 | request.headers = request.headers || {};
|
63 | if (request.body && !request.data) {
|
64 | throw new Error('The attribute "body" was found on the request object. Please use the attribute "data" instead.');
|
65 | }
|
66 | var requestToSign = __assign(__assign({}, request), { body: request.data, url: new URL(request.url) });
|
67 | var options = getOptions(requestToSign, accessInfo, serviceInfo);
|
68 | var signedRequest = (0, signatureV4_1.signRequest)(requestToSign, options);
|
69 |
|
70 |
|
71 | signedRequest.url = signedRequest.url.toString();
|
72 |
|
73 |
|
74 | signedRequest.headers.Authorization = signedRequest.headers.authorization;
|
75 | signedRequest.headers['X-Amz-Security-Token'] =
|
76 | signedRequest.headers['x-amz-security-token'];
|
77 | delete signedRequest.headers.authorization;
|
78 | delete signedRequest.headers['x-amz-security-token'];
|
79 | return signedRequest;
|
80 | };
|
81 | Signer.signUrl = function (urlOrRequest, accessInfo, serviceInfo, expiration) {
|
82 | var urlToSign = typeof urlOrRequest === 'object' ? urlOrRequest.url : urlOrRequest;
|
83 | var method = typeof urlOrRequest === 'object' ? urlOrRequest.method : 'GET';
|
84 | var body = typeof urlOrRequest === 'object' ? urlOrRequest.body : undefined;
|
85 | var presignable = {
|
86 | body: body,
|
87 | method: method,
|
88 | url: new URL(urlToSign),
|
89 | };
|
90 | var options = getOptions(presignable, accessInfo, serviceInfo, expiration);
|
91 | var signedUrl = (0, signatureV4_1.presignUrl)(presignable, options);
|
92 | if (accessInfo.session_token &&
|
93 | !sessionTokenRequiredInSigning(options.signingService)) {
|
94 | signedUrl.searchParams.append(signatureV4_1.TOKEN_QUERY_PARAM, accessInfo.session_token);
|
95 | }
|
96 | return signedUrl.toString();
|
97 | };
|
98 | return Signer;
|
99 | }());
|
100 | exports.Signer = Signer;
|
101 | var getOptions = function (request, accessInfo, serviceInfo, expiration) {
|
102 | var _a = accessInfo !== null && accessInfo !== void 0 ? accessInfo : {}, access_key = _a.access_key, secret_key = _a.secret_key, session_token = _a.session_token;
|
103 | var _b = parseServiceInfo(request.url), urlRegion = _b.region, urlService = _b.service;
|
104 | var _c = serviceInfo !== null && serviceInfo !== void 0 ? serviceInfo : {}, _d = _c.region, region = _d === void 0 ? urlRegion : _d, _e = _c.service, service = _e === void 0 ? urlService : _e;
|
105 | var credentials = __assign({ accessKeyId: access_key, secretAccessKey: secret_key }, (sessionTokenRequiredInSigning(service)
|
106 | ? { sessionToken: session_token }
|
107 | : {}));
|
108 | return __assign({ credentials: credentials, signingDate: Util_1.DateUtils.getDateWithClockOffset(), signingRegion: region, signingService: service }, (expiration && { expiration: expiration }));
|
109 | };
|
110 |
|
111 | var parseServiceInfo = function (url) {
|
112 | var _a;
|
113 | var host = url.host;
|
114 | var matched = (_a = host.match(AWS_ENDPOINT_REGEX)) !== null && _a !== void 0 ? _a : [];
|
115 | var parsed = matched.slice(1, 3);
|
116 | if (parsed[1] === 'es') {
|
117 |
|
118 | parsed = parsed.reverse();
|
119 | }
|
120 | return {
|
121 | service: parsed[0],
|
122 | region: parsed[1],
|
123 | };
|
124 | };
|
125 |
|
126 |
|
127 |
|
128 | var sessionTokenRequiredInSigning = function (service) {
|
129 | return service !== IOT_SERVICE_NAME;
|
130 | };
|