|
5 | 5 | import time |
6 | 6 | from random import random |
7 | 7 | from urllib.parse import parse_qs |
8 | | -from urllib.parse import splitquery |
9 | 8 | from urllib.parse import urlencode |
10 | 9 | from urllib.parse import urlparse |
| 10 | +from urllib.parse import urlsplit |
| 11 | +from urllib.parse import urlunsplit |
11 | 12 |
|
12 | 13 | from cryptojwt.jws.utils import alg2keytype |
13 | 14 | from oidcmsg.exception import MessageException |
@@ -90,6 +91,21 @@ def secret(seed, sid): |
90 | 91 | return csum.hexdigest() |
91 | 92 |
|
92 | 93 |
|
| 94 | +def split_uri(uri): |
| 95 | + p = urlsplit(uri) |
| 96 | + |
| 97 | + if p.fragment: |
| 98 | + p = p._replace(fragment='') |
| 99 | + |
| 100 | + if p.query: |
| 101 | + o = p._replace(query='') |
| 102 | + base = urlunsplit(o) |
| 103 | + return base, parse_qs(p.query) |
| 104 | + else: |
| 105 | + base = urlunsplit(p) |
| 106 | + return base, '' |
| 107 | + |
| 108 | + |
93 | 109 | def comb_uri(args): |
94 | 110 | for param in ["redirect_uris", "post_logout_redirect_uris"]: |
95 | 111 | if param not in args: |
@@ -160,11 +176,7 @@ def do_client_registration(self, request, client_id, ignore=None): |
160 | 176 | "fragment", |
161 | 177 | ) |
162 | 178 | return err |
163 | | - base, query = splitquery(uri) |
164 | | - if query: |
165 | | - plruri.append((base, parse_qs(query))) |
166 | | - else: |
167 | | - plruri.append((base, query)) |
| 179 | + plruri.append(split_uri(uri)) |
168 | 180 | _cinfo["post_logout_redirect_uris"] = plruri |
169 | 181 |
|
170 | 182 | if "redirect_uris" in request: |
@@ -275,7 +287,7 @@ def verify_redirect_uris(registration_request): |
275 | 287 | if _custom: # Can not verify a custom scheme |
276 | 288 | verified_redirect_uris.append((uri, {})) |
277 | 289 | else: |
278 | | - base, query = splitquery(uri) |
| 290 | + base, query = split_uri(uri) |
279 | 291 | if query: |
280 | 292 | verified_redirect_uris.append((base, parse_qs(query))) |
281 | 293 | else: |
|
0 commit comments