diff options
author | MS <ms@taler.net> | 2020-07-28 17:04:50 +0200 |
---|---|---|
committer | MS <ms@taler.net> | 2020-07-28 17:04:50 +0200 |
commit | 32fdf9a36ec3550131b2090b6de9f0206cd1a8a1 (patch) | |
tree | f18eae44c1b68ebd24b60fccb2c9f59ce43b6932 /talerbank/app/views.py | |
parent | a10d1b6354d0ebd97b296943b273164da4d8b783 (diff) | |
download | bank-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.py | 23 |
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. |