in alibabacloud-gateway-pds/ts/src/client.ts [26:122]
async modifyRequest(context: $SPI.InterceptorContext, attributeMap: $SPI.AttributeMap): Promise<void> {
let request = context.request;
let config = context.configuration;
let date = Util.getDateUTCString();
request.headers = {
date: date,
host: config.endpoint,
'x-acs-version': request.version,
'x-acs-action': request.action,
'user-agent': request.userAgent,
'x-acs-signature-nonce': Util.getNonce(),
accept: "application/json",
...request.headers,
};
let signatureAlgorithm: string = Util.defaultString(request.signatureAlgorithm, "ACS4-HMAC-SHA256");
let signatureVersion = Util.defaultString(request.signatureVersion, "v1");
let hashedRequestPayload = EncodeUtil.hexEncode(EncodeUtil.hash(Util.toBytes(""), signatureAlgorithm));
if (!Util.isUnset(request.stream)) {
let tmp = await Util.readAsBytes(request.stream);
hashedRequestPayload = EncodeUtil.hexEncode(EncodeUtil.hash(tmp, signatureAlgorithm));
request.stream = new $tea.BytesReadable(tmp);
request.headers["content-type"] = "application/octet-stream";
} else {
if (!Util.isUnset(request.body)) {
if (Util.equalString(request.reqBodyType, "json")) {
let jsonObj = Util.toJSONString(request.body);
hashedRequestPayload = EncodeUtil.hexEncode(EncodeUtil.hash(Util.toBytes(jsonObj), signatureAlgorithm));
request.stream = new $tea.BytesReadable(jsonObj);
request.headers["content-type"] = "application/json; charset=utf-8";
} else {
let m = Util.assertAsMap(request.body);
let formObj = OpenApiUtil.toForm(m);
hashedRequestPayload = EncodeUtil.hexEncode(EncodeUtil.hash(Util.toBytes(formObj), signatureAlgorithm));
request.stream = new $tea.BytesReadable(formObj);
request.headers["content-type"] = "application/x-www-form-urlencoded";
}
}
}
if (String.equals(signatureVersion, "v4")) {
if (Util.equalString(signatureAlgorithm, "ACS4-HMAC-SM3")) {
request.headers["x-acs-content-sm3"] = hashedRequestPayload;
} else {
request.headers["x-acs-content-sha256"] = hashedRequestPayload;
}
} else {
request.headers["x-acs-signature-method"] = "HMAC-SHA1";
request.headers["x-acs-signature-version"] = "1.0";
}
if (!Util.equalString(request.authType, "Anonymous") && !Util.isUnset(request.credential)) {
let credential: Credential = request.credential;
let credentialModel = await credential.getCredential();
let authType = credentialModel.type;
if (Util.equalString(authType, "bearer")) {
let bearerToken = credentialModel.bearerToken;
request.headers["x-acs-bearer-token"] = bearerToken;
request.headers["Authorization"] = `Bearer ${bearerToken}`;
} else {
let accessKeyId = credentialModel.accessKeyId;
let accessKeySecret = credentialModel.accessKeySecret;
let securityToken = credentialModel.securityToken;
if (!Util.empty(securityToken)) {
request.headers["x-acs-security-token"] = securityToken;
}
let headers: { [key: string]: string } = {};
if (!Util.isUnset(request.headers["content-type"])) {
headers = request.headers;
} else if (String.equals(request.reqBodyType, "formData") && String.equals(request.action, "DownloadFile") && String.equals(request.pathname, "/v2/file/download")) {
let headersArray: string[] = Map.keySet(request.headers);
for (let key of headersArray) {
headers[key] = request.headers[key];
}
headers["content-type"] = "application/x-www-form-urlencoded; charset=UTF-8";
} else {
headers = request.headers;
}
if (String.equals(signatureVersion, "v4")) {
let dateNew = String.subString(date, 0, 10);
let region = this.getRegion(config.endpoint);
let signingkey = await this.getSigningkey(signatureAlgorithm, accessKeySecret, region, dateNew);
request.headers["Authorization"] = await this.getAuthorizationV4(request.pathname, request.method, request.query, headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.productId, region, dateNew);
} else {
request.headers["Authorization"] = await this.getAuthorization(request.pathname, request.method, request.query, headers, accessKeyId, accessKeySecret);
}
}
}
}