diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-11-28 17:41:53 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-11-28 17:41:53 +0100 |
commit | 847c96c9cd2c3da2eaf4cd300b82b0f8b8fb877a (patch) | |
tree | 4cb6d4731415f6278329ed74b582d2ac75e5687b | |
parent | fd5b3e7df26690169bb420f81e27a266a8c5d17b (diff) | |
download | bank-847c96c9cd2c3da2eaf4cd300b82b0f8b8fb877a.tar.gz bank-847c96c9cd2c3da2eaf4cd300b82b0f8b8fb877a.tar.bz2 bank-847c96c9cd2c3da2eaf4cd300b82b0f8b8fb877a.zip |
implement headless way to get taler://withdraw URI
-rw-r--r-- | talerbank/app/schemas.py | 9 | ||||
-rw-r--r-- | talerbank/app/urls.py | 5 | ||||
-rw-r--r-- | talerbank/app/views.py | 16 |
3 files changed, 30 insertions, 0 deletions
diff --git a/talerbank/app/schemas.py b/talerbank/app/schemas.py index b6aaeb2..b4c64ce 100644 --- a/talerbank/app/schemas.py +++ b/talerbank/app/schemas.py @@ -236,6 +236,15 @@ class WithdrawHeadless(forms.Form): reserve_pub = forms.CharField() exchange_wire_details = PaytoField(required=False) +class WithdrawHeadlessUri(forms.Form): + amount = forms.CharField( + validators=[ + RegexValidator( + AMOUNT_REGEX, message="Format CURRENCY:X[.Y] not respected" + ) + ] + ) + class PinTanParams(forms.Form): amount_currency = forms.CharField( diff --git a/talerbank/app/urls.py b/talerbank/app/urls.py index 9699ed8..28230ed 100644 --- a/talerbank/app/urls.py +++ b/talerbank/app/urls.py @@ -51,6 +51,11 @@ urlpatterns = [ views.withdraw_headless, name="withdraw-headless" ), + path( + "api/withdraw-headless-uri", + views.withdraw_headless_uri, + name="withdraw-headless-uri" + ), path("api/register", views.register_headless, name="register-headless"), path("start-withdrawal", views.start_withdrawal, name="start-withdrawal"), path( diff --git a/talerbank/app/views.py b/talerbank/app/views.py index d4c1872..9199cf7 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -904,6 +904,22 @@ def add_incoming(request, user_account): }) + +@login_via_headers +@csrf_exempt +@require_POST +def withdraw_headless_uri(request, user): + data_json = json.loads(request.body.decode("utf-8")) + data = WithdrawHeadlessUri(data_json) + user_account = BankAccount.objects.get(user=request.user) + op = TalerWithdrawOperation(amount=data.amount, withdraw_account=user_account) + op.save() + host = request.get_host() + taler_withdraw_uri = f"taler://withdraw/{host}/-/{op.withdraw_id}" + return JsonResponse({ + "taler_withdraw_uri": taler_withdraw_uri, + }) + ## # Serves a headless withdrawal request for the Taler protocol. # |