in alibabacloud-gateway-pop/ts/src/client.ts [49:136]
async modifyRequest(context: $SPI.InterceptorContext, attributeMap: $SPI.AttributeMap): Promise<void> {
let request = context.request;
let config = context.configuration;
let date = OpenApiUtil.getTimestamp();
request.headers = {
host: config.endpoint,
'x-acs-version': request.version,
'x-acs-action': request.action,
'user-agent': request.userAgent,
'x-acs-date': date,
'x-acs-signature-nonce': Util.getNonce(),
accept: "application/json",
...request.headers,
};
let signatureAlgorithm : string = Util.defaultString(request.signatureAlgorithm, this._sha256);
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 (Util.equalString(signatureAlgorithm, this._sm3)) {
request.headers["x-acs-content-sm3"] = hashedRequestPayload;
} else {
request.headers["x-acs-content-sha256"] = hashedRequestPayload;
}
if (!Util.equalString(request.authType, "Anonymous")) {
let credential : Credential = request.credential;
if (Util.isUnset(credential)) {
throw $tea.newError({
code: "ParameterMissing",
message: "'config.credential' can not be unset",
});
}
let credentialModel = await credential.getCredential();
if (!Util.empty(credentialModel.providerName)) {
request.headers["x-acs-credentials-provider"] = credentialModel.providerName;
}
let authType = credentialModel.type;
if (Util.equalString(authType, "bearer")) {
let bearerToken = credential.getBearerToken();
request.headers["x-acs-bearer-token"] = bearerToken;
request.headers["x-acs-signature-type"] = "BEARERTOKEN";
request.headers["Authorization"] = `Bearer ${bearerToken}`;
} else if (Util.equalString(authType, "id_token")) {
let idToken = credentialModel.securityToken;
request.headers["x-acs-zero-trust-idtoken"] = idToken;
} else {
let accessKeyId = credentialModel.accessKeyId;
let accessKeySecret = credentialModel.accessKeySecret;
let securityToken = credentialModel.securityToken;
if (!Util.empty(securityToken)) {
request.headers["x-acs-accesskey-id"] = accessKeyId;
request.headers["x-acs-security-token"] = securityToken;
}
let dateNew = String.subString(date, 0, 10);
dateNew = String.replace(dateNew, "-", "", null);
let region = this.getRegion(request.productId, config.endpoint, config.regionId);
let signingkey = await this.getSigningkey(signatureAlgorithm, accessKeySecret, request.productId, region, dateNew);
request.headers["Authorization"] = await this.getAuthorization(request.pathname, request.method, request.query, request.headers, signatureAlgorithm, hashedRequestPayload, accessKeyId, signingkey, request.productId, region, dateNew);
}
}
}