async getFormActionBody()

in common/lib/plugins/federated_auth/adfs_credentials_provider_factory.ts [108:163]


  async getFormActionBody(uri: string, parameters: Record<string, string>, props: Map<string, any>): Promise<string> {
    logger.debug(Messages.get("AdfsCredentialsProviderFactory.signOnPagePostActionUrl", uri));
    SamlUtils.validateUrl(uri);
    wrapper(axios);
    const jar = new CookieJar();
    const httpsAgentOptions = { ...WrapperProperties.HTTPS_AGENT_OPTIONS.get(props), ...{ cookies: { jar } } };
    const httpsAgent = new HttpsCookieAgent(httpsAgentOptions);

    const data = stringify(parameters);

    const postConfig = {
      method: "post",
      maxBodyLength: Infinity,
      headers: {
        "Content-Type": "application/x-www-form-urlencoded"
      },
      url: uri,
      httpsAgent,
      maxRedirects: 0,
      data,
      withCredentials: true
    };

    try {
      // First post which results in redirect
      await axios.request(postConfig);
      return "";
    } catch (e: any) {
      if (!e.response) {
        throw e;
      }
      // After redirect, try get request, fail if not redirect
      if (Math.floor(e.response.status / 100) !== 3) {
        throw new AwsWrapperError(
          Messages.get("AdfsCredentialsProviderFactory.signOnPagePostActionRequestFailed", e.response.status, e.response.statusText, e.message)
        );
      }
      const url = e.response.headers.location;
      const redirectConfig = {
        maxBodyLength: Infinity,
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        httpsAgent,
        withCredentials: true
      };
      try {
        const getResp = await axios.get(url, redirectConfig);
        return getResp.data;
      } catch (e: any) {
        throw new AwsWrapperError(
          Messages.get("AdfsCredentialsProviderFactory.signOnPagePostActionRequestFailed", e.response.status, e.response.statusText, e.message)
        );
      }
    }
  }