From 257b30a1e94a57604e199d2582d5a74dd3694d3f Mon Sep 17 00:00:00 2001 From: Ankit Mahato Date: Tue, 5 Aug 2025 12:49:33 +0530 Subject: [PATCH] Add authData parameter to HTTP request functions Introduces an optional AuthModel parameter to sendHttpRequest and streamHttpRequest, allowing authentication handling for HTTP requests. Updates all usages and tests to pass null for the new parameter where authentication is not required. --- .../better_networking_example/lib/main.dart | 1 + .../lib/services/http_service.dart | 26 +++++++++++++++--- .../test/services/request_types/gql_test.dart | 3 +++ .../services/request_types/rest_test.dart | 27 ++++++++++++++++--- .../test/services/request_types/sse_test.dart | 14 ++++++++-- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/packages/better_networking/better_networking_example/lib/main.dart b/packages/better_networking/better_networking_example/lib/main.dart index 996867e4..a6d4c6e4 100644 --- a/packages/better_networking/better_networking_example/lib/main.dart +++ b/packages/better_networking/better_networking_example/lib/main.dart @@ -109,6 +109,7 @@ class _BetterNetworkingExampleState extends State { final stream = await streamHttpRequest( 'S1', APIType.rest, + null, HttpRequestModel( method: HTTPVerb.post, url: 'http://localhost:11434/v1/chat/completions', diff --git a/packages/better_networking/lib/services/http_service.dart b/packages/better_networking/lib/services/http_service.dart index f2ce2adf..215e3eac 100644 --- a/packages/better_networking/lib/services/http_service.dart +++ b/packages/better_networking/lib/services/http_service.dart @@ -158,6 +158,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequestV1( Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( String requestId, APIType apiType, + AuthModel? authData, HttpRequestModel requestModel, { SupportedUriSchemes defaultUriScheme = kDefaultUriScheme, bool noSSL = false, @@ -165,6 +166,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( final stream = await streamHttpRequest( requestId, apiType, + authData, requestModel, defaultUriScheme: defaultUriScheme, noSSL: noSSL, @@ -204,7 +206,8 @@ http.Request prepareHttpRequest({ Future> streamHttpRequest( String requestId, APIType apiType, - HttpRequestModel requestModel, { + AuthModel? authData, + HttpRequestModel httpRequestModel, { SupportedUriSchemes defaultUriScheme = kDefaultUriScheme, bool noSSL = false, }) async { @@ -249,9 +252,24 @@ Future> streamHttpRequest( } final client = httpClientManager.createClient(requestId, noSSL: noSSL); + + HttpRequestModel authenticatedHttpRequestModel = httpRequestModel.copyWith(); + + try { + if (authData != null && authData.type != APIAuthType.none) { + authenticatedHttpRequestModel = await handleAuth( + httpRequestModel, + authData, + ); + } + } catch (e) { + await _addErrorMessage(e.toString()); + return controller.stream; + } + final (uri, uriError) = getValidRequestUri( - requestModel.url, - requestModel.enabledParams, + authenticatedHttpRequestModel.url, + authenticatedHttpRequestModel.enabledParams, defaultUriScheme: defaultUriScheme, ); @@ -264,7 +282,7 @@ Future> streamHttpRequest( final streamedResponse = await makeStreamedRequest( client: client, uri: uri, - requestModel: requestModel, + requestModel: authenticatedHttpRequestModel, apiType: apiType, ); diff --git a/packages/better_networking/test/services/request_types/gql_test.dart b/packages/better_networking/test/services/request_types/gql_test.dart index 5cf8667a..b8dec1bc 100644 --- a/packages/better_networking/test/services/request_types/gql_test.dart +++ b/packages/better_networking/test/services/request_types/gql_test.dart @@ -24,6 +24,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_test', APIType.graphql, + null, model, ); @@ -54,6 +55,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_bad', APIType.graphql, + null, model, ); final output = await stream.first; @@ -76,6 +78,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_test_cancellation', APIType.graphql, + null, model, ); httpClientManager.cancelRequest('graphql_test_cancellation'); diff --git a/packages/better_networking/test/services/request_types/rest_test.dart b/packages/better_networking/test/services/request_types/rest_test.dart index ae12a32b..2fea7389 100644 --- a/packages/better_networking/test/services/request_types/rest_test.dart +++ b/packages/better_networking/test/services/request_types/rest_test.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; @@ -19,6 +18,7 @@ void main() { final (resp, dur, err) = await sendHttpRequest( 'get_test', APIType.rest, + null, model, ); final output = jsonDecode(resp?.body ?? '{}'); @@ -59,6 +59,7 @@ void main() { final (resp, dur, err) = await sendHttpRequest( 'mpreq', APIType.rest, + null, model, ); final output = jsonDecode(resp?.body ?? '{}'); @@ -86,7 +87,12 @@ void main() { NameValueModel(name: 'Accept', value: 'application/json'), ], ); - final stream = await streamHttpRequest('get_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'get_test', + APIType.rest, + null, + model, + ); final output = await stream.first; expect( output?.$2?.statusCode == 200, @@ -106,7 +112,12 @@ void main() { body: '{"title": "foo", "body": "bar", "userId": 1}', ); - final stream = await streamHttpRequest('post_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'post_test', + APIType.rest, + null, + model, + ); final output = await stream.first; expect( @@ -124,6 +135,7 @@ void main() { final stream = await streamHttpRequest( 'empty_url_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -139,6 +151,7 @@ void main() { final stream = await streamHttpRequest( 'invalid_url_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -159,6 +172,7 @@ void main() { final stream = await streamHttpRequest( 'large_body_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -181,7 +195,12 @@ void main() { NameValueModel(name: 'Accept', value: 'application/json'), ], ); - final stream = await streamHttpRequest('get_test_c', APIType.rest, model); + final stream = await streamHttpRequest( + 'get_test_c', + APIType.rest, + null, + model, + ); cancelHttpRequest('get_test_c'); final output = await stream.first; final errMsg = output?.$4; diff --git a/packages/better_networking/test/services/request_types/sse_test.dart b/packages/better_networking/test/services/request_types/sse_test.dart index 3732a9fc..d6971f17 100644 --- a/packages/better_networking/test/services/request_types/sse_test.dart +++ b/packages/better_networking/test/services/request_types/sse_test.dart @@ -13,7 +13,12 @@ void main() { method: HTTPVerb.get, ); - final stream = await streamHttpRequest('sse_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'sse_test', + APIType.rest, + null, + model, + ); final outputs = []; final subscription = stream.listen(outputs.add); @@ -39,7 +44,12 @@ void main() { method: HTTPVerb.get, ); - final stream = await streamHttpRequest('sse_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'sse_test', + APIType.rest, + null, + model, + ); final outputs = []; final subscription = stream.listen(outputs.add);