From 6c7f02170b6ffeae35e0a47aecd93700dc230663 Mon Sep 17 00:00:00 2001 From: Maximilian Betz <Maximilian.Betz@awi.de> Date: Fri, 1 Apr 2022 13:03:16 +0200 Subject: [PATCH] moved login information storage to SecureStorage --- lib/addevent.dart | 1 - lib/configuration.dart | 4 +--- lib/datamodel.dart | 36 ++++++++++++++++++++++++++++++------ lib/main.dart | 9 --------- lib/viewevents.dart | 1 - 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/lib/addevent.dart b/lib/addevent.dart index 102a491..f62cb0c 100644 --- a/lib/addevent.dart +++ b/lib/addevent.dart @@ -1,5 +1,4 @@ import 'dart:convert'; - import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; diff --git a/lib/configuration.dart b/lib/configuration.dart index 5fda58a..9754859 100644 --- a/lib/configuration.dart +++ b/lib/configuration.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -216,7 +215,7 @@ class _MyHomePageState extends State<Configuration> { } } ), - const SizedBox(height: 50.0), + const SizedBox(height: 70.0), TextFormField( minLines: 1, maxLines: 5, @@ -265,6 +264,5 @@ class _MyHomePageState extends State<Configuration> { } //TODO: write configuration on app dispose! -//TODO: align bottom buttons nicely! //TODO: add label prefix with appended upcounting number. //TODO: grey out update button if nothing has changed. ? \ No newline at end of file diff --git a/lib/datamodel.dart b/lib/datamodel.dart index c209847..e046e1b 100644 --- a/lib/datamodel.dart +++ b/lib/datamodel.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Collection { @@ -261,11 +262,20 @@ abstract class ConfigurationStoreBase { 'currentCollection': currentCollection.toJson(), 'devices': jsonEncode(devices), 'eventTypes': jsonEncode(eventTypes), - 'loginInformation' : loginInformation.toJson(), 'initialized' : initialized, }; } + Map<String, dynamic> loginDataToMap() { + return { + 'loginInformation' : loginInformation.toJson(), + }; + } + + void loginDataFromMap(Map<String, dynamic> map){ + loginInformation = SensorLogin.fromJson(map['loginInformation']); + } + void fromMap(Map<String, dynamic> map) { List<dynamic> dynList = jsonDecode(map['collections']); collections = []; @@ -285,8 +295,6 @@ abstract class ConfigurationStoreBase { for (var element in dynList){ eventTypes.add(EventType.fromJson(element)); } - - loginInformation = SensorLogin.fromJson(map['loginInformation']); initialized = map['initialized']; } @@ -336,20 +344,36 @@ class ConfigurationStoreInstance extends ConfigurationStoreBase { ._internal(); Future<void> storeToSharedPrefs() async { + + const secureStorage = FlutterSecureStorage(); + var writeData = await secureStorage.write(key: 'login', value: jsonEncode(loginDataToMap())); + final prefs = await SharedPreferences.getInstance(); prefs.setString('configuration', jsonEncode(toMap())); + + debugPrint('Stored current configuration to shared prefs'); } Future<void> loadFromSharedPrefs() async { + + const secureStorage = FlutterSecureStorage(); + final String? readData = await secureStorage.read(key: 'login'); + if (readData != null) { + loginDataFromMap(jsonDecode(readData)); + debugPrint('Login loaded from secure storage'); + }else{ + debugPrint('Failed to load login details from secure storage'); + } + final prefs = await SharedPreferences.getInstance(); final String? configuration = prefs.getString('configuration'); if (configuration != null){ - debugPrint('Configuration Current Event String: ' + configuration); + debugPrint('Configuration String: ' + configuration); fromMap(jsonDecode(configuration)); - debugPrint('Configuration Current Event loaded from shared preferences'); + debugPrint('Configuration loaded from shared preferences'); }else{ - debugPrint('Failed to load Current Event configuration from shared preferences.'); + debugPrint('Failed to load configuration from shared preferences.'); } } diff --git a/lib/main.dart b/lib/main.dart index 70016de..b4946fb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'datamodel.dart'; import 'addevent.dart'; import 'viewevents.dart'; @@ -8,7 +6,6 @@ import 'overview.dart'; import 'configuration.dart'; import 'databaseconnector.dart'; - Future<void> loadConfiguration() async { final ConfigurationStoreInstance configuration = ConfigurationStoreInstance(); final EventStoreInstance event = EventStoreInstance(); @@ -20,10 +17,6 @@ Future<void> loadConfiguration() async { await configuration.loadFromSharedPrefs(); await event.loadFromSharedPrefs(); - //const storage = FlutterSecureStorage(); //TODO: move login information to secure storage - //Map<String, String> allValues = await storage.readAll(); - //print('Secure Storage: ' + allValues.toString()); - var database = DatabaseInstance(); await database.connect(); //Do once at start of APP! } @@ -31,8 +24,6 @@ Future<void> loadConfiguration() async { void main() { loadConfiguration(); - //configuration.loginInformation = SensorLogin.fromJson({"mail":"admin","password":"adminadmin"}); //TODO: replace for productive version. - runApp(MaterialApp( title: 'Mobile Event Log', theme: ThemeData( diff --git a/lib/viewevents.dart b/lib/viewevents.dart index 6d843b8..12b3330 100644 --- a/lib/viewevents.dart +++ b/lib/viewevents.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:flutter/material.dart'; import 'datamodel.dart'; import 'sensorconnector.dart'; -- GitLab