From 5ebd25e0d190cb16d3945f0c40b4c546d0df6704 Mon Sep 17 00:00:00 2001 From: estevez-dev Date: Thu, 21 Mar 2019 14:25:05 +0200 Subject: [PATCH] Resolves #59 Storing token in secure storage --- lib/home_assistant.class.dart | 15 ++++++++++++--- lib/main.dart | 1 + pubspec.lock | 7 +++++++ pubspec.yaml | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 6503a5d..2e2c595 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -64,8 +64,15 @@ class HomeAssistant { hostname = "$domain:$port"; _webSocketAPIEndpoint = "${prefs.getString('hassio-protocol')}://$domain:$port/api/websocket"; httpWebHost = "${prefs.getString('hassio-res-protocol')}://$domain:$port"; - //_password = prefs.getString('hassio-password'); _token = prefs.getString('hassio-token'); + final storage = new FlutterSecureStorage(); + try { + _token = await storage.read(key: "hacl_llt"); + } catch (e) { + Logger.e("Cannt read secure storage. Need to relogin."); + _token = null; + await storage.delete(key: "hacl_llt"); + } _useLovelace = prefs.getBool('use-lovelace') ?? true; if ((domain == null) || (port == null) || (domain.length == 0) || (port.length == 0)) { @@ -269,7 +276,8 @@ class HomeAssistant { Logger.d("Logging out..."); _token = null; _tempToken = null; - await SharedPreferences.getInstance().then((prefs) => prefs.remove("hassio-token")); + final storage = new FlutterSecureStorage(); + await storage.delete(key: "hacl_llt"); ui?.clear(); entities?.clear(); } @@ -294,7 +302,8 @@ class HomeAssistant { Logger.d("Got long-lived token: ${data['result']}"); _token = data['result']; _tempToken = null; - SharedPreferences.getInstance().then((prefs) => prefs.setString("hassio-token", _token)); + final storage = new FlutterSecureStorage(); + storage.write(key: "hacl_llt", value: _token); } else { logout(); Logger.e("Error getting long-lived token: ${data['error'].toString()}"); diff --git a/lib/main.dart b/lib/main.dart index 88b3347..850669c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,6 +19,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_custom_tabs/flutter_custom_tabs.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_webview_plugin/flutter_webview_plugin.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; part 'entity_class/const.dart'; part 'entity_class/entity.class.dart'; diff --git a/pubspec.lock b/pubspec.lock index e3d0769..9319ca9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -141,6 +141,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.2.0" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + url: "https://pub.dartlang.org" + source: hosted + version: "3.2.0" flutter_svg: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 714d1af..c562d91 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,6 +22,7 @@ dependencies: flutter_custom_tabs: ^0.6.0 firebase_messaging: ^4.0.0+1 flutter_webview_plugin: ^0.3.1 + flutter_secure_storage: ^3.2.0 dev_dependencies: flutter_test: