async modifyRequest()

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

      }

    }

  }