From bb941f1973395010096e46e339d0d73ab35b6f88 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sat, 24 Feb 2024 01:27:17 +0100 Subject: [PATCH] Handle invalid token --- lib/constants/enums.dart | 2 ++ lib/i18n/strings.g.dart | 8 ++++++-- lib/i18n/strings_en.i18n.json | 3 ++- lib/i18n/strings_es.i18n.json | 3 ++- .../onboarding/provider/connect.provider.dart | 4 +++- .../onboarding/provider/connect.provider.g.dart | 2 +- lib/services/api_client.dart | 12 +++++++++--- 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/constants/enums.dart b/lib/constants/enums.dart index 958ba94..b3fd409 100644 --- a/lib/constants/enums.dart +++ b/lib/constants/enums.dart @@ -3,3 +3,5 @@ enum LoadStatus { loading, loaded, error } enum ConnectionMethod { http, https } enum SelectedTheme { system, light, dark } + +enum AuthResult { success, invalidToken, other } diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 7c6ecde..bb6097d 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 2 -/// Strings: 206 (103 per locale) +/// Strings: 208 (104 per locale) /// -/// Built on 2024-02-24 at 00:06 UTC +/// Built on 2024-02-24 at 00:26 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -201,6 +201,7 @@ class _StringsOnboardingEn { String get connect => 'Connect'; String get connecting => 'Connecting...'; String get cannotConnectToServer => 'Cannot connect to the server.'; + String get invalidToken => 'Invalid token.'; } // Path: links @@ -450,6 +451,7 @@ class _StringsOnboardingEs implements _StringsOnboardingEn { @override String get connect => 'Conectar'; @override String get connecting => 'Conectando...'; @override String get cannotConnectToServer => 'No se puede conectar con el servidor.'; + @override String get invalidToken => 'Token no válido.'; } // Path: links @@ -656,6 +658,7 @@ extension on Translations { case 'onboarding.connect': return 'Connect'; case 'onboarding.connecting': return 'Connecting...'; case 'onboarding.cannotConnectToServer': return 'Cannot connect to the server.'; + case 'onboarding.invalidToken': return 'Invalid token.'; case 'links.links': return 'Links'; case 'links.dates.todayAt': return ({required Object time}) => 'Today, ${time}'; case 'links.dates.yesterdayAt': return ({required Object time}) => 'Yesterday, ${time}'; @@ -767,6 +770,7 @@ extension on _StringsEs { case 'onboarding.connect': return 'Conectar'; case 'onboarding.connecting': return 'Conectando...'; case 'onboarding.cannotConnectToServer': return 'No se puede conectar con el servidor.'; + case 'onboarding.invalidToken': return 'Token no válido.'; case 'links.links': return 'Enlaces'; case 'links.dates.todayAt': return ({required Object time}) => 'Hoy, ${time}'; case 'links.dates.yesterdayAt': return ({required Object time}) => 'Ayer, ${time}'; diff --git a/lib/i18n/strings_en.i18n.json b/lib/i18n/strings_en.i18n.json index b4f741f..c4a7bcd 100644 --- a/lib/i18n/strings_en.i18n.json +++ b/lib/i18n/strings_en.i18n.json @@ -29,7 +29,8 @@ "testConnectionUrl": "Test connection url", "connect": "Connect", "connecting": "Connecting...", - "cannotConnectToServer": "Cannot connect to the server." + "cannotConnectToServer": "Cannot connect to the server.", + "invalidToken": "Invalid token." }, "links": { "links": "Links", diff --git a/lib/i18n/strings_es.i18n.json b/lib/i18n/strings_es.i18n.json index 6e0168a..b43fc37 100644 --- a/lib/i18n/strings_es.i18n.json +++ b/lib/i18n/strings_es.i18n.json @@ -29,7 +29,8 @@ "testConnectionUrl": "Probar URL de conexión", "connect": "Conectar", "connecting": "Conectando...", - "cannotConnectToServer": "No se puede conectar con el servidor." + "cannotConnectToServer": "No se puede conectar con el servidor.", + "invalidToken": "Token no válido." }, "links": { "links": "Enlaces", diff --git a/lib/screens/onboarding/provider/connect.provider.dart b/lib/screens/onboarding/provider/connect.provider.dart index 91992f1..aed2f49 100644 --- a/lib/screens/onboarding/provider/connect.provider.dart +++ b/lib/screens/onboarding/provider/connect.provider.dart @@ -111,9 +111,11 @@ FutureOr connectToServer(ConnectToServerRef ref) async { final result = await apiClient.checkConnectionInstance(); processModal.close(); - if (result == true) { + if (result == AuthResult.success) { ref.read(apiClientProvider.notifier).setApiClient(apiClient); ref.read(serverInstancesProvider.notifier).saveNewInstance(serverInstance); + } else if (result == AuthResult.invalidToken) { + showSnacbkar(label: t.onboarding.invalidToken, color: Colors.red); } else { showSnacbkar(label: t.onboarding.cannotConnectToServer, color: Colors.red); } diff --git a/lib/screens/onboarding/provider/connect.provider.g.dart b/lib/screens/onboarding/provider/connect.provider.g.dart index e01ba32..a890781 100644 --- a/lib/screens/onboarding/provider/connect.provider.g.dart +++ b/lib/screens/onboarding/provider/connect.provider.g.dart @@ -6,7 +6,7 @@ part of 'connect.provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$connectToServerHash() => r'a5ff5c1030b4af6ead6fd6c4d5fdbd95c71a65cc'; +String _$connectToServerHash() => r'78c2abcf7949674db5961ef644275d27c73bb000'; /// See also [connectToServer]. @ProviderFor(connectToServer) diff --git a/lib/services/api_client.dart b/lib/services/api_client.dart index 21a2801..2d210ce 100644 --- a/lib/services/api_client.dart +++ b/lib/services/api_client.dart @@ -1,5 +1,6 @@ import 'package:dio/dio.dart'; +import 'package:linkdy/constants/enums.dart'; import 'package:linkdy/models/api_response.dart'; import 'package:linkdy/models/data/bookmarks.dart'; import 'package:linkdy/models/data/check_bookmark.dart'; @@ -16,12 +17,17 @@ class ApiClientService { required this.dioInstance, }); - Future checkConnectionInstance() async { + Future checkConnectionInstance() async { try { await dioInstance.get("/bookmarks/?limit=1"); - return true; + return AuthResult.success; + } on DioException catch (e) { + if (e.response != null && e.response!.statusCode == 401 || e.response!.statusCode == 403) { + return AuthResult.invalidToken; + } + return AuthResult.other; } catch (e) { - return false; + return AuthResult.other; } }