diff options
Diffstat (limited to 'talerbank/app/views.py')
-rw-r--r-- | talerbank/app/views.py | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/talerbank/app/views.py b/talerbank/app/views.py index fc1eb54..1ac0c99 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -102,17 +102,19 @@ def allow_origin_star(view_func): 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 = dict(parse_qsl(parsed_payto.query)) - self.subject = params.get("subject") - self.amount = Amount.parse(params.get("amount")) - + obj = urlparse(payto_uri) + path = obj.path.split("/") + if obj.scheme != "payto" or \ + len(path) != 3 or \ + not obj.netloc or \ + not re.match("^payto://", payto_uri): + raise Exception(f"Bad Payto URI: {payto_uri}") + self.target = path.pop() + self.bank = path.pop() + self.authority = obj.netloc + params = dict(parse_qsl(obj.query)) + self.message = params.get("message") + self.amount = Amount.parse(params.get("amount")) if "amount" in params else None ## # Exception raised upon failing login. |