Improve error message for wrong password

This commit is contained in:
Ming Ming 2021-05-08 03:22:21 +08:00
parent eaf3824400
commit 5068fc8a01
4 changed files with 28 additions and 8 deletions

View file

@ -80,8 +80,9 @@ Future<String> exchangePassword(Account account) async {
} else {
_log.severe(
"[exchangePassword] Failed while requesting app password: $response");
throw HttpException(
"Failed communicating with server: ${response.statusCode}");
throw ApiException(
response: response,
message: "Failed communicating with server: ${response.statusCode}");
}
}

View file

@ -77,8 +77,14 @@ class AppPasswordExchangeBloc
_log.warning("[_exchangePassword] Invalid base url");
yield AppPasswordExchangeBlocFailure(e);
} catch (e, stacktrace) {
_log.shout("[_exchangePassword] Failed while exchanging password", e,
stacktrace);
if (e is ApiException && e.response.statusCode == 401) {
// wrong password, normal
_log.warning(
"[_exchangePassword] Server response 401, wrong password?");
} else {
_log.shout("[_exchangePassword] Failed while exchanging password", e,
stacktrace);
}
yield AppPasswordExchangeBlocFailure(e);
}
}

View file

@ -383,5 +383,9 @@
"errorInvalidBaseUrl": "Unable to communicate. Please make sure the address is the base URL of your Nextcloud instance",
"@errorInvalidBaseUrl": {
"description": "Error message when the base URL is invalid"
},
"errorWrongPassword": "Unable to authenticate. Please double check the username and password",
"@errorWrongPassword": {
"description": "Error message when the username or password is wrong"
}
}

View file

@ -6,6 +6,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:logging/logging.dart';
import 'package:nc_photos/account.dart';
import 'package:nc_photos/bloc/app_password_exchange.dart';
import 'package:nc_photos/exception.dart';
import 'package:nc_photos/exception_util.dart' as exception_util;
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/snack_bar_manager.dart';
@ -95,10 +96,18 @@ class _ConnectState extends State<Connect> {
_log.info("[_onStateChange] Account is good: $newAccount");
Navigator.of(context).pop(newAccount);
} else if (state is AppPasswordExchangeBlocFailure) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(exception_util.toUserString(state.exception, context)),
duration: k.snackBarDurationNormal,
));
if (state.exception is ApiException &&
(state.exception as ApiException).response.statusCode == 401) {
SnackBarManager().showSnackBar(SnackBar(
content: Text(AppLocalizations.of(context).errorWrongPassword),
duration: k.snackBarDurationNormal,
));
} else {
SnackBarManager().showSnackBar(SnackBar(
content: Text(exception_util.toUserString(state.exception, context)),
duration: k.snackBarDurationNormal,
));
}
Navigator.of(context).pop(null);
}
}