gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-bank] branch master updated: returning error codes


From: gnunet
Subject: [GNUnet-SVN] [taler-bank] branch master updated: returning error codes
Date: Fri, 15 Dec 2017 16:13:40 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository bank.

The following commit(s) were added to refs/heads/master by this push:
     new 071f971  returning error codes
071f971 is described below

commit 071f9712fa85ff2ee31f651456794d899bce3529
Author: Marcello Stanisci <address@hidden>
AuthorDate: Fri Dec 15 16:13:10 2017 +0100

    returning error codes
---
 talerbank/app/schemas.py |   2 +-
 talerbank/app/views.py   | 121 ++++++++++++++++++++++++++++++++++-------------
 talerbank/settings.py    |  14 ++++++
 3 files changed, 102 insertions(+), 35 deletions(-)

diff --git a/talerbank/app/schemas.py b/talerbank/app/schemas.py
index d65b082..26d32ef 100644
--- a/talerbank/app/schemas.py
+++ b/talerbank/app/schemas.py
@@ -135,7 +135,7 @@ def validate_pintan_types(validator, fieldname, value, 
format_option):
             validate_wiredetails(data)
     except Exception:
         raise validictory.FieldValidationError(
-            "Missing/malformed '%s'" % fieldname, fieldname, value)
+            "Malformed '%s'" % fieldname, fieldname, value)
 
 def validate_pin_tan_args(pin_tan_args):
     format_dict = {
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index d65d38a..33cf870 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -199,8 +199,16 @@ def pin_tan_question(request):
         # Currency is not checked, as any mismatches will be
         # detected afterwards
     except (FVE, RFVE) as err:
-        LOGGER.error("invalid '%s'" % err.fieldname)
-        return HRBR("invalid '%s'" % err.fieldname)
+        ec = settings.TALER_EC_PARAMETER_MALFORMED
+        if isinstance(err, RFVE):
+          ec = settings.TALER_EC_PARAMETER_MISSING
+        LOGGER.error(
+            "missing/malformed parameter '%s'" % err.fieldname)
+        return JsonResponse(
+            {"error": "missing parameter '%s'" % err.fieldname,
+             "ec": ec},
+            status=400)
+
     user_account = BankAccount.objects.get(user=request.user)
     wd = json.loads(request.GET["exchange_wire_details"])
     request.session["exchange_account_number"] = \
@@ -255,7 +263,8 @@ def pin_tan_verify(request):
 
     except BankAccount.DoesNotExist as exc:
         return JsonResponse(
-            {"error": "That exchange is unknown to this bank"},
+            {"error": "That exchange is unknown to this bank",
+             "ec": settings.TALER_EC_BANK_ACCOUNT_NOT_FOUND},
             status=404)
     except WireTransferException as exc:
         return exc.response
@@ -283,8 +292,9 @@ def register(request):
         return render(request, "register.html",
                       dict(not_available=True))
     with transaction.atomic():
-        user = User.objects.create_user(username=username,
-                                        password=password)
+        user = User.objects.create_user(
+            username=username,
+            password=password)
         user_account = BankAccount(user=user)
         user_account.save()
     bank_internal_account = BankAccount.objects.get(account_no=1)
@@ -343,10 +353,11 @@ def serve_public_accounts(request, name=None):
         name = settings.TALER_PREDEFINED_ACCOUNTS[0]
     try:
         user = User.objects.get(username=name)
-        account = BankAccount.objects.get(user=user, is_public=True)
-    except (User.DoesNotExist, BankAccount.DoesNotExist):
-        return HttpResponse("account '{}' not found".format(name),
-                            status=404)
+    except User.DoesNotExist:
+        return HttpResponse(
+            {"error": "account '%s' not found" % name,
+             "ec": settings.TALER_EC_BANK_UNKNOWN_ACCOUNT},
+             status=404)
     public_accounts = BankAccount.objects.filter(is_public=True)
     history = extract_history(account)
     context = dict(
@@ -364,8 +375,15 @@ def login_via_headers(view_func):
         user_account = auth_and_login(request)
         if not user_account:
             LOGGER.error("authentication failed")
-            return JsonResponse(dict(error="authentication failed"),
-                                status=401)
+            switch = {
+            "serve_history":
+                settings.TALER_EC_BANK_HISTORY_NOT_AUTHORIZED}
+            ec = switch.get(view_func.__name,
+                            settings.TALER_EC_BANK_NOT_AUTHORIZED)
+            return JsonResponse(
+                {"error": "authentication failed",
+                 "ec": ec},
+                status=401)
         return view_func(request, user_account, *args, **kwargs)
     return wraps(view_func)(_decorator)
 
@@ -380,10 +398,14 @@ def serve_history(request, user_account):
         # Note, this does check the currency.
         validate_history_request(request.GET.dict())
     except (FVE, RFVE) as exc:
+        ec = settings.TALER_EC_PARAMETER_MALFORMED
+        if isinstance(exc, RFVE):
+          ec = settings.TALER_EC_PARAMETER_MISSING
         LOGGER.error("/history, bad '%s' arg" % exc.fieldname)
-        return JsonResponse({"error": "invalid '%s'" \
-                                      % exc.fieldname},
-                            status=400)
+        return JsonResponse(
+            {"error": "invalid '%s'" % exc.fieldname,
+             "ec": ec},
+            status=400)
 
     # delta
     parsed_delta = re.search(r"([\+-])?([0-9]+)",
@@ -461,11 +483,13 @@ def auth_and_login(request):
     if not username or not password:
         LOGGER.error("user or password not given")
         return False
-    return django.contrib.auth.authenticate(username=username,
-                                            password=password)
+    return django.contrib.auth.authenticate(
+        username=username,
+        password=password)
 
 @login_required
 def strike(request):
+    # FIXME: to be soon removed
     trans = BankTransaction.objects.get(id=request.GET["row_id"])
     trans.cancelled = True
     trans.save()
@@ -480,21 +504,28 @@ def reject(request, user_account):
     try:
         validate_reject_request(data)
     except (FVE, RFVE) as exc:
+        ec = settings.TALER_EC_PARAMETER_MALFORMED
+        if isinstance(err, RFVE):
+          ec = settings.TALER_EC_PARAMETER_MISSING
         LOGGER.error("invalid %s" % exc.fieldname)
         return JsonResponse(
-            {"error": "invalid '%s'" % exc.fieldname}, status=400)
+            {"error": "invalid '%s'" % exc.fieldname,
+             "ec": ec},
+            status=400)
     try:
         trans = BankTransaction.objects.get(id=data["row_id"])
     except BankTransaction.DoesNotExist:
         return JsonResponse(
-            {"error": "unknown transaction"}, status=404)
+            {"error": "unknown transaction",
+             "ec": settings.TALER_EC_BANK_REJECT_NOT_FOUND},
+            status=404)
     if trans.credit_account.account_no != \
             user_account.bankaccount.account_no:
         LOGGER.error("you can only reject a transaction where you"
                      " _got_ money")
         return JsonResponse(
-            {"error": "you can only reject a transaction where"
-                      " you _got_ money"},
+            {"error": "no rights to reject",
+             "ec": settings.TALER_EC_BANK_REJECT_NO_RIGHTS},
              status=401) # Unauthorized
     trans.cancelled = True
     trans.debit_account.amount.add(trans.amount)
@@ -519,9 +550,16 @@ def add_incoming(request, user_account):
         # Note, this does check the currency.
         validate_incoming_request(data)
     except (FVE, RFVE) as exc:
+        ec = settings.TALER_EC_PARAMETER_MALFORMED
+        if isinstance(exc, RFVE):
+          ec = settings.TALER_EC_PARAMETER_MISSING
+        LOGGER.error(
+            "missing/malformed parameter '%s'" % exc.fieldname)
         return JsonResponse(
-            {"error": "invalid '%s'" % exc.fieldname},
-             status=406 if exc.fieldname == "currency" else 400)
+            {"error": "missing parameter '%s'" % exc.fieldname,
+             "ec": ec},
+            status=406 if exc.fieldname == "currency" else 400)
+
     subject = "%s %s" % (data["subject"], data["exchange_url"])
     try:
         credit_account = BankAccount.objects.get(
@@ -532,9 +570,11 @@ def add_incoming(request, user_account):
                                subject)
     except BankAccount.DoesNotExist:
         return JsonResponse(
-            {"error": "credit_account (%d) not found" \
-                      % data["credit_account"]},
-                            status=404)
+            {"error":
+                 "credit_account (%d) not found" \
+                 % data["credit_account"],
+             "ec": settings.TALER_EC_BANK_UNKNOWN_ACCOUNT},
+            status=404)
     except WireTransferException as exc:
         return exc.response
     return JsonResponse(
@@ -547,10 +587,17 @@ def add_incoming(request, user_account):
 def withdraw_nojs(request):
 
     try:
-        amount = Amount.parse(request.POST.get("kudos_amount", ""))
+        amount = Amount.parse(
+            request.POST.get("kudos_amount", "not-given"))
     except BadFormatAmount:
-        LOGGER.error("Amount did not pass parsing")
-        return HRBR()
+        LOGGER.error("Amount ('%s') did not pass parsing" % amount)
+        ec = settings.TALER_EC_PARAMETER_MALFORMED
+        if amount == "not-given":
+            ec = settings.TALER_EC_PARAMETER_MISSING
+        return JsonResponse({
+            "error": "bad 'kudos_amount' parameter",
+            "ec": ec},
+            status=400)
 
     user_account = BankAccount.objects.get(user=request.user)
 
@@ -565,7 +612,8 @@ def withdraw_nojs(request):
         account_number=user_account.account_no
     ))
     if settings.TALER_SUGGESTED_EXCHANGE:
