async modifyRequest()

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);
  }