diff --git a/app/lib/features/geckoview/features/browser/presentation/dialogs/open_shared_content.dart b/app/lib/features/geckoview/features/browser/presentation/dialogs/open_shared_content.dart index dccaf200..8a30a1ac 100644 --- a/app/lib/features/geckoview/features/browser/presentation/dialogs/open_shared_content.dart +++ b/app/lib/features/geckoview/features/browser/presentation/dialogs/open_shared_content.dart @@ -25,6 +25,7 @@ import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:weblibre/features/geckoview/domain/repositories/tab.dart'; import 'package:weblibre/features/geckoview/features/tabs/data/models/container_data.dart'; +import 'package:weblibre/features/geckoview/features/tabs/domain/providers/selected_container.dart'; import 'package:weblibre/features/geckoview/features/tabs/presentation/widgets/container_chips.dart'; import 'package:weblibre/utils/form_validators.dart'; @@ -69,8 +70,16 @@ class OpenSharedContent extends HookConsumerWidget { child: ContainerChips( displayMenu: false, selectedContainer: selectedContainer.value, - onSelected: (container) { - selectedContainer.value = container; + onSelected: (container) async { + if (container != null) { + if (await ref + .read(selectedContainerProvider.notifier) + .authenticateContainer(container)) { + selectedContainer.value = container; + } + } else { + selectedContainer.value = container; + } }, onDeleted: (container) { selectedContainer.value = null; diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart index ef1f9351..92c5a5eb 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart @@ -100,8 +100,16 @@ class TabSearch extends HookConsumerWidget { ContainerChips( displayMenu: false, selectedContainer: selectedContainer.value, - onSelected: (container) { - selectedContainer.value = container; + onSelected: (container) async { + if (container != null) { + if (await ref + .read(selectedContainerProvider.notifier) + .authenticateContainer(container)) { + selectedContainer.value = container; + } + } else { + selectedContainer.value = container; + } }, onDeleted: (container) { selectedContainer.value = null; diff --git a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart index ccc0ae84..0c43e6f3 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.dart @@ -45,30 +45,35 @@ class SelectedContainer extends _$SelectedContainer { return null; } + Future authenticateContainer(ContainerData container) async { + var passAuth = false; + if (container.metadata.authSettings.authenticationRequired) { + final authResult = await ref + .read(localAuthenticationServiceProvider.notifier) + .authenticate( + authKey: 'container_access::${container.id}', + localizedReason: 'Require authentication for container', + settings: container.metadata.authSettings, + useAuthCache: true, + ); + + if (authResult) { + passAuth = true; + } + } else { + passAuth = true; + } + + return passAuth; + } + Future setContainerId(String id) async { final container = await ref .read(containerRepositoryProvider.notifier) .getContainerData(id); if (container != null) { - var passAuth = false; - if (container.metadata.authSettings.authenticationRequired) { - final authResult = await ref - .read(localAuthenticationServiceProvider.notifier) - .authenticate( - authKey: 'container_access::${container.id}', - localizedReason: 'Require authentication for container', - settings: container.metadata.authSettings, - useAuthCache: true, - ); - - if (authResult) { - passAuth = true; - } - } else { - passAuth = true; - } - + final passAuth = await authenticateContainer(container); if (passAuth) { if (container.metadata.useProxy) { final proxyPluginHealthy = await GeckoContainerProxyService() diff --git a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart index b23f8182..82d555fe 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart @@ -41,7 +41,7 @@ final class SelectedContainerProvider } } -String _$selectedContainerHash() => r'9e9a9b5e3c91ff1fbf8544e329524f8e064587fe'; +String _$selectedContainerHash() => r'94d68a5b8f2746166ab2269afb6cd50c7c7599bf'; abstract class _$SelectedContainer extends $Notifier { String? build();