Login errors handling improvements
This commit is contained in:
@ -120,4 +120,5 @@ class ErrorCode {
|
|||||||
static const GENERAL_AUTH_ERROR = 11;
|
static const GENERAL_AUTH_ERROR = 11;
|
||||||
static const AUTH_ERROR = 12;
|
static const AUTH_ERROR = 12;
|
||||||
static const NOT_LOGGED_IN = 13;
|
static const NOT_LOGGED_IN = 13;
|
||||||
|
static const SECURE_STORAGE_READ_ERROR = 14;
|
||||||
}
|
}
|
@ -515,7 +515,6 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver, Ticker
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO remove this shit
|
|
||||||
void _callService(String domain, String service, String entityId, Map additionalParams) {
|
void _callService(String domain, String service, String entityId, Map additionalParams) {
|
||||||
_showInfoBottomBar(
|
_showInfoBottomBar(
|
||||||
message: "Calling $domain.$service",
|
message: "Calling $domain.$service",
|
||||||
|
@ -58,16 +58,16 @@ class ConnectionManager {
|
|||||||
final storage = new FlutterSecureStorage();
|
final storage = new FlutterSecureStorage();
|
||||||
try {
|
try {
|
||||||
_token = await storage.read(key: "hacl_llt");
|
_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");
|
|
||||||
}
|
|
||||||
oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent(
|
oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent(
|
||||||
'http://ha-client.homemade.systems/')}&redirect_uri=${Uri
|
'http://ha-client.homemade.systems/')}&redirect_uri=${Uri
|
||||||
.encodeComponent(
|
.encodeComponent(
|
||||||
'http://ha-client.homemade.systems/service/auth_callback.html')}";
|
'http://ha-client.homemade.systems/service/auth_callback.html')}";
|
||||||
settingsLoaded = true;
|
settingsLoaded = true;
|
||||||
|
} catch (e) {
|
||||||
|
Logger.e("Cannt read secure storage. Need to relogin.");
|
||||||
|
completer.completeError(UserError(code: ErrorCode.SECURE_STORAGE_READ_ERROR));
|
||||||
|
stopInit = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((_domain == null) || (_port == null) ||
|
if ((_domain == null) || (_port == null) ||
|
||||||
@ -147,10 +147,7 @@ class ConnectionManager {
|
|||||||
Logger.d("[Received] <== ${data.toString()}");
|
Logger.d("[Received] <== ${data.toString()}");
|
||||||
_messageResolver["auth"]?.completeError(UserError(code: ErrorCode.AUTH_INVALID, message: "${data["message"]}"));
|
_messageResolver["auth"]?.completeError(UserError(code: ErrorCode.AUTH_INVALID, message: "${data["message"]}"));
|
||||||
_messageResolver.remove("auth");
|
_messageResolver.remove("auth");
|
||||||
//TODO dont logout, show variants to User
|
|
||||||
logout().then((_) {
|
|
||||||
if (!connecting.isCompleted) connecting.completeError(UserError(code: ErrorCode.AUTH_INVALID, message: "${data["message"]}"));
|
if (!connecting.isCompleted) connecting.completeError(UserError(code: ErrorCode.AUTH_INVALID, message: "${data["message"]}"));
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
_handleMessage(data);
|
_handleMessage(data);
|
||||||
}
|
}
|
||||||
@ -309,8 +306,6 @@ class ConnectionManager {
|
|||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
}).catchError((e) {
|
}).catchError((e) {
|
||||||
//TODO dont logout, show variants
|
|
||||||
logout();
|
|
||||||
completer.completeError(UserError(code: ErrorCode.AUTH_ERROR, message: "$e"));
|
completer.completeError(UserError(code: ErrorCode.AUTH_ERROR, message: "$e"));
|
||||||
});
|
});
|
||||||
return completer.future;
|
return completer.future;
|
||||||
|
@ -75,6 +75,7 @@ class UserErrorScreen extends StatelessWidget {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ErrorCode.GENERAL_AUTH_ERROR: {
|
case ErrorCode.GENERAL_AUTH_ERROR: {
|
||||||
|
errorText = "There was some error logging in. ${this.error.message ?? ""}";
|
||||||
buttons.addAll(<Widget>[
|
buttons.addAll(<Widget>[
|
||||||
RaisedButton(
|
RaisedButton(
|
||||||
onPressed: () => _reload(),
|
onPressed: () => _reload(),
|
||||||
@ -89,6 +90,22 @@ class UserErrorScreen extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ErrorCode.SECURE_STORAGE_READ_ERROR: {
|
||||||
|
errorText = "There was an error reading secure storage. You can try again or clear saved auth data and login again.";
|
||||||
|
buttons.addAll(<Widget>[
|
||||||
|
RaisedButton(
|
||||||
|
onPressed: () => _reload(),
|
||||||
|
child: Text("Retry")
|
||||||
|
),
|
||||||
|
Container(width: 15.0,),
|
||||||
|
RaisedButton(
|
||||||
|
onPressed: () => _reLogin(),
|
||||||
|
child: Text("Clear and login again"),
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ErrorCode.DISCONNECTED: {
|
case ErrorCode.DISCONNECTED: {
|
||||||
errorText = "Disconnected";
|
errorText = "Disconnected";
|
||||||
buttons.addAll(<Widget>[
|
buttons.addAll(<Widget>[
|
||||||
|
Reference in New Issue
Block a user