@studyportals/sp-hs-misc
Version:
Miscellaneous code used in HouseStark's projects
89 lines • 3.14 kB
JavaScript
import * as aws4 from "aws4";
import * as qs from "qs";
import * as URL from "url";
/**
* Signs a SuperAgentRequest using Amazon's AWS Signature Version 4. Make sure that all data
* has been put in the request before calling sign() because this data is used when signing
* the request.
*
* @deprecated Use @studyportals/mb-platform-http-requests
*/
class AWS4RequestSigner {
get aws4Sign() {
return aws4.sign;
}
constructor(accessKeyId, secretAccessKey, sessionToken) {
this.accessKeyId = accessKeyId;
this.secretAccessKey = secretAccessKey;
this.sessionToken = sessionToken;
}
sign(request) {
const headers = this.createHeaders(request);
this.appendHeadersToRequest(request, headers);
return request;
}
getAdditionalRequestOptions(request) {
return {};
}
createHeaders(request) {
const signedAwsRequest = this.getSignedAwsRequest(request);
return signedAwsRequest.headers;
}
getSignedAwsRequest(request) {
const requestOptions = this.getRequestOptions(request);
const credentials = this.getCredentials();
return this.aws4Sign(requestOptions, credentials);
}
getRequestOptions(request) {
const requestUrl = this.getUrlFromRequest(request);
const body = this.getStringifiedBody(request);
return {
host: requestUrl.host,
method: request.method,
path: requestUrl.path,
body: body,
headers: {
"Content-Type": "application/json",
},
...this.getAdditionalRequestOptions(request)
};
}
getUrlFromRequest(request) {
// As done in: https://github.com/bdgamble/superagent-aws-signed-request/blob/master/index.js
const requestAsAny = request;
let url = requestAsAny.url;
if (Object.keys(requestAsAny.qs).length) {
const queryString = qs.stringify(requestAsAny.qs);
url = this.appendQueryString(url, queryString);
}
if (requestAsAny.qsRaw.length > 0) {
const queryString = requestAsAny.qsRaw.join("&");
url = this.appendQueryString(url, queryString);
}
return URL.parse(url);
}
getStringifiedBody(request) {
// As done in: https://github.com/bdgamble/superagent-aws-signed-request/blob/master/index.js
const requestAsAny = request;
const data = requestAsAny._data;
return data ? JSON.stringify(data) : "";
}
getCredentials() {
return {
AccessKeyId: this.accessKeyId,
SecretKey: this.secretAccessKey,
SessionToken: this.sessionToken
};
}
appendHeadersToRequest(request, headers) {
for (const key of Object.keys(headers)) {
const value = headers[key];
request.set(key, value);
}
}
appendQueryString(url, queryString) {
return url + (url.indexOf('?') >= 0 ? '&' : '?') + queryString;
}
}
export { AWS4RequestSigner };
//# sourceMappingURL=aws4-request-signer.class.js.map