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