Fix: redirect to relative path (#4167)

This commit is contained in:
naman-bruno
2025-03-06 14:26:02 +05:30
committed by GitHub
parent 3169e6cdf4
commit 7af7ff92bf
2 changed files with 23 additions and 4 deletions

View File

@@ -72,7 +72,7 @@ const checkConnection = (host, port) =>
function makeAxiosInstance({ function makeAxiosInstance({
proxyMode = 'off', proxyMode = 'off',
proxyConfig = {}, proxyConfig = {},
requestMaxRedirects = 0, requestMaxRedirects = 5,
httpsAgentRequestFields = {}, httpsAgentRequestFields = {},
interpolationOptions = {} interpolationOptions = {}
} = {}) { } = {}) {
@@ -278,7 +278,20 @@ function makeAxiosInstance({
// Increase redirect count // Increase redirect count
redirectCount++; redirectCount++;
const redirectUrl = error.response.headers.location; const locationHeader = error.response.headers.location;
let redirectUrl = locationHeader;
// Handle relative URLs by resolving them against the original request URL
if (locationHeader && !locationHeader.match(/^https?:\/\//i)) {
// It's a relative URL, resolve it against the original URL
redirectUrl = URL.resolve(error.config.url, locationHeader);
metadata.timeline.push({
timestamp: new Date(),
type: 'info',
message: `Resolving relative redirect URL: ${locationHeader}${redirectUrl}`,
});
}
if (preferencesUtil.shouldStoreCookies()) { if (preferencesUtil.shouldStoreCookies()) {
saveCookies(redirectUrl, error.response.headers); saveCookies(redirectUrl, error.response.headers);
@@ -294,7 +307,7 @@ function makeAxiosInstance({
}; };
if (preferencesUtil.shouldSendCookies()) { if (preferencesUtil.shouldSendCookies()) {
const cookieString = getCookieStringForUrl(error.response.headers.location); const cookieString = getCookieStringForUrl(redirectUrl);
if (cookieString && typeof cookieString === 'string' && cookieString.length) { if (cookieString && typeof cookieString === 'string' && cookieString.length) {
requestConfig.headers['cookie'] = cookieString; requestConfig.headers['cookie'] = cookieString;
} }

View File

@@ -579,7 +579,13 @@ const configureRequest = async (
request = newRequest request = newRequest
let requestMaxRedirects = request.maxRedirects let requestMaxRedirects = request.maxRedirects
request.maxRedirects = 0 // Don't override maxRedirects here, let it be controlled by the request object
// request.maxRedirects = 0
// Set default value for requestMaxRedirects if not explicitly set
if (requestMaxRedirects === undefined) {
requestMaxRedirects = 5; // Default to 5 redirects
}
let axiosInstance = makeAxiosInstance({ let axiosInstance = makeAxiosInstance({
proxyMode, proxyMode,