fix(core): Apply correct hostname to redirected requests (#8674)

This commit is contained in:
Elias Meire 2024-02-20 13:23:36 +01:00 committed by GitHub
parent c943a51a28
commit 0e36aeb421
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -252,6 +252,24 @@ const getHostFromRequestObject = (
}
};
const getBeforeRedirectFn =
(agentOptions: AgentOptions, axiosConfig: AxiosRequestConfig) =>
(redirectedRequest: Record<string, any>) => {
const redirectAgent = new Agent({
...agentOptions,
servername: redirectedRequest.hostname,
});
redirectedRequest.agent = redirectAgent;
redirectedRequest.agents.https = redirectAgent;
if (axiosConfig.headers?.Authorization) {
redirectedRequest.headers.Authorization = axiosConfig.headers.Authorization;
}
if (axiosConfig.auth) {
redirectedRequest.auth = `${axiosConfig.auth.username}:${axiosConfig.auth.password}`;
}
};
export async function parseRequestObject(requestObject: IRequestOptions) {
// This function is a temporary implementation
// That translates all http requests done via
@ -475,22 +493,6 @@ export async function parseRequestObject(requestObject: IRequestOptions) {
axiosConfig.maxRedirects = 0;
}
axiosConfig.beforeRedirect = (redirectedRequest) => {
if (axiosConfig.headers?.Authorization) {
redirectedRequest.headers.Authorization = axiosConfig.headers.Authorization;
}
if (axiosConfig.auth) {
redirectedRequest.auth = `${axiosConfig.auth.username}:${axiosConfig.auth.password}`;
}
};
if (requestObject.rejectUnauthorized === false) {
axiosConfig.httpsAgent = new Agent({
rejectUnauthorized: false,
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT,
});
}
const host = getHostFromRequestObject(requestObject);
const agentOptions: AgentOptions = {};
if (host) {
@ -502,6 +504,8 @@ export async function parseRequestObject(requestObject: IRequestOptions) {
}
axiosConfig.httpsAgent = new Agent(agentOptions);
axiosConfig.beforeRedirect = getBeforeRedirectFn(agentOptions, axiosConfig);
if (requestObject.timeout !== undefined) {
axiosConfig.timeout = requestObject.timeout;
}
@ -894,6 +898,8 @@ function convertN8nRequestToAxios(n8nRequest: IHttpRequestOptions): AxiosRequest
}
axiosRequest.httpsAgent = new Agent(agentOptions);
axiosRequest.beforeRedirect = getBeforeRedirectFn(agentOptions, axiosRequest);
if (n8nRequest.arrayFormat !== undefined) {
axiosRequest.paramsSerializer = (params) => {
return stringify(params, { arrayFormat: n8nRequest.arrayFormat });