diff options
author | Florian Dold <florian.dold@gmail.com> | 2020-02-17 20:46:56 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2020-02-17 20:46:56 +0100 |
commit | 98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6 (patch) | |
tree | 4f3afa8dbc2b546c8eddf31c912df83b07598597 /talerbank | |
parent | 7a5158de8349a017b9463f9eb41d262258862aa5 (diff) | |
download | bank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.tar.gz bank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.tar.bz2 bank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.zip |
slightly better error handling
Diffstat (limited to 'talerbank')
-rw-r--r-- | talerbank/app/middleware.py | 3 | ||||
-rw-r--r-- | talerbank/app/urls.py | 2 | ||||
-rw-r--r-- | talerbank/app/views.py | 30 |
3 files changed, 19 insertions, 16 deletions
diff --git a/talerbank/app/middleware.py b/talerbank/app/middleware.py index e335a1a..093ff20 100644 --- a/talerbank/app/middleware.py +++ b/talerbank/app/middleware.py @@ -106,3 +106,6 @@ class ExceptionMiddleware: ) set_profile_hint(request, failure=True, success=False, hint=exception.hint) return redirect(render_to) + else: + return JsonResponse(dict(hint="unexpected exception", exception=str(exception)), status=500) + diff --git a/talerbank/app/urls.py b/talerbank/app/urls.py index c2a524c..639eefa 100644 --- a/talerbank/app/urls.py +++ b/talerbank/app/urls.py @@ -70,7 +70,9 @@ taler_bank_accounts_api_patterns = [ "accounts/<str:acct_id>/withdrawals/<str:wid>/abort", views.bank_accounts_api_abort_withdrawal, ), + # FIXME: this endpoint is deprecated path("testing/withdraw", views.withdraw_headless, name="testing-withdraw"), + # FIXME: this endpoint is deprecated path( "testing/withdraw-uri", views.withdraw_headless_uri, name="testing-withdraw-uri" ), diff --git a/talerbank/app/views.py b/talerbank/app/views.py index 4463f79..ca1afb2 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -391,17 +391,9 @@ class UserReg(forms.Form): password = forms.CharField(widget=forms.PasswordInput()) -def internal_register(request): +def internal_register(username, password): if not settings.ALLOW_REGISTRATIONS: raise Exception("registration not allowed!") - input_data = UserReg(request.POST) - - if not input_data.is_valid(): - msg = "Wrong field(s): %s." % ", ".join(input_data.errors.keys()) - raise InvalidInputData(msg) - - username = input_data.cleaned_data["username"] - password = input_data.cleaned_data["password"] if User.objects.filter(username=username).exists(): raise UsernameUnavailable(f"Username {username} is unavailable") @@ -434,10 +426,12 @@ def register_headless(request): """ if not settings.ALLOW_REGISTRATIONS: return JsonResponse(dict(error="registrations are not allowed"), status=403) + username = expect_json_body_str(request, "username") + password = expect_json_body_str(request, "password") try: - user = internal_register(request) + internal_register(username, password) except UsernameUnavailable: - return HttpResponse(status=409) # Conflict + return JsonResponse(dict(hint="username unavailable"), status=409) # Conflict except InvalidInputData: return HttpResponse(status=406) # Not Acceptable @@ -460,11 +454,15 @@ def register(request): # Process POST. try: - user = internal_register(request) - + input_data = UserReg(request.POST) + if not input_data.is_valid(): + msg = "Wrong field(s): %s." % ", ".join(input_data.errors.keys()) + raise InvalidInputData(msg) + username = input_data.cleaned_data["username"] + password = input_data.cleaned_data["password"] + user = internal_register(username, password) except UsernameUnavailable as e: return render(request, "register.html", {"not_available": True}) - except InvalidInputData as e: return render( request, @@ -721,7 +719,7 @@ def serve_history(request, user_account): def expect_json_body_str(request, param_name): body = json.loads(request.body) # FIXME: cache! - val = body[param_name] + val = body.get(param_name) if not isinstance(val, str): # FIXME: throw right exception to be handled by middleware raise Exception(f"expected string for {param_name}") @@ -730,7 +728,7 @@ def expect_json_body_str(request, param_name): def expect_json_body_amount(request, param_name): body = json.loads(request.body) # FIXME: cache! - val = body[param_name] + val = body.get(param_name) if not isinstance(val, str): # FIXME: throw right exception to be handled by middleware raise Exception(f"expected string for {param_name}") |