summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2019-12-04 02:11:53 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2019-12-04 02:11:53 +0100
commiteb83ff4d4f1ee9847cfd8752371491c52b23356a (patch)
treeca271c8d8d5be0a53b3c8c1a63b8528bca16ce5e
parentb34d529bec85338e7166a5c0c4adf41a2ab6d10a (diff)
downloadbank-eb83ff4d4f1ee9847cfd8752371491c52b23356a.tar.gz
bank-eb83ff4d4f1ee9847cfd8752371491c52b23356a.tar.bz2
bank-eb83ff4d4f1ee9847cfd8752371491c52b23356a.zip
force named arguments
-rw-r--r--talerbank/app/middleware.py5
-rw-r--r--talerbank/app/views.py62
2 files changed, 48 insertions, 19 deletions
diff --git a/talerbank/app/middleware.py b/talerbank/app/middleware.py
index af2a748..eb34b96 100644
--- a/talerbank/app/middleware.py
+++ b/talerbank/app/middleware.py
@@ -9,7 +9,8 @@ from .models import BankAccount, BankTransaction, \
BankAccountDoesNotExist, BankTransactionDoesNotExist
from .views import \
(DebitLimitException, SameAccountException,
- LoginFailed, RejectNoRightsException, UnhandledException)
+ LoginFailed, RejectNoRightsException, UnhandledException,
+ set_profile_hint)
from .schemas import \
(JSONFieldException,
@@ -113,7 +114,7 @@ class ExceptionMiddleware:
return JsonResponse({"ec": exception.taler_error_code,
"error": exception.hint},
status=exception.http_status_code)
- request.session["profile_hint"] = True, False, exception.hint
+ set_profile_hint(request, failure=True, success=False, hint=exception.hint)
return redirect(render_to)
# [1] https://git.taler.net/exchange.git/tree/src/include/taler_error_codes.h
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index 0466a8e..a0a58b1 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -179,22 +179,30 @@ def get_session_flag(request, name):
##
-# Get a hint from the session and clear it. A 'hint' is a
-# "message" that different parts of the bank can send to each
-# other - via the state - communicating what is the state of
-# the HTTP session.
+# A session "hint" is a tuple indicating whether the
+# message is for a failure or a success, and containing
+# the message itself.
#
# @param request the HTTP request being served.
# @param name hint name
# @return the hint (a "null" one if none was found)
-def get_session_hint(request, name):
- if name in request.session:
- ret = request.session[name]
- del request.session[name]
+def get_session_hint(request, hintId):
+ if hintId in request.session:
+ ret = request.session[hintId]
+ del request.session[hintId]
return ret
- # Fail message, success message, hint.
+
return False, False, None
+def set_profile_hint(request, *, success, failure, hint):
+ set_session_hint(request, "profile_hint", success=success, failure=failure, hint=hint)
+
+def set_session_hint(request, hintId, *, success, failure, hint):
+ if hintId in request.session:
+ LOGGER.warning(f"Overriding a non consumed hint: {hintId}")
+ del request.session[hintId]
+ request.session[hintId] = success, failure, hint
+
##
# Build the list containing all the predefined accounts; the
@@ -299,18 +307,24 @@ def profile_page(request):
account_no=wtf.cleaned_data.get("receiver")
), wtf.cleaned_data.get("subject")
)
- request.session["profile_hint"] = False, True, "Wire transfer successful!"
+
+ set_profile_hint(
+ request,
+ failure=False,
+ success=True,
+ hint="Wire transfer successful!"
+ )
+
return redirect("profile")
+
wtf = WTForm()
- fail_message, success_message, hint = get_session_hint(
- request, "profile_hint"
- )
+ is_success, is_failure, hint = get_session_hint(request, "profile_hint")
context = dict(
name=request.user.username,
balance=request.user.bankaccount.amount,
sign="-" if request.user.bankaccount.debit else "",
- fail_message=fail_message,
- success_message=success_message,
+ fail_message=is_failure,
+ success_message=is_success,
hint=hint,
precision=settings.TALER_DIGITS,
currency=request.user.bankaccount.amount.currency,
@@ -479,7 +493,13 @@ def register(request):
}
)
- request.session["profile_hint"] = False, True, "Registration successful!"
+ set_profile_hint(
+ request,
+ success=True,
+ failure=False,
+ hint="Registration successful!"
+ )
+
django.contrib.auth.login(request, user)
return redirect("profile")
@@ -1099,8 +1119,16 @@ def confirm_withdrawal(request, withdraw_id):
op.amount, BankAccount.objects.get(user=request.user),
op.selected_exchange_account, op.selected_reserve_pub
)
- request.session["profile_hint"] = False, True, "Withdrawal successful!"
+
+ set_profile_hint(
+ request,
+ success=True,
+ failure=False,
+ hint="Withdrawal successful!"
+ )
+
request.session["just_withdrawn"] = True
+
return redirect("profile")
if request.method == "GET":
question, hashed_answer = make_question()