Stop connection init if settings is empty

This commit is contained in:
estevez-dev 2019-06-15 14:36:11 +03:00
parent 209ccd4f7f
commit e1d9d9f304
4 changed files with 52 additions and 34 deletions

3
.gitignore vendored
View File

@ -10,4 +10,5 @@ build/
.idea/ .idea/
key.properties key.properties
pubspec.lock

View File

@ -37,7 +37,7 @@ class AuthManager {
}); });
} }
}); });
Logger.d("Launching OAuth..."); Logger.d("Launching OAuth: $oauthUrl");
eventBus.fire(StartAuthEvent(oauthUrl, true)); eventBus.fire(StartAuthEvent(oauthUrl, true));
return completer.future; return completer.future;
} }

View File

@ -36,6 +36,7 @@ class Connection {
Future init({bool loadSettings, bool forceReconnect: false}) async { Future init({bool loadSettings, bool forceReconnect: false}) async {
Completer completer = Completer(); Completer completer = Completer();
bool stopInit = false;
if (loadSettings) { if (loadSettings) {
Logger.e("Loading settings..."); Logger.e("Loading settings...");
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
@ -43,41 +44,56 @@ class Connection {
_domain = prefs.getString('hassio-domain'); _domain = prefs.getString('hassio-domain');
_port = prefs.getString('hassio-port'); _port = prefs.getString('hassio-port');
displayHostname = "$_domain:$_port"; displayHostname = "$_domain:$_port";
_webSocketAPIEndpoint = "${prefs.getString('hassio-protocol')}://$_domain:$_port/api/websocket"; _webSocketAPIEndpoint =
httpWebHost = "${prefs.getString('hassio-res-protocol')}://$_domain:$_port"; "${prefs.getString('hassio-protocol')}://$_domain:$_port/api/websocket";
//_token = prefs.getString('hassio-token'); httpWebHost =
final storage = new FlutterSecureStorage(); "${prefs.getString('hassio-res-protocol')}://$_domain${(_port == '433' || _port == '80') ? '' : ':'+_port}";
try { if ((_domain == null) || (_port == null) ||
_token = await storage.read(key: "hacl_llt"); (_domain.isEmpty) || (_port.isEmpty)) {
Logger.e("Long-lived token read successful"); completer.completeError(HAError.checkConnectionSettings());
} catch (e) { stopInit = true;
Logger.e("Cannt read secure storage. Need to relogin."); } else {
_token = null; //_token = prefs.getString('hassio-token');
await storage.delete(key: "hacl_llt"); 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) { if (!stopInit) {
AuthManager().getTempToken( if (_token == null) {
oauthUrl: oauthUrl AuthManager().getTempToken(
).then((token) { oauthUrl: oauthUrl
Logger.d("Token from AuthManager recived"); ).then((token) {
_tempToken = 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); _doConnect(completer: completer, forceReconnect: forceReconnect);
}).catchError((e) { }
completer.completeError(e);
});
} else {
_doConnect(completer: completer, forceReconnect: forceReconnect);
} }
return completer.future; return completer.future;
@ -106,7 +122,7 @@ class Connection {
} else { } else {
connecting = Completer(); connecting = Completer();
await _disconnect(); await _disconnect();
Logger.d("Socket connecting..."); Logger.d("Socket connecting: $_webSocketAPIEndpoint...");
_socket = IOWebSocketChannel.connect( _socket = IOWebSocketChannel.connect(
_webSocketAPIEndpoint, pingInterval: Duration(seconds: 15)); _webSocketAPIEndpoint, pingInterval: Duration(seconds: 15));
_socketSubscription = _socket.stream.listen( _socketSubscription = _socket.stream.listen(

View File

@ -309,6 +309,7 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
} }
void _showOAuth() { void _showOAuth() {
Logger.d("_showOAuth: ${Connection().oauthUrl}");
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(