diff --git a/lib/helpers/api_helper.dart b/lib/helpers/api_helper.dart index 77dd7fa..03a1dd9 100644 --- a/lib/helpers/api_helper.dart +++ b/lib/helpers/api_helper.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:comunic/helpers/events_helper.dart'; import 'package:comunic/helpers/preferences_helper.dart'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/models/api_response.dart'; @@ -71,6 +72,10 @@ class APIHelper { ), ); + // Check if login token is rejected by server + if (response.statusCode == 412) + EventsHelper.emit(InvalidLoginTokensEvent()); + if (response.statusCode != HttpStatus.ok) return APIResponse(response.statusCode, null); diff --git a/lib/helpers/events_helper.dart b/lib/helpers/events_helper.dart index c389fff..aa87eff 100644 --- a/lib/helpers/events_helper.dart +++ b/lib/helpers/events_helper.dart @@ -8,6 +8,9 @@ import 'package:event_bus/event_bus.dart'; /// /// @author Pierre Hubert +/// Invalid login token +class InvalidLoginTokensEvent {} + /// Main WebSocket closed class WSClosedEvent {} diff --git a/lib/ui/widgets/init_widget.dart b/lib/ui/widgets/init_widget.dart index 28d9342..e9240fa 100644 --- a/lib/ui/widgets/init_widget.dart +++ b/lib/ui/widgets/init_widget.dart @@ -1,5 +1,6 @@ import 'package:comunic/helpers/events_helper.dart'; import 'package:comunic/helpers/websocket_helper.dart'; +import 'package:comunic/ui/routes/login_route.dart'; import 'package:comunic/ui/routes/main_route.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; import 'package:comunic/utils/intl_utils.dart'; @@ -28,6 +29,9 @@ class _InitializeWidgetState extends SafeState { super.initState(); + // Check if login token are considered as invalid + super.listen((ev) => _openLoginPage()); + // Listen to WebSocket close event super.listen((e) => _tryConnect()); } @@ -38,6 +42,12 @@ class _InitializeWidgetState extends SafeState { WebSocketHelper.close(); } + /// Open login page + _openLoginPage() { + Navigator.of(context) + .pushReplacement(MaterialPageRoute(builder: (c) => LoginRoute())); + } + /// Try to connect to server void _tryConnect() async { try {