From 61fd4a44a18ec770f1e7733c79a7592c6bf14294 Mon Sep 17 00:00:00 2001 From: Thomas Fransolet Date: Thu, 14 Aug 2025 23:24:18 +0200 Subject: [PATCH] Fix session not working --- lib/Helpers/FileHelper.dart | 32 +++++++++++++---- lib/Models/managerContext.dart | 1 + lib/Models/session.dart | 14 +++++--- .../app_configuration_link_screen.dart | 5 +-- lib/Screens/Main/components/body.dart | 9 +++-- lib/Screens/Main/main_screen.dart | 34 +++++++++++++++---- lib/Screens/login_screen.dart | 4 ++- lib/main.dart | 8 +++-- pubspec.lock | 2 +- pubspec.yaml | 2 ++ 10 files changed, 84 insertions(+), 27 deletions(-) diff --git a/lib/Helpers/FileHelper.dart b/lib/Helpers/FileHelper.dart index 4e85978..3f6e6bc 100644 --- a/lib/Helpers/FileHelper.dart +++ b/lib/Helpers/FileHelper.dart @@ -9,6 +9,8 @@ import 'package:manager_app/client.dart'; import 'package:manager_app/constants.dart'; import 'package:manager_api_new/api.dart'; +import 'dart:html' as html; + class FileHelper { final key = Key.fromUtf8('aVs:ZMe3EK-ySvCGrj3T8]yG6E'); final iv = IV.fromLength(16); @@ -25,17 +27,14 @@ class FileHelper { return File('$path/session.json'); } - Future writeSession(Session session) async { - final file = await _localFile; - + Future writeSession(Session session) async { if (session.password != null) { var encrypter = Encrypter(AES(key)); var encrypted = encrypter.encrypt(session.password!, iv: iv); - session.password = encrypted.base64; } - // Write the file - return file.writeAsString(jsonEncode(session.toMap())); + + html.window.localStorage['session'] = jsonEncode(session.toMap()); } Future storeConfiguration(ExportConfigurationDTO exportConfigurationDTO) async { @@ -65,7 +64,7 @@ class FileHelper { } } - Future readSession() async { + /*Future readSessionWeb() async { try { final file = await _localFile; // Read the file @@ -89,5 +88,24 @@ class FileHelper { // If encountering an error, return 0 return Session(rememberMe: false); } + }*/ + + Future readSessionWeb() async { + try { + final jsonString = html.window.localStorage['session']; + if (jsonString != null) { + return Session.fromJson(jsonDecode(jsonString)); + } else { + final newSession = Session(rememberMe: false); + html.window.localStorage['session'] = jsonEncode(newSession.toMap()); + return newSession; + } + } catch (e) { + return Session(rememberMe: false); + } + } + + Future writeSessionWeb(Session session) async { + html.window.localStorage['session'] = jsonEncode(session.toMap()); } } \ No newline at end of file diff --git a/lib/Models/managerContext.dart b/lib/Models/managerContext.dart index 3c0ec72..ea7ca4f 100644 --- a/lib/Models/managerContext.dart +++ b/lib/Models/managerContext.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:manager_app/Models/session.dart'; import 'package:manager_app/client.dart'; import 'package:manager_api_new/api.dart'; diff --git a/lib/Models/session.dart b/lib/Models/session.dart index 3174eea..9b67980 100644 --- a/lib/Models/session.dart +++ b/lib/Models/session.dart @@ -2,16 +2,20 @@ class Session { bool rememberMe; String? host; String? email; + String? token; String? password; + String? instanceId; - Session({required this.rememberMe, this.host, this.email, this.password}); + Session({required this.rememberMe, this.host, this.email, this.token, this.password, this.instanceId}); factory Session.fromJson(Map json) { return new Session( rememberMe: json['rememberMe'] as bool, host: json['host'] as String, email: json['email'] as String, - password: json['password'] as String + token: json['token'] as String, + password: json['password'] as String, + instanceId: json['instanceId'] as String, ); } @@ -20,12 +24,14 @@ class Session { 'rememberMe': rememberMe, 'host': host, 'email': email, - 'password': password + 'token': token, + 'password': password, + 'instanceId': instanceId }; } @override String toString() { - return '{rememberMe: $rememberMe, host: $host, email: $email, password: $password}'; + return '{rememberMe: $rememberMe, host: $host, email: $email, token: $token, password: $password, instanceId: $instanceId}'; } } \ No newline at end of file diff --git a/lib/Screens/Applications/app_configuration_link_screen.dart b/lib/Screens/Applications/app_configuration_link_screen.dart index 8b9f87a..3ab219c 100644 --- a/lib/Screens/Applications/app_configuration_link_screen.dart +++ b/lib/Screens/Applications/app_configuration_link_screen.dart @@ -29,14 +29,11 @@ class _AppConfigurationLinkScreenState extends State return FutureBuilder( future: getAppConfigurationLink(appContext, widget.applicationInstanceDTO), builder: (context, AsyncSnapshot snapshot) { - - var test = snapshot.data; - List? appConfigurationLinks = snapshot.data; if (snapshot.connectionState == ConnectionState.done) { final screenWidth = MediaQuery.of(context).size.width; - final itemWidth = 150; // largeur idéale d'une cellule + final itemWidth = 175; final crossAxisCount = (screenWidth / itemWidth).floor().clamp(1, 6); return Container( diff --git a/lib/Screens/Main/components/body.dart b/lib/Screens/Main/components/body.dart index 1c9ac49..024b4ab 100644 --- a/lib/Screens/Main/components/body.dart +++ b/lib/Screens/Main/components/body.dart @@ -147,11 +147,16 @@ class _BodyState extends State { ManagerAppContext managerAppContext = appContext.getContext(); managerAppContext.accessToken = null; appContext.setContext(managerAppContext); - Navigator.pushAndRemoveUntil( + Navigator.pushNamedAndRemoveUntil( + context, + '/login', + (Route route) => false, + ); + /*Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (context) => LoginScreen(session: session)), (route) => false, - ); + );*/ }); }, ) diff --git a/lib/Screens/Main/main_screen.dart b/lib/Screens/Main/main_screen.dart index d9dcd03..45c5557 100644 --- a/lib/Screens/Main/main_screen.dart +++ b/lib/Screens/Main/main_screen.dart @@ -6,7 +6,9 @@ import 'package:manager_app/Models/menu.dart'; import 'package:manager_app/Models/menuSection.dart'; import 'package:manager_app/Screens/Main/components/body.dart'; import 'package:manager_app/app_context.dart'; +import 'package:manager_app/client.dart'; import 'package:manager_app/constants.dart'; +import 'package:manager_app/main.dart'; import 'package:provider/provider.dart'; import 'package:responsive_framework/responsive_framework.dart'; @@ -24,8 +26,6 @@ class _MainScreenState extends State { final appContext = Provider.of(context); Size size = MediaQuery.of(context).size; - ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext; - //var isFortSt = managerAppContext.instanceId == "633ee379d9405f32f166f047"; return FutureBuilder( @@ -56,10 +56,32 @@ class _MainScreenState extends State { } Future getInstanceInfo(AppContext appContext) async { - ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext; - InstanceDTO? instance = await managerAppContext.clientAPI!.instanceApi!.instanceGetDetail(managerAppContext.instanceId!); - managerAppContext.instanceDTO = instance; - return instance; + + var session = await loadJsonSessionFile(); + + try { + ManagerAppContext managerAppContext = appContext.getContext() as ManagerAppContext; + managerAppContext.instanceId = managerAppContext.instanceId ?? session.instanceId; + managerAppContext.host = managerAppContext.host ?? session.host; + managerAppContext.accessToken = managerAppContext.accessToken ?? session.token; + managerAppContext.email = managerAppContext.email ?? session.email; + + if(managerAppContext.clientAPI == null) { + managerAppContext.clientAPI = Client(session.host!); + managerAppContext.clientAPI!.apiApi!.addDefaultHeader('authorization', 'Bearer '+ managerAppContext.accessToken!); + } + + InstanceDTO? instance = await managerAppContext.clientAPI!.instanceApi!.instanceGetDetail(managerAppContext.instanceId!); + managerAppContext.instanceDTO = instance; + return instance; + } catch(e) { + Navigator.pushNamedAndRemoveUntil( + context, + '/login', + (Route route) => false, + ); + return null; + } } } diff --git a/lib/Screens/login_screen.dart b/lib/Screens/login_screen.dart index 1ba0360..4a1ddf8 100644 --- a/lib/Screens/login_screen.dart +++ b/lib/Screens/login_screen.dart @@ -8,6 +8,7 @@ import 'package:manager_app/Components/message_notification.dart'; import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/rounded_input_field.dart'; import 'package:manager_app/Components/rounded_password_field.dart'; +import 'package:manager_app/Helpers/FileHelper.dart'; import 'package:manager_app/Models/managerContext.dart'; import 'package:manager_app/Models/session.dart'; import 'package:manager_app/Screens/Main/main_screen.dart'; @@ -121,6 +122,7 @@ class _LoginScreenState extends State { managerAppContext.accessToken = accessToken; managerAppContext.clientAPI = clientAPI; setAccessToken(accessToken); + FileHelper().writeSession(new Session(rememberMe: true, instanceId: instanceId, host: host, token: accessToken, password: password, email: email)); appContext.setContext(managerAppContext); if(fromClick) { @@ -131,7 +133,7 @@ class _LoginScreenState extends State { Navigator.pushNamedAndRemoveUntil( context, '/main', // <- correspond à ta route définie - (Route route) => false, + (Route route) => false, ); /*Navigator.pushAndRemoveUntil( context, diff --git a/lib/main.dart b/lib/main.dart index c010ee5..6ee3c45 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,6 +12,7 @@ import 'Screens/login_screen.dart'; import 'Screens/Policy/policy_screen.dart'; import 'app_context.dart'; import 'constants.dart'; +import 'package:flutter_web_plugins/url_strategy.dart'; //import 'package:window_size/window_size.dart'; Future main() async { @@ -23,7 +24,8 @@ Future main() async { var session = await loadJsonSessionFile(); - ManagerAppContext managerAppContext = new ManagerAppContext(); + ManagerAppContext managerAppContext = ManagerAppContext(); + managerAppContext.instanceId = session.instanceId; final MyApp myApp = MyApp( initialRoute: initialRoute, @@ -45,6 +47,8 @@ Future main() async { ), ); + usePathUrlStrategy(); + runApp(myApp); } @@ -109,7 +113,7 @@ class _MyAppState extends State { } Future loadJsonSessionFile() async { - Session session = await FileHelper().readSession(); + Session session = await FileHelper().readSessionWeb(); //print(session); return session; } diff --git a/pubspec.lock b/pubspec.lock index f67f79d..a95ec1c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -492,7 +492,7 @@ packages: source: sdk version: "0.0.0" flutter_web_plugins: - dependency: transitive + dependency: "direct dev" description: flutter source: sdk version: "0.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 916d4a2..ecd763e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -78,6 +78,8 @@ dev_dependencies: sdk: flutter build_runner: openapi_generator: ^6.1.0 + flutter_web_plugins: + sdk: flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec