diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index a70d0d3..72bc931 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -511,73 +511,70 @@ HttpClient createHttpClient(bool insecure) { } Future> sourceRequestStreamResponse( - String method, - String url, - Map? requestHeaders, - Map additionalSettings, - {bool followRedirects = true, - Object? postBody}) async { - var currentUrl = Uri.parse(url); - var redirectCount = 0; - const maxRedirects = 10; - List cookies = []; - while (redirectCount < maxRedirects) { - var httpClient = - createHttpClient(additionalSettings['allowInsecure'] == true); - var request = await httpClient.openUrl(method, currentUrl); - if (requestHeaders != null) { - requestHeaders.forEach((key, value) { - request.headers.set(key, value); - }); - } - request.cookies.addAll(cookies); - request.followRedirects = false; - if (postBody != null) { - request.headers.contentType = ContentType.json; - request.write(jsonEncode(postBody)); - } - final response = await request.close(); - - if (followRedirects && - (response.statusCode >= 300 && response.statusCode <= 399)) { - final location = response.headers.value(HttpHeaders.locationHeader); - if (location != null) { - currentUrl = Uri.parse(ensureAbsoluteUrl(location, currentUrl)); - redirectCount++; - cookies = response.cookies; - httpClient.close(); - continue; - } - } - - return MapEntry(httpClient, response); + String method, + String url, + Map? requestHeaders, + Map additionalSettings, + {bool followRedirects = true, + Object? postBody}) async { + var currentUrl = Uri.parse(url); + var redirectCount = 0; + const maxRedirects = 10; + List cookies = []; + while (redirectCount < maxRedirects) { + var httpClient = + createHttpClient(additionalSettings['allowInsecure'] == true); + var request = await httpClient.openUrl(method, currentUrl); + if (requestHeaders != null) { + requestHeaders.forEach((key, value) { + request.headers.set(key, value); + }); } - throw ObtainiumError('Too many redirects ($maxRedirects)'); + request.cookies.addAll(cookies); + request.followRedirects = false; + if (postBody != null) { + request.headers.contentType = ContentType.json; + request.write(jsonEncode(postBody)); + } + final response = await request.close(); + + if (followRedirects && + (response.statusCode >= 300 && response.statusCode <= 399)) { + final location = response.headers.value(HttpHeaders.locationHeader); + if (location != null) { + currentUrl = Uri.parse(ensureAbsoluteUrl(location, currentUrl)); + redirectCount++; + cookies = response.cookies; + httpClient.close(); + continue; + } + } + + return MapEntry(httpClient, response); } + throw ObtainiumError('Too many redirects ($maxRedirects)'); +} - Future httpClientResponseStreamToFinalResponse( - HttpClient httpClient, - String method, - String url, - HttpClientResponse response) async { - final bytes = - (await response.fold(BytesBuilder(), (b, d) => b..add(d))) - .toBytes(); +Future httpClientResponseStreamToFinalResponse(HttpClient httpClient, + String method, String url, HttpClientResponse response) async { + final bytes = + (await response.fold(BytesBuilder(), (b, d) => b..add(d))) + .toBytes(); - final headers = {}; - response.headers.forEach((name, values) { - headers[name] = values.join(', '); - }); + final headers = {}; + response.headers.forEach((name, values) { + headers[name] = values.join(', '); + }); - httpClient.close(); + httpClient.close(); - return http.Response.bytes( - bytes, - response.statusCode, - headers: headers, - request: http.Request(method, Uri.parse(url)), - ); - } + return http.Response.bytes( + bytes, + response.statusCode, + headers: headers, + request: http.Request(method, Uri.parse(url)), + ); +} abstract class AppSource { List hosts = []; @@ -639,7 +636,8 @@ abstract class AppSource { var method = postBody == null ? 'GET' : 'POST'; var requestHeaders = await getRequestHeaders(additionalSettings); var streamedResponseAndClient = await sourceRequestStreamResponse( - method, url, requestHeaders, additionalSettings); + method, url, requestHeaders, additionalSettings, + followRedirects: followRedirects, postBody: postBody); return await httpClientResponseStreamToFinalResponse( streamedResponseAndClient.key, method,