in alibabacloud-gateway-oss/ts/src/client.ts [128:229]
async modifyRequest(context: $SPI.InterceptorContext, attributeMap: $SPI.AttributeMap): Promise<void> {
let request = context.request;
let hostMap : {[key: string ]: string} = { };
if (!Util.isUnset(request.hostMap)) {
hostMap = request.hostMap;
}
let bucketName = hostMap["bucket"];
if (Util.isUnset(bucketName)) {
bucketName = "";
}
if (!Util.isUnset(request.headers["x-oss-meta-*"])) {
let tmp : any = Util.parseJSON(request.headers["x-oss-meta-*"]);
let mapData : {[key: string ]: any} = Util.assertAsMap(tmp);
let metaData : {[key: string ]: string} = Util.stringifyMapValue(mapData);
let metaKeySet : string[] = Map.keySet(metaData);
request.headers["x-oss-meta-*"] = null;
for (let key of metaKeySet) {
let newKey = `x-oss-meta-${key}`;
request.headers[newKey] = metaData[key];
}
}
let config = context.configuration;
let regionId = config.regionId;
if (Util.isUnset(regionId) || Util.empty(regionId)) {
regionId = await this.getRegionIdFromEndpoint(config.endpoint);
}
let credential : Credential = request.credential;
let accessKeyId = await credential.getAccessKeyId();
let accessKeySecret = await credential.getAccessKeySecret();
let securityToken = await credential.getSecurityToken();
if (!Util.empty(securityToken)) {
request.headers["x-oss-security-token"] = securityToken;
}
if (!Util.isUnset(request.body)) {
if (String.equals(request.reqBodyType, "xml")) {
let reqBodyMap = Util.assertAsMap(request.body);
// for python:
// xml_str = OSS_UtilClient.to_xml(req_body_map)
let xmlStr = XML.toXML(reqBodyMap);
request.stream = new $tea.BytesReadable(xmlStr);
request.headers["content-type"] = "application/xml";
request.headers["content-md5"] = EncodeUtil.base64EncodeToString(SignatureUtil.MD5Sign(xmlStr));
} else if (String.equals(request.reqBodyType, "json")) {
let reqBodyStr = Util.toJSONString(request.body);
request.stream = new $tea.BytesReadable(reqBodyStr);
request.headers["content-type"] = "application/json; charset=utf-8";
} else if (String.equals(request.reqBodyType, "formData")) {
let reqBodyForm = Util.assertAsMap(request.body);
request.stream = new $tea.BytesReadable(OpenApiUtil.toForm(reqBodyForm));
request.headers["content-type"] = "application/x-www-form-urlencoded";
} else if (String.equals(request.reqBodyType, "binary")) {
attributeMap.key = {
crc: "",
md5: "",
};
request.stream = OSSUtil.inject(request.stream, attributeMap.key);
request.headers["content-type"] = "application/octet-stream";
}
}
let host = await this.getHost(config.endpointType, bucketName, config.endpoint, context);
request.headers = {
host: host,
date: Util.getDateUTCString(),
'user-agent': request.userAgent,
...request.headers,
};
let originPath = request.pathname;
let originQuery = request.query;
if (!Util.empty(originPath)) {
let pathAndQueries : string[] = String.split(originPath, `?`, 2);
request.pathname = pathAndQueries[0];
if (Util.equalNumber(Array.size(pathAndQueries), 2)) {
let pathQueries : string[] = String.split(pathAndQueries[1], "&", null);
for (let sub of pathQueries) {
let item : string[] = String.split(sub, "=", null);
let queryKey : string = item[0];
let queryValue : string = "";
if (Util.equalNumber(Array.size(item), 2)) {
queryValue = item[1];
}
if (Util.empty(originQuery[queryKey])) {
request.query[queryKey] = queryValue;
}
}
}
}
let signatureVersion = Util.defaultString(request.signatureVersion, "v1");
request.headers["authorization"] = await this.getAuthorization(signatureVersion, bucketName, request.pathname, request.method, request.query, request.headers, accessKeyId, accessKeySecret, regionId);
}