11import json
2+ from urllib .parse import parse_qs
3+ from urllib .parse import unquote_plus
4+ from urllib .parse import urlsplit
25
36import pytest
47from oidcmsg .exception import MissingRequiredAttribute
@@ -35,12 +38,16 @@ def test_query():
3538 'https%3A%2F%2Fjoe%40example.com%3A8080' ),
3639 'acct:joe@example.com' : ('example.com' , rel ,
3740 'acct%3Ajoe%40example.com' )
38- }
41+ }
3942
4043 wf = WebFinger (None , None )
4144 for key , args in example_oidc .items ():
4245 _q = wf .query (key )
43- assert _q == pattern .format (* args )
46+ p = urlsplit (_q )
47+ assert p .netloc == args [0 ]
48+ qs = parse_qs (p .query )
49+ assert qs ['resource' ][0 ] == unquote_plus (args [2 ])
50+ assert qs ['rel' ][0 ] == unquote_plus (args [1 ])
4451
4552
4653def test_query_2 ():
@@ -76,7 +83,7 @@ def test_query_2():
7683 "nov@example.com#fragment" : (
7784 "nov@example.com" , rel ,
7885 "https%3A%2F%2Fnov%40example.com" ),
79- "nov@example.com:8080/path?query#fragment" :(
86+ "nov@example.com:8080/path?query#fragment" : (
8087 "nov@example.com:8080" , rel ,
8188 "https%3A%2F%2Fnov%40example.com%3A8080%2Fpath%3Fquery" ),
8289 "acct:nov@example.com:8080" : (
@@ -87,15 +94,15 @@ def test_query_2():
8794 "example.com" , rel ,
8895 "acct%3Anov%40example.com%2Fpath"
8996 ),
90- "acct:nov@example.com?query" :(
97+ "acct:nov@example.com?query" : (
9198 "example.com" , rel ,
9299 "acct%3Anov%40example.com%3Fquery"
93100 ),
94101 "acct:nov@example.com#fragment" : (
95102 "example.com" , rel ,
96103 "acct%3Anov%40example.com"
97104 ),
98- "acct:nov@example.com:8080/path?query#fragment" :(
105+ "acct:nov@example.com:8080/path?query#fragment" : (
99106 "example.com:8080" , rel ,
100107 "acct%3Anov%40example.com%3A8080%2Fpath%3Fquery"
101108 )
@@ -104,15 +111,19 @@ def test_query_2():
104111 wf = WebFinger (None , None )
105112 for key , args in example_oidc .items ():
106113 _q = wf .query (key )
107- assert _q == pattern .format (* args )
114+ p = urlsplit (_q )
115+ assert p .netloc == args [0 ]
116+ qs = parse_qs (p .query )
117+ assert qs ['resource' ][0 ] == unquote_plus (args [2 ])
118+ assert qs ['rel' ][0 ] == unquote_plus (args [1 ])
108119
109120
110121def test_link1 ():
111122 link = Link (
112123 rel = "http://webfinger.net/rel/avatar" ,
113124 type = "image/jpeg" ,
114125 href = "http://www.example.com/~bob/bob.jpg"
115- )
126+ )
116127
117128 assert set (link .keys ()) == {'rel' , 'type' , 'href' }
118129 assert link ['rel' ] == "http://webfinger.net/rel/avatar"
@@ -126,7 +137,7 @@ def test_link2():
126137 titles = {
127138 "en-us" : "The Magical World of Bob" ,
128139 "fr" : "Le monde magique de Bob"
129- })
140+ })
130141
131142 assert set (link .keys ()) == {'rel' , 'type' , 'href' , 'titles' }
132143 assert link ['rel' ] == "blog"
@@ -149,20 +160,20 @@ def test_jrd():
149160 subject = "acct:bob@example.com" ,
150161 aliases = [
151162 "http://www.example.com/~bob/"
152- ],
163+ ],
153164 properties = {
154165 "http://example.com/ns/role/" : "employee"
155- },
166+ },
156167 links = [
157168 Link (
158169 rel = "http://webfinger.net/rel/avatar" ,
159170 type = "image/jpeg" ,
160171 href = "http://www.example.com/~bob/bob.jpg"
161- ),
172+ ),
162173 Link (
163174 rel = "http://webfinger.net/rel/profile-page" ,
164175 href = "http://www.example.com/~bob/"
165- )])
176+ )])
166177
167178 assert set (jrd .keys ()) == {'subject' , 'aliases' , 'properties' , 'links' }
168179
@@ -172,35 +183,35 @@ def test_jrd2():
172183 "subject" : "acct:bob@example.com" ,
173184 "aliases" : [
174185 "http://www.example.com/~bob/"
175- ],
186+ ],
176187 "properties" : {
177188 "http://example.com/ns/role/" : "employee"
178- },
189+ },
179190 "links" : [
180191 {
181192 "rel" : "http://webfinger.net/rel/avatar" ,
182193 "type" : "image/jpeg" ,
183194 "href" : "http://www.example.com/~bob/bob.jpg"
184- },
195+ },
185196 {
186197 "rel" : "http://webfinger.net/rel/profile-page" ,
187198 "href" : "http://www.example.com/~bob/"
188- },
199+ },
189200 {
190201 "rel" : "blog" ,
191202 "type" : "text/html" ,
192203 "href" : "http://blogs.example.com/bob/" ,
193204 "titles" : {
194205 "en-us" : "The Magical World of Bob" ,
195206 "fr" : "Le monde magique de Bob"
196- }
197- },
207+ }
208+ },
198209 {
199210 "rel" : "vcard" ,
200211 "href" : "https://www.example.com/~bob/bob.vcf"
201- }
202- ]
203- }
212+ }
213+ ]
214+ }
204215
205216 jrd0 = JRD ().from_json (json .dumps (ex0 ))
206217
@@ -215,18 +226,18 @@ def test_extra_member_response():
215226 "subject" : "acct:bob@example.com" ,
216227 "aliases" : [
217228 "http://www.example.com/~bob/"
218- ],
229+ ],
219230 "properties" : {
220231 "http://example.com/ns/role/" : "employee"
221- },
232+ },
222233 'dummy' : 'foo' ,
223234 "links" : [
224235 {
225236 "rel" : "http://webfinger.net/rel/avatar" ,
226237 "type" : "image/jpeg" ,
227238 "href" : "http://www.example.com/~bob/bob.jpg"
228- }]
229- }
239+ }]
240+ }
230241
231242 _resp = JRD ().from_json (json .dumps (ex ))
232243 assert _resp ['dummy' ] == 'foo'
@@ -240,52 +251,56 @@ def test_query_device(self):
240251 wf = WebFinger (SERVICE_CONTEXT , state_db = None )
241252 request_args = {'resource' : "p1.example.com" }
242253 _info = wf .get_request_parameters (request_args )
243- assert _info [
244- 'url' ] == 'https://p1.example.com/.well-known/webfinger' \
245- '?rel=http%3A%2F' \
246- '%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer' \
247- '&resource=acct%3Ap1.example.com'
254+ p = urlsplit ( _info ['url' ])
255+ assert p . netloc == request_args [ "resource" ]
256+ qs = parse_qs ( p . query )
257+ assert qs [ 'resource' ][ 0 ] == "acct:p1.example.com"
258+ assert qs [ 'rel' ][ 0 ] == "http://openid.net/specs/connect/1.0/issuer"
248259
249260 def test_query_rel (self ):
250261 wf = WebFinger (SERVICE_CONTEXT , state_db = None )
251262 request_args = {'resource' : "acct:bob@example.com" }
252263 _info = wf .get_request_parameters (request_args )
253- assert _info ['url' ] == \
254- "https://example.com/.well-known/webfinger?rel=http%3A%2F%2Fopenid" \
255- ".net%2Fspecs%2Fconnect%2F1.0%2Fissuer&resource=acct%3Abob" \
256- "%40example.com"
264+ p = urlsplit (_info ['url' ])
265+ assert p .netloc == "example.com"
266+ qs = parse_qs (p .query )
267+ assert qs ['resource' ][0 ] == "acct:bob@example.com"
268+ assert qs ['rel' ][0 ] == "http://openid.net/specs/connect/1.0/issuer"
257269
258270 def test_query_acct (self ):
259271 wf = WebFinger (SERVICE_CONTEXT , rel = OIC_ISSUER , state_db = None )
260272 request_args = {'resource' : "acct:carol@example.com" }
261273 _info = wf .get_request_parameters (request_args = request_args )
262274
263- assert _info ['url' ] == \
264- "https://example.com/.well-known/webfinger?rel=http%3A%2F%2Fopenid" \
265- ".net%2Fspecs%2Fconnect%2F1.0%2Fissuer&resource" \
266- "=acct%3Acarol%40example.com"
275+ p = urlsplit (_info ['url' ])
276+ assert p .netloc == "example.com"
277+ qs = parse_qs (p .query )
278+ assert qs ['resource' ][0 ] == "acct:carol@example.com"
279+ assert qs ['rel' ][0 ] == "http://openid.net/specs/connect/1.0/issuer"
267280
268281 def test_query_acct_resource_kwargs (self ):
269282 wf = WebFinger (SERVICE_CONTEXT , rel = OIC_ISSUER , state_db = None )
270283 request_args = {}
271284 _info = wf .get_request_parameters (request_args = request_args ,
272285 resource = "acct:carol@example.com" )
273286
274- assert _info ['url' ] == \
275- "https://example.com/.well-known/webfinger?rel=http%3A%2F%2Fopenid" \
276- ".net%2Fspecs%2Fconnect%2F1.0%2Fissuer&resource" \
277- "=acct%3Acarol%40example.com"
287+ p = urlsplit (_info ['url' ])
288+ assert p .netloc == "example.com"
289+ qs = parse_qs (p .query )
290+ assert qs ['resource' ][0 ] == "acct:carol@example.com"
291+ assert qs ['rel' ][0 ] == "http://openid.net/specs/connect/1.0/issuer"
278292
279293 def test_query_acct_resource_config (self ):
280294 wf = WebFinger (SERVICE_CONTEXT , rel = OIC_ISSUER , state_db = None )
281295 wf .service_context .config ['resource' ] = "acct:carol@example.com"
282296 request_args = {}
283297 _info = wf .get_request_parameters (request_args = request_args )
284298
285- assert _info ['url' ] == \
286- "https://example.com/.well-known/webfinger?rel=http%3A%2F%2Fopenid" \
287- ".net%2Fspecs%2Fconnect%2F1.0%2Fissuer&resource" \
288- "=acct%3Acarol%40example.com"
299+ p = urlsplit (_info ['url' ])
300+ assert p .netloc == "example.com"
301+ qs = parse_qs (p .query )
302+ assert qs ['resource' ][0 ] == "acct:carol@example.com"
303+ assert qs ['rel' ][0 ] == "http://openid.net/specs/connect/1.0/issuer"
289304
290305 def test_query_acct_no_resource (self ):
291306 wf = WebFinger (SERVICE_CONTEXT , rel = OIC_ISSUER , state_db = None )
0 commit comments