diff --git a/lib/providers/seerr_api_provider.dart b/lib/providers/seerr_api_provider.dart index da963c0c9..d1cf607cf 100644 --- a/lib/providers/seerr_api_provider.dart +++ b/lib/providers/seerr_api_provider.dart @@ -11,6 +11,8 @@ import 'package:fladder/providers/user_provider.dart'; import 'package:fladder/seerr/seerr_chopper_service.dart'; import 'package:fladder/seerr/seerr_json_converter.dart'; import 'package:fladder/util/fladder_config.dart'; +import 'package:fladder/util/seerr_http_client.dart' + if (dart.library.html) 'package:fladder/util/seerr_http_client_web.dart'; part 'seerr_api_provider.g.dart'; @@ -21,6 +23,7 @@ class SeerrApi extends _$SeerrApi { ref.watch(userProvider.select((u) => u?.seerrCredentials)); final chopperClient = ChopperClient( + client: createSeerrHttpClient(), converter: const SeerrJsonConverter(), interceptors: [ SeerrRequest(ref), @@ -89,7 +92,8 @@ class SeerrRequest implements Interceptor { Map _authHeaders({required String apiKey, required String cookie}) { if (apiKey.isNotEmpty) return {'X-Api-Key': apiKey}; - if (cookie.isNotEmpty) return {'Cookie': cookie}; + if (cookie.isNotEmpty && cookie != kBrowserManagedCookie) return {'Cookie': cookie}; + if (cookie == kBrowserManagedCookie) return const {}; return const {}; } diff --git a/lib/providers/seerr_service_provider.dart b/lib/providers/seerr_service_provider.dart index 48e244bcc..292c7ee2e 100644 --- a/lib/providers/seerr_service_provider.dart +++ b/lib/providers/seerr_service_provider.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:chopper/chopper.dart'; +import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fladder/models/items/images_models.dart'; @@ -11,6 +12,7 @@ import 'package:fladder/seerr/seerr_chopper_service.dart'; import 'package:fladder/seerr/seerr_models.dart'; const tmbdUrl = 'https://image.tmdb.org/t/p/original'; +const kBrowserManagedCookie = '__browser_managed__'; class SeerrService { SeerrService(this.ref, this._api); @@ -632,7 +634,8 @@ class SeerrService { SeerrDashboardPosterModel? posterFromDiscoverItem(SeerrDiscoverItem item) => _posterFromDiscoverItem(item); - Future authenticateLocal({required String email, required String password, Map? headers}) async { + Future authenticateLocal( + {required String email, required String password, Map? headers}) async { final response = await _api.authenticateLocal( SeerrAuthLocalBody(email: email, password: password), headers: headers, @@ -647,14 +650,16 @@ class SeerrService { return cookie; } - Future authenticateJellyfin({required String username, required String password, Map? headers}) async { + Future authenticateJellyfin( + {required String username, required String password, Map? headers}) async { final response = await _authenticateJellyfin(username: username, password: password, headers: headers); return _requireSessionCookie(response, label: 'Jellyfin'); } Future logout() async => await _api.logout(); - Future> _authenticateJellyfin({required String username, required String password, Map? headers}) async { + Future> _authenticateJellyfin( + {required String username, required String password, Map? headers}) async { var response = await _api.authenticateJellyfin( SeerrAuthJellyfinBody(username: username, password: password), headers: headers, @@ -697,7 +702,9 @@ class SeerrService { String? _extractSessionCookie(Response response) { final setCookie = response.base.headers['set-cookie']; - if (setCookie == null || setCookie.isEmpty) return null; + if (setCookie == null || setCookie.isEmpty) { + return kIsWeb ? kBrowserManagedCookie : null; + } return setCookie.split(';').first.trim(); } } diff --git a/lib/util/seerr_http_client.dart b/lib/util/seerr_http_client.dart new file mode 100644 index 000000000..29bf93bc8 --- /dev/null +++ b/lib/util/seerr_http_client.dart @@ -0,0 +1,3 @@ +import 'package:http/http.dart' as http; + +http.Client createSeerrHttpClient() => http.Client(); diff --git a/lib/util/seerr_http_client_web.dart b/lib/util/seerr_http_client_web.dart new file mode 100644 index 000000000..c7c8b9ab0 --- /dev/null +++ b/lib/util/seerr_http_client_web.dart @@ -0,0 +1,6 @@ +import 'package:http/browser_client.dart'; +import 'package:http/http.dart' as http; + +http.Client createSeerrHttpClient() { + return BrowserClient()..withCredentials = true; +}