HTML bugfix: Incorrect URL resolution on redirected pages (#2315)

This commit is contained in:
Imran Remtulla
2025-06-13 16:49:59 -04:00
parent b539f0a926
commit 5f971dcddb
3 changed files with 15 additions and 8 deletions

View File

@ -9,6 +9,13 @@ import 'package:obtainium/providers/apps_provider.dart';
import 'package:obtainium/providers/source_provider.dart';
String ensureAbsoluteUrl(String ambiguousUrl, Uri referenceAbsoluteUrl) {
try {
if (Uri.parse(ambiguousUrl).isAbsolute) {
return ambiguousUrl; // #2315
}
} catch (e) {
//
}
return referenceAbsoluteUrl.resolve(ambiguousUrl).toString();
}

View File

@ -360,8 +360,8 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
}
var responseWithClient =
await sourceRequestStreamResponse('GET', url, reqHeaders, {});
HttpClient responseClient = responseWithClient.key;
HttpClientResponse response = responseWithClient.value;
HttpClient responseClient = responseWithClient.value.key;
HttpClientResponse response = responseWithClient.value.value;
sink ??= tempDownloadedFile.openWrite(mode: FileMode.writeOnly);
// Perform the download

View File

@ -511,7 +511,7 @@ HttpClient createHttpClient(bool insecure) {
return client;
}
Future<MapEntry<HttpClient, HttpClientResponse>> sourceRequestStreamResponse(
Future<MapEntry<Uri, MapEntry<HttpClient, HttpClientResponse>>> sourceRequestStreamResponse(
String method,
String url,
Map<String, String>? requestHeaders,
@ -551,7 +551,7 @@ Future<MapEntry<HttpClient, HttpClientResponse>> sourceRequestStreamResponse(
}
}
return MapEntry(httpClient, response);
return MapEntry(currentUrl, MapEntry(httpClient, response));
}
throw ObtainiumError('Too many redirects ($maxRedirects)');
}
@ -637,14 +637,14 @@ abstract class AppSource {
{bool followRedirects = true, Object? postBody}) async {
var method = postBody == null ? 'GET' : 'POST';
var requestHeaders = await getRequestHeaders(additionalSettings);
var streamedResponseAndClient = await sourceRequestStreamResponse(
var streamedResponseUrlWithResponseAndClient = await sourceRequestStreamResponse(
method, url, requestHeaders, additionalSettings,
followRedirects: followRedirects, postBody: postBody);
return await httpClientResponseStreamToFinalResponse(
streamedResponseAndClient.key,
streamedResponseUrlWithResponseAndClient.value.key,
method,
url,
streamedResponseAndClient.value);
streamedResponseUrlWithResponseAndClient.key.toString(),
streamedResponseUrlWithResponseAndClient.value.value);
}
void runOnAddAppInputChange(String inputUrl) {