summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-02-17 20:46:56 +0100
committerFlorian Dold <florian.dold@gmail.com>2020-02-17 20:46:56 +0100
commit98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6 (patch)
tree4f3afa8dbc2b546c8eddf31c912df83b07598597
parent7a5158de8349a017b9463f9eb41d262258862aa5 (diff)
downloadbank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.tar.gz
bank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.tar.bz2
bank-98747f4f3c3a153af3a9e7b1dfc9f87ee1ed33a6.zip
slightly better error handling
-rw-r--r--talerbank/app/middleware.py3
-rw-r--r--talerbank/app/urls.py2
-rw-r--r--talerbank/app/views.py30
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}")