Skip to content

Commit 7d92f58

Browse files
committed
refactoring
1 parent 4caf4c9 commit 7d92f58

File tree

7 files changed

+218
-180
lines changed

7 files changed

+218
-180
lines changed
Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
from typing import Optional
22

3+
from idpyoidc.impexp import ImpExp
34

4-
class EntityMetadata(object):
55

6+
class EntityMetadata(ImpExp):
7+
parameter = {"metadata": {}}
68
def __init__(self, metadata: Optional[dict] = None):
9+
ImpExp.__init__(self)
710
if metadata is None:
811
self.metadata = {}
912
else:
@@ -20,20 +23,14 @@ def __setitem__(self, key, value):
2023
# Assumes not multiple entity types
2124
self.metadata[key] = value
2225

23-
def entity_types(self):
24-
return list(self.metadata.keys())
25-
26-
def entity_type(self, etype):
27-
return self.metadata[etype]
28-
2926
def items(self):
3027
return self.metadata.items()
3128

32-
def get_entity_type_claim(self, entity_type, claim):
33-
return self.metadata[entity_type][claim]
34-
3529
def __contains__(self, item):
3630
return item in self.metadata
3731

3832
def get(self, item, default=None):
3933
return self.metadata.get(item, default)
34+
35+
def to_dict(self):
36+
return self.metadata

src/idpyoidc/client/oauth2/add_on/jar.py

Lines changed: 1 addition & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from idpyoidc import metadata
66
from idpyoidc.client.oidc.utils import construct_request_uri
77
from idpyoidc.client.oidc.utils import request_object_encryption
8+
from idpyoidc.client.request_object import construct_request_parameter
89
from idpyoidc.message.oidc import make_openid_request
910
from idpyoidc.time_util import utc_time_sans_frac
1011

@@ -35,93 +36,6 @@ def store_request_on_file(service, req, **kwargs):
3536
return _webname
3637

3738

38-
def get_request_object_signing_alg(service, **kwargs):
39-
alg = ""
40-
for arg in ["request_object_signing_alg", "algorithm"]:
41-
try: # Trumps everything
42-
alg = kwargs[arg]
43-
except KeyError:
44-
pass
45-
else:
46-
break
47-
48-
if not alg:
49-
_context = service.upstream_get("context")
50-
alg = _context.add_on["jar"].get("request_object_signing_alg")
51-
if alg is None:
52-
alg = "RS256"
53-
return alg
54-
55-
56-
def construct_request_parameter(service, req, audience=None, **kwargs):
57-
"""Construct a request parameter"""
58-
alg = get_request_object_signing_alg(service, **kwargs)
59-
kwargs["request_object_signing_alg"] = alg
60-
61-
_context = service.upstream_get("context")
62-
if "keys" not in kwargs and alg and alg != "none":
63-
kwargs["keys"] = service.upstream_get("attribute", "keyjar")
64-
65-
if alg == "none":
66-
kwargs["keys"] = []
67-
68-
# This is the issuer of the JWT, that is me !
69-
_issuer = kwargs.get("issuer")
70-
if _issuer is None:
71-
kwargs["issuer"] = _context.get_client_id()
72-
73-
if kwargs.get("recv") is None:
74-
try:
75-
kwargs["recv"] = _context.provider_info["issuer"]
76-
except KeyError:
77-
kwargs["recv"] = _context.issuer
78-
79-
try:
80-
del kwargs["service"]
81-
except KeyError:
82-
pass
83-
84-
_jar_conf = _context.add_on["jar"]
85-
expires_in = _jar_conf.get("expires_in", DEFAULT_EXPIRES_IN)
86-
if expires_in:
87-
req["exp"] = utc_time_sans_frac() + int(expires_in)
88-
89-
if _jar_conf.get("with_jti", False):
90-
kwargs["with_jti"] = True
91-
92-
_enc_enc = _jar_conf.get("request_object_encryption_enc", "")
93-
if _enc_enc:
94-
kwargs["request_object_encryption_enc"] = _enc_enc
95-
kwargs["request_object_encryption_alg"] = _jar_conf.get("request_object_encryption_alg")
96-
97-
# Filter out only the arguments I want
98-
_mor_args = {
99-
k: kwargs[k]
100-
for k in [
101-
"keys",
102-
"issuer",
103-
"request_object_signing_alg",
104-
"recv",
105-
"with_jti",
106-
"lifetime",
107-
]
108-
if k in kwargs
109-
}
110-
111-
if audience:
112-
_mor_args["aud"] = audience
113-
114-
_req_jwt = make_openid_request(req, **_mor_args)
115-
116-
if "target" not in kwargs:
117-
kwargs["target"] = _context.provider_info.get("issuer", _context.issuer)
118-
119-
# Should the request be encrypted
120-
_req_jwte = request_object_encryption(
121-
_req_jwt, _context, service.upstream_get("attribute", "keyjar"), **kwargs
122-
)
123-
return _req_jwte
124-
12539

