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

Commit ec179bb

Browse files
authored
Merge pull request #184 from IdentityPython/extra_args_2
Extra args 2
2 parents 7407cfa + c936b74 commit ec179bb

File tree

3 files changed

+34
-17
lines changed

3 files changed

+34
-17
lines changed

src/oidcop/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import secrets
22

3-
__version__ = "2.4.0"
3+
__version__ = "2.4.1"
44

55
DEF_SIGN_ALG = {
66
"id_token": "RS256",

src/oidcop/oauth2/add_on/extra_args.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
from oidcmsg.oauth2 import AccessTokenResponse
2+
from oidcmsg.oauth2 import AuthorizationResponse
3+
from oidcmsg.oauth2 import TokenExchangeResponse
4+
from oidcmsg.oauth2 import TokenIntrospectionResponse
5+
from oidcmsg.oidc import OpenIDSchema
6+
7+
18
def pre_construct(response_args, request, endpoint_context, **kwargs):
29
"""
310
Add extra arguments to the request.
@@ -11,12 +18,25 @@ def pre_construct(response_args, request, endpoint_context, **kwargs):
1118

1219
_extra = endpoint_context.add_on.get("extra_args")
1320
if _extra:
14-
for arg, _param in _extra.items():
15-
_val = endpoint_context.get(_param)
21+
if isinstance(response_args, AuthorizationResponse):
22+
_args = _extra.get("authorization", {})
23+
elif isinstance(response_args, AccessTokenResponse):
24+
_args = _extra.get('accesstoken', {})
25+
elif isinstance(response_args, TokenExchangeResponse):
26+
_args = _extra.get('token_exchange', {})
27+
elif isinstance(response_args, TokenIntrospectionResponse):
28+
_args = _extra.get('token_introspection', {})
29+
elif isinstance(response_args, OpenIDSchema):
30+
_args = _extra.get('userinfo', {})
31+
else:
32+
_args = {}
33+
34+
for arg, _param in _args.items():
35+
_val = getattr(endpoint_context, _param)
1636
if _val:
17-
request[arg] = _val
37+
response_args[arg] = _val
1838

19-
return request
39+
return response_args
2040

2141

2242
def add_support(endpoint, **kwargs):

tests/test_61_add_on.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import os
2+
from urllib.parse import urlparse
23

34
from cryptojwt.jwk.ec import ECKey
45
from cryptojwt.jwk.ec import new_ec_key
56
from cryptojwt.jws.jws import factory
67
from cryptojwt.key_jar import init_key_jar
78
from oidcmsg.oauth2 import AccessTokenRequest
89
from oidcmsg.oauth2 import AuthorizationRequest
10+
from oidcmsg.oauth2 import AuthorizationResponse
911
from oidcmsg.time_util import utc_time_sans_frac
1012

1113
from oidcop.authn_event import create_authn_event
@@ -155,15 +157,10 @@ def test_process_request(self):
155157
_context = self.endpoint.server_get("endpoint_context")
156158
assert _context.add_on["extra_args"] == {'authorization': {'iss': 'issuer'}}
157159

158-
_pr_resp = self.endpoint.parse_request(AUTH_REQ.to_dict())
159-
_resp = self.endpoint.process_request(_pr_resp)
160-
assert set(_resp.keys()) == {
161-
"response_args",
162-
"fragment_enc",
163-
"return_uri",
164-
"cookie",
165-
"session_id",
166-
}
167-
168-
assert 'iss' in _resp["response_args"]
169-
assert _resp["response_args"]["iss"] == _context.issuer
160+
_pr_resp = self.endpoint.parse_request(AUTH_REQ)
161+
_args = self.endpoint.process_request(_pr_resp)
162+
_resp = self.endpoint.do_response(request=AUTH_REQ, **_args)
163+
parse_res = urlparse(_resp["response"])
164+
_payload = AuthorizationResponse().from_urlencoded(parse_res.query)
165+
assert 'iss' in _payload
166+
assert _payload["iss"] == _context.issuer

0 commit comments

Comments
 (0)