summaryrefslogtreecommitdiff
path: root/talerbank/app/views.py
diff options
context:
space:
mode:
authorMS <ms@taler.net>2020-07-28 17:04:50 +0200
committerMS <ms@taler.net>2020-07-28 17:04:50 +0200
commit32fdf9a36ec3550131b2090b6de9f0206cd1a8a1 (patch)
treef18eae44c1b68ebd24b60fccb2c9f59ce43b6932 /talerbank/app/views.py
parenta10d1b6354d0ebd97b296943b273164da4d8b783 (diff)
downloadbank-32fdf9a36ec3550131b2090b6de9f0206cd1a8a1.tar.gz
bank-32fdf9a36ec3550131b2090b6de9f0206cd1a8a1.tar.bz2
bank-32fdf9a36ec3550131b2090b6de9f0206cd1a8a1.zip
Extracting subject value from payto URI.
Diffstat (limited to 'talerbank/app/views.py')
-rw-r--r--talerbank/app/views.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index be2a38b..a6687a8 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -28,7 +28,7 @@ import re
import time
import base64
import uuid
-from urllib.parse import urlparse
+from urllib.parse import urlparse, parse_qs
import django.contrib.auth
import django.contrib.auth.views
import django.contrib.auth.forms
@@ -69,6 +69,18 @@ LOGGER = logging.getLogger(__name__)
# can handle (because of the wallet).
UINT64_MAX = (2 ** 64) - 1
+class PaytoParse:
+ def __init__(self, payto_uri):
+ parsed_payto = urlparse(payto_uri)
+ if parsed_payto.scheme != "payto":
+ raise Exception("Bad Payto URI: '%s'" % payto_uri)
+ path_as_list = parsed_payto.path.split("/")
+ if (len(path_as_list) == 0):
+ raise Exception("No account/user name found: '%s'" % payto_uri)
+ self.account = path_as_list[-1]
+ params = parse_qs(parsed_payto.query)
+ self.subject = params.get("subject")
+
##
# Exception raised upon failing login.
#
@@ -383,6 +395,15 @@ def get_acct_from_payto(uri_str: str) -> str:
raise Exception("Bad Payto URI: '%s'" % uri_str)
return wire_uri.path.split("/")[-1]
+def get_subject_from_payto(uri_str: str) -> str:
+ wire_uri = urlparse(uri_str)
+ if wire_uri.scheme != "payto":
+ raise Exception("Bad Payto URI: '%s'" % uri_str)
+ params = parse_qs(wire_uri.query)
+ subject = params.get("subject")
+ if not subject:
+ raise Exception("Subject not found in Payto URI: '%s'" % uri_str)
+ return subject
##
# Class representing the registration form.