Skip to content
This repository was archived by the owner on Jun 12, 2021. It is now read-only.

Commit 4511cd1

Browse files
committed
Form post response ContentType MUST be set to "text/html".
response_placement is useful higher up.
1 parent 5abc2fe commit 4511cd1

File tree

5 files changed

+28
-12
lines changed

5 files changed

+28
-12
lines changed

src/oidcendpoint/endpoint.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,15 @@
4545
('Pragma', 'no-cache'),
4646
('Cache-Control', 'no-store')
4747
],
48-
'cookie': _list of cookies_
48+
'cookie': _list of cookies_,
49+
'response_placement': 'body'
4950
}
5051
5152
"response" MUST be present
5253
"http_headers" MAY be present
5354
"cookie": MAY be present
55+
"response_placement": If absent defaults the endpoints response_placement parameter value
56+
or if that is also missing 'url'
5457
"""
5558

5659

@@ -341,7 +344,7 @@ def do_response(self, response_args=None, request=None, error="", **kwargs):
341344
do_placement = True
342345
content_type = "text/html"
343346
_resp = {}
344-
347+
_response_placement = None
345348
if response_args is None:
346349
response_args = {}
347350

@@ -354,6 +357,7 @@ def do_response(self, response_args=None, request=None, error="", **kwargs):
354357
pass
355358
elif "response_msg" in kwargs:
356359
resp = kwargs["response_msg"]
360+
_response_placement = kwargs.get('response_placement')
357361
do_placement = False
358362
_response = ""
359363
content_type = kwargs.get('content_type')
@@ -408,6 +412,9 @@ def do_response(self, response_args=None, request=None, error="", **kwargs):
408412
except KeyError:
409413
http_headers = []
410414

415+
if _response_placement:
416+
_resp["response_placement"] = _response_placement
417+
411418
http_headers.extend(OAUTH2_NOCACHE_HEADERS)
412419

413420
_resp.update({"response": resp, "http_headers": http_headers})

src/oidcendpoint/oauth2/authorization.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,11 @@ def response_mode(self, request, **kwargs):
394394
inputs=inputs(kwargs["response_args"].to_dict()),
395395
action=kwargs["return_uri"],
396396
)
397-
kwargs["response_msg"] = msg
397+
kwargs.update({
398+
"response_msg": msg,
399+
"content_type": 'text/html',
400+
"response_placement": "body"
401+
})
398402
elif resp_mode == "fragment":
399403
if "fragment_enc" in kwargs:
400404
if not kwargs["fragment_enc"]:

src/oidcendpoint/oidc/authorization.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -419,11 +419,11 @@ def setup_auth(self, request, redirect_uri, cinfo, cookie, acr=None, **kwargs):
419419
if "req_user" in kwargs:
420420
sids = self.endpoint_context.sdb.get_sids_by_sub(kwargs["req_user"])
421421
if (
422-
sids
423-
and user
424-
!= self.endpoint_context.sdb.get_authentication_event(
425-
sids[-1]
426-
).uid
422+
sids
423+
and user
424+
!= self.endpoint_context.sdb.get_authentication_event(
425+
sids[-1]
426+
).uid
427427
):
428428
logger.debug("Wanted to be someone else!")
429429
if "prompt" in request and "none" in request["prompt"]:
@@ -457,8 +457,10 @@ def response_mode(self, request, **kwargs):
457457
inputs=inputs(kwargs["response_args"].to_dict()),
458458
action=kwargs["return_uri"],
459459
)
460-
kwargs["response_msg"] = msg
461-
kwargs["content_type"] = 'text/html'
460+
kwargs.update({
461+
"response_msg": msg,
462+
"content_type": 'text/html',
463+
"response_placement": "body"})
462464
elif resp_mode == "fragment":
463465
if "fragment_enc" in kwargs:
464466
if not kwargs["fragment_enc"]:

tests/test_24_oauth2_authorization_endpoint.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,8 @@ def test_response_mode_form_post(self):
541541
"return_uri": "https://example.com/cb",
542542
}
543543
info = self.endpoint.response_mode(request, **info)
544-
assert set(info.keys()) == {"response_args", "return_uri", "response_msg"}
544+
assert set(info.keys()) == {"response_args", "return_uri", "response_msg",
545+
"content_type", "response_placement"}
545546
assert info["response_msg"] == FORM_POST.format(
546547
action="https://example.com/cb",
547548
inputs='<input type="hidden" name="foo" value="bar"/>',

tests/test_24_oidc_authorization_endpoint.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,8 @@ def test_response_mode_form_post(self):
723723
"return_uri": "https://example.com/cb",
724724
}
725725
info = self.endpoint.response_mode(request, **info)
726-
assert set(info.keys()) == {"response_args", "return_uri", "response_msg", "content_type"}
726+
assert set(info.keys()) == {"response_args", "return_uri", "response_msg",
727+
"content_type", "response_placement"}
727728
assert info["response_msg"] == FORM_POST.format(
728729
action="https://example.com/cb",
729730
inputs='<input type="hidden" name="foo" value="bar"/>',
@@ -736,6 +737,7 @@ def test_do_response_code_form_post(self):
736737
_resp = self.endpoint.process_request(_pr_resp)
737738
msg = self.endpoint.do_response(**_resp)
738739
assert ('Content-type', 'text/html') in msg["http_headers"]
740+
assert "response_placement" in msg
739741

740742
def test_response_mode_fragment(self):
741743
request = {"response_mode": "fragment"}

0 commit comments

Comments
 (0)