12640
def jar_post_construct(request_args, service, **kwargs):
12741
"""

src/idpyoidc/client/oidc/__init__.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,18 @@ class RP(oauth2.Client):
8181
client_type = "oidc"
8282

8383
def __init__(
84-
self,
85-
keyjar: Optional[KeyJar] = None,
86-
config: Optional[Union[dict, Configuration]] = None,
87-
services: Optional[dict] = None,
88-
httpc: Optional[Callable] = None,
89-
httpc_params: Optional[dict] = None,
90-
upstream_get: Optional[Callable] = None,
91-
key_conf: Optional[dict] = None,
92-
entity_id: Optional[str] = "",
93-
verify_ssl: Optional[bool] = True,
94-
jwks_uri: Optional[str] = "",
95-
**kwargs
84+
self,
85+
keyjar: Optional[KeyJar] = None,
86+
config: Optional[Union[dict, Configuration]] = None,
87+
services: Optional[dict] = None,
88+
httpc: Optional[Callable] = None,
89+
httpc_params: Optional[dict] = None,
90+
upstream_get: Optional[Callable] = None,
91+
key_conf: Optional[dict] = None,
92+
entity_id: Optional[str] = "",
93+
verify_ssl: Optional[bool] = True,
94+
jwks_uri: Optional[str] = "",
95+
**kwargs
9696
):
9797
if services:
9898
_srvs = services

src/idpyoidc/client/oidc/authorization.py

Lines changed: 22 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,15 @@
88
from idpyoidc.client.oauth2.utils import pre_construct_pick_redirect_uri
99
from idpyoidc.client.oidc import IDT2REG
1010
from idpyoidc.client.oidc.utils import construct_request_uri
11-
from idpyoidc.client.oidc.utils import request_object_encryption
11+
from idpyoidc.client.request_object import construct_request_parameter
1212
from idpyoidc.client.service_context import ServiceContext
1313
from idpyoidc.client.util import implicit_response_types
1414
from idpyoidc.exception import MissingRequiredAttribute
1515
from idpyoidc.message import Message
1616
from idpyoidc.message import oauth2
1717
from idpyoidc.message import oidc
18-
from idpyoidc.message.oidc import make_openid_request
1918
from idpyoidc.message.oidc import verified_claim_name
2019
from idpyoidc.time_util import time_sans_frac
21-
from idpyoidc.time_util import utc_time_sans_frac
2220
from idpyoidc.util import rndstr
2321

2422
__author__ = "Roland Hedberg"
@@ -212,63 +210,6 @@ def store_request_on_file(self, req, **kwargs):
212210
fid.close()
213211
return _webname
214212

215-
def construct_request_parameter(
216-
self, req, request_param, audience=None, expires_in=0, **kwargs
217-
):
218-
"""Construct a request parameter"""
219-
alg = self.get_request_object_signing_alg(**kwargs)
220-
kwargs["request_object_signing_alg"] = alg
221-
222-
_context = self.upstream_get("context")
223-
if "keys" not in kwargs and alg and alg != "none":
224-
kwargs["keys"] = self.upstream_get("attribute", "keyjar")
225-
226-
if alg == "none":
227-
kwargs["keys"] = []
228-
229-
# This is the issuer of the JWT, that is me !
230-
_issuer = kwargs.get("issuer")
231-
if _issuer is None:
232-
kwargs["issuer"] = _context.get_client_id()
233-
234-
if kwargs.get("recv") is None:
235-
try:
236-
kwargs["recv"] = _context.provider_info["issuer"]
237-
except KeyError:
238-
kwargs["recv"] = _context.issuer
239-
240-
try:
241-
del kwargs["service"]
242-
except KeyError:
243-
pass
244-
245-
if expires_in:
246-
req["exp"] = utc_time_sans_frac() + int(expires_in)
247-
248-
_mor_args = {
249-
k: kwargs[k]
250-
for k in [
251-
"keys",
252-
"issuer",
253-
"request_object_signing_alg",
254-
"recv",
255-
"with_jti",
256-
"lifetime",
257-
]
258-
if k in kwargs
259-
}
260-
261-
_req_jwt = make_openid_request(req, **_mor_args)
262-
263-
if "target" not in kwargs:
264-
kwargs["target"] = _context.provider_info.get("issuer", _context.issuer)
265-
266-
# Should the request be encrypted
267-
_req_jwte = request_object_encryption(
268-
_req_jwt, _context, self.upstream_get("attribute", "keyjar"), **kwargs
269-
)
270-
return _req_jwte
271-
272213
def oidc_post_construct(self, req, **kwargs):
273214
"""
274215
Modify the request arguments.
@@ -303,10 +244,21 @@ def oidc_post_construct(self, req, **kwargs):
303244
if _request_param == "request_uri":
304245
kwargs["base_path"] = _context.get("base_url") + "/" + "requests"
305246
kwargs["local_dir"] = _context.get_usage("requests_dir", "./requests")
306-
_req = self.construct_request_parameter(req, _request_param, **kwargs)
247+
service = kwargs.get("service")
248+
if service:
249+
del kwargs["service"]
250+
else:
251+
service = self
252+
253+
_req = construct_request_parameter(service, req, _request_param, **kwargs)
307254
req["request_uri"] = self.store_request_on_file(_req, **kwargs)
308255
elif _request_param == "request":
309-
_req = self.construct_request_parameter(req, _request_param, **kwargs)
256+
service = kwargs.get("service")
257+
if service:
258+
del kwargs["service"]
259+
else:
260+
service = self
261+
_req = construct_request_parameter(service, req, _request_param, **kwargs)
310262
req["request"] = _req
311263

312264
if _req:
@@ -319,7 +271,8 @@ def oidc_post_construct(self, req, **kwargs):
319271
return req
320272

321273
def gather_verify_arguments(
322-
self, response: Optional[Union[dict, Message]] = None, behaviour_args: Optional[dict] = None
274+
self, response: Optional[Union[dict, Message]] = None,
275+
behaviour_args: Optional[dict] = None
323276
):
324277
"""
325278
Need to add some information before running verify()
@@ -379,12 +332,12 @@ def _do_type(self, context, typ, response_types):
379332
return ""
380333

381334
def construct_uris(
382-
self,
383-
base_url: str,
384-
hex: bytes,
385-
context: ServiceContext,
386-
targets: Optional[List[str]] = None,
387-
response_types: Optional[List[str]] = None,
335+
self,
336+
base_url: str,
337+
hex: bytes,
338+
context: ServiceContext,
339+
targets: Optional[List[str]] = None,
340+
response_types: Optional[List[str]] = None,
388341
):
389342
_callback_uris = context.get_preference("callback_uris", {})
390343

0 commit comments

Comments
 (0)