-        response["X-Taler-Suggested-Exchange"] = 
settings.TALER_SUGGESTED_EXCHANGE
+        response["X-Taler-Suggested-Exchange"] = \
+            settings.TALER_SUGGESTED_EXCHANGE
     return response
 
 class WireTransferException(Exception):
@@ -654,8 +702,10 @@ def wire_transfer(amount,
             credit_account,
             subject)
     except (CurrencyMismatch, BadFormatAmount) as exc:
-        err_cb(exc, JsonResponse({"error": "internal server error"},
-                                 status=500))
+        err_cb(exc, JsonResponse(
+            {"error": "internal server error",
+             "ec": settings.TALER_EC_INTERNAL_LOGIC_ERROR},
+             status=500))
     except DebtLimitExceededException as exc:
         if kwargs.get("request"):
             if kwargs.get("session_expand"):
@@ -664,9 +714,12 @@ def wire_transfer(amount,
             if kwargs["request"].request.path == "/pin/verify":
                 err_cb(exc, redirect("profile"))
         else:
-            err_cb(exc, JsonResponse({"error": "Unallowed debit"},
-                                     status=403))
+            err_cb(exc, JsonResponse(
+                {"error": "Unallowed debit",
+                 "ec": settings.TALER_EC_BANK_TRANSFER_DEBIT},
+                 status=403))
     except SameAccountException as exc:
         err_cb(exc, JsonResponse(
-            {"error": "sender account == receiver account"},
+            {"error": "sender account == receiver account",
+             "ec": settings.TALER_EC_BANK_TRANSFER_SAME_ACCOUNT},
             status=422))
diff --git a/talerbank/settings.py b/talerbank/settings.py
index bf16326..77e3c4f 100644
--- a/talerbank/settings.py
+++ b/talerbank/settings.py
@@ -198,3 +198,17 @@ TALER_EXPECTS_DONATIONS = [
     'Tor', 'GNUnet', 'Taler', 'FSF']
 TALER_SUGGESTED_EXCHANGE = TC.value_string(
     "bank", "suggested_exchange")
+
+TALER_EC_INTERNAL_LOGIC_ERROR = 1011
+TALER_EC_PARAMETER_MISSING = 1008
+TALER_EC_PARAMETER_MALFORMED = 1009
+TALER_EC_BANK_NOT_AUTHORIZED = 5000
+TALER_EC_BANK_UNKNOWN_ACCOUNT = 5001
+TALER_EC_BANK_TRANSFER_NOT_AUTHORIZED = 5100
+TALER_EC_BANK_TRANSFER_DEBIT = 5101
+TALER_EC_BANK_TRANSFER_SAME_ACCOUNT = 5102
+TALER_EC_BANK_HISTORY_NOT_AUTHORIZED = 5200
+TALER_EC_BANK_HISTORY_HTTP_FAILURE = 5201
+TALER_EC_BANK_REJECT_NOT_FOUND = 5300
+TALER_EC_BANK_REJECT_NOT_AUTHORIZED = 5301
+TALER_EC_BANK_REJECT_NO_RIGHTS = 5302

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]