diff --git a/.gitignore b/.gitignore index 5223f04..6a3815d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ build/ .idea/ -key.properties \ No newline at end of file +key.properties +pubspec.lock \ No newline at end of file diff --git a/lib/auth_manager.class.dart b/lib/auth_manager.class.dart index 50158e7..a5d3dd8 100644 --- a/lib/auth_manager.class.dart +++ b/lib/auth_manager.class.dart @@ -37,7 +37,7 @@ class AuthManager { }); } }); - Logger.d("Launching OAuth..."); + Logger.d("Launching OAuth: $oauthUrl"); eventBus.fire(StartAuthEvent(oauthUrl, true)); return completer.future; } diff --git a/lib/connection.class.dart b/lib/connection.class.dart index 28b9e6a..148858c 100644 --- a/lib/connection.class.dart +++ b/lib/connection.class.dart @@ -36,6 +36,7 @@ class Connection { Future init({bool loadSettings, bool forceReconnect: false}) async { Completer completer = Completer(); + bool stopInit = false; if (loadSettings) { Logger.e("Loading settings..."); SharedPreferences prefs = await SharedPreferences.getInstance(); @@ -43,41 +44,56 @@ class Connection { _domain = prefs.getString('hassio-domain'); _port = prefs.getString('hassio-port'); displayHostname = "$_domain:$_port"; - _webSocketAPIEndpoint = "${prefs.getString('hassio-protocol')}://$_domain:$_port/api/websocket"; - httpWebHost = "${prefs.getString('hassio-res-protocol')}://$_domain:$_port"; - //_token = prefs.getString('hassio-token'); - final storage = new FlutterSecureStorage(); - try { - _token = await storage.read(key: "hacl_llt"); - Logger.e("Long-lived token read successful"); - } catch (e) { - Logger.e("Cannt read secure storage. Need to relogin."); - _token = null; - await storage.delete(key: "hacl_llt"); + _webSocketAPIEndpoint = + "${prefs.getString('hassio-protocol')}://$_domain:$_port/api/websocket"; + httpWebHost = + "${prefs.getString('hassio-res-protocol')}://$_domain${(_port == '433' || _port == '80') ? '' : ':'+_port}"; + if ((_domain == null) || (_port == null) || + (_domain.isEmpty) || (_port.isEmpty)) { + completer.completeError(HAError.checkConnectionSettings()); + stopInit = true; + } else { + //_token = prefs.getString('hassio-token'); + final storage = new FlutterSecureStorage(); + try { + _token = await storage.read(key: "hacl_llt"); + Logger.e("Long-lived token read successful: $_token"); + } catch (e) { + Logger.e("Cannt read secure storage. Need to relogin."); + _token = null; + await storage.delete(key: "hacl_llt"); + } + DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); + AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; + deviceName = androidInfo.model; + oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent( + 'http://ha-client.homemade.systems/')}&redirect_uri=${Uri + .encodeComponent( + 'http://ha-client.homemade.systems/service/auth_callback.html')}"; + settingsLoaded = true; + } + } else { + if ((_domain == null) || (_port == null) || + (_domain.isEmpty) || (_port.isEmpty)) { + completer.completeError(HAError.checkConnectionSettings()); + stopInit = true; } - DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); - AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; - deviceName = androidInfo.model; - oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent('http://ha-client.homemade.systems/')}&redirect_uri=${Uri.encodeComponent('http://ha-client.homemade.systems/service/auth_callback.html')}"; - settingsLoaded = true; - } - if ((_domain == null) || (_port == null) || - (_domain.isEmpty) || (_port.isEmpty)) { - completer.completeError(HAError.checkConnectionSettings()); } - if (_token == null) { - AuthManager().getTempToken( - oauthUrl: oauthUrl - ).then((token) { - Logger.d("Token from AuthManager recived"); - _tempToken = token; + if (!stopInit) { + if (_token == null) { + AuthManager().getTempToken( + oauthUrl: oauthUrl + ).then((token) { + Logger.d("Token from AuthManager recived"); + _tempToken = token; + _doConnect(completer: completer, forceReconnect: forceReconnect); + }).catchError((e) { + completer.completeError(e); + }); + } else { _doConnect(completer: completer, forceReconnect: forceReconnect); - }).catchError((e) { - completer.completeError(e); - }); - } else { - _doConnect(completer: completer, forceReconnect: forceReconnect); + } } return completer.future; @@ -106,7 +122,7 @@ class Connection { } else { connecting = Completer(); await _disconnect(); - Logger.d("Socket connecting..."); + Logger.d("Socket connecting: $_webSocketAPIEndpoint..."); _socket = IOWebSocketChannel.connect( _webSocketAPIEndpoint, pingInterval: Duration(seconds: 15)); _socketSubscription = _socket.stream.listen( diff --git a/lib/main.dart b/lib/main.dart index 7cf4645..fb93f36 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -309,6 +309,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker } void _showOAuth() { + Logger.d("_showOAuth: ${Connection().oauthUrl}"); Navigator.push( context, MaterialPageRoute(