import 'dart:convert'; import 'dart:io'; import 'package:encrypt/encrypt.dart'; import 'package:file_picker/file_picker.dart'; import 'package:manager_app/Components/message_notification.dart'; import 'package:manager_app/Models/session.dart'; import 'package:manager_app/client.dart'; import 'package:manager_app/constants.dart'; import 'package:manager_api_new/api.dart'; class FileHelper { final key = Key.fromUtf8('aVs:ZMe3EK-ySvCGrj3T8]yG6E'); final iv = IV.fromLength(16); Future get _localPath async { //final directory = await getApplicationDocumentsDirectory(); var directory; return directory.path; } Future get _localFile async { final path = await _localPath; return File('$path/session.json'); } Future writeSession(Session session) async { final file = await _localFile; 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())); } Future storeConfiguration(ExportConfigurationDTO exportConfigurationDTO) async { final path = await _localPath; new File('$path/'+exportConfigurationDTO.label!+'.json').createSync(recursive: true); // Write the file File file = File('$path/'+exportConfigurationDTO.label!+'.json'); return file.writeAsString(jsonEncode(exportConfigurationDTO.toJson())); } Future importConfiguration(FilePickerResult filePickerResult, String? path, Client client, context) async { var fileTest = filePickerResult.files[0]; String fileContent = utf8.decode(fileTest.bytes!); ExportConfigurationDTO export = ExportConfigurationDTO.fromJson(jsonDecode(fileContent))!; try { String? test = await client.configurationApi!.configurationImport(export); if (test != null && test.contains("successfully")) { showNotification(kSuccess, kWhite, 'La configuration a été importée avec succès', context, null); } else { showNotification(kPrimaryColor, kWhite, 'Une erreur est survenue lors de l''import de la configuration', context, null); } } catch (e) { if (e.toString().contains('409')) { showNotification(kSecond, kWhite, 'La configuration existe déjà dans le système', context, null); } } } Future readSession() async { try { final file = await _localFile; // Read the file final contents = await file.readAsString(); Session session = Session.fromJson(jsonDecode(contents)); var encrypter = Encrypter(AES(key)); if (session.password != null) { session.password = encrypter.decrypt64(session.password!, iv: iv); } return session; } catch (e) { if (e.toString().contains("cannot find the file")) { final path = await _localPath; new File('$path/session.json').createSync(recursive: true); await writeSession(new Session(rememberMe: false)); } // If encountering an error, return 0 return Session(rememberMe: false); } } }