diff --git a/lib/api/client.dart b/lib/api/client.dart index e1d490a..080c4a1 100644 --- a/lib/api/client.dart +++ b/lib/api/client.dart @@ -39,7 +39,7 @@ class Client { void reload_ignore_certs(bool? val) { ignoreCertificates = val ?? false; HttpOverrides.global = new IgnoreCertHttpOverrides(ignoreCertificates); - if(global == null) return; + if(global == null || global!.currentContext == null) return; VikunjaGlobal .of(global!.currentContext!) .settingsManager @@ -97,7 +97,7 @@ class Client { headers: _headers, body: _encoder.convert(body), ) - .then(_handleResponse).catchError((Object? obj) {print(obj);}); + .then(_handleResponse); } Future put(String url, {dynamic body}) { diff --git a/lib/api/user_implementation.dart b/lib/api/user_implementation.dart index f607099..d3c46f0 100644 --- a/lib/api/user_implementation.dart +++ b/lib/api/user_implementation.dart @@ -10,15 +10,20 @@ class UserAPIService extends APIService implements UserService { @override Future login(String username, password, {bool rememberMe = false, String? totp}) async { - var response = await client.post('/login', body: { + var body = { 'long_token': rememberMe, 'password': password, - 'totp_passcode': totp, 'username': username, - }); + }; + if(totp != null) { + body['totp_passcode'] = totp; + } + var response = await client.post('/login', body: body); var token = response?.body["token"]; if(token == null || response == null || response.error) - return Future.value(UserTokenPair(null, null, error: response != null ? response.statusCode : 0)); + return Future.value(UserTokenPair(null, null, + error: response != null ? response.body["code"] : 0, + errorString: response != null ? response.body["message"] : "Login error")); client.configure(token: token); return UserAPIService(client) .getCurrentUser() diff --git a/lib/models/user.dart b/lib/models/user.dart index ea27ed6..553aabd 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -39,7 +39,8 @@ class UserTokenPair { final User? user; final String? token; final int error; - UserTokenPair(this.user, this.token, {this.error = 0}); + final String errorString; + UserTokenPair(this.user, this.token, {this.error = 0, this.errorString = ""}); } class BaseTokenPair { diff --git a/lib/pages/user/login.dart b/lib/pages/user/login.dart index 0511bd0..7650513 100644 --- a/lib/pages/user/login.dart +++ b/lib/pages/user/login.dart @@ -193,7 +193,7 @@ class _LoginPageState extends State { await vGlobal.newUserService!.login( _username, _password, rememberMe: this._rememberMe); - if (newUser.error == 412) { + if (newUser.error == 1017) { TextEditingController totpController = TextEditingController(); await showDialog(context: context, builder: (context) => new AlertDialog( @@ -213,12 +213,14 @@ class _LoginPageState extends State { await vGlobal.newUserService!.login( _username, _password, rememberMe: this._rememberMe, totp: totpController.text); - - if (newUser.error == 0) - vGlobal.changeUser( - newUser.user!, token: newUser.token, base: _server); + } else if(newUser.error > 0) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(newUser.errorString))); } + if (newUser.error == 0) + vGlobal.changeUser( + newUser.user!, token: newUser.token, base: _server); + } catch (ex) { /* log(stacktrace.toString()); showDialog(