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

Commit 35bcae4

Browse files
committed
Refactored
1 parent e72537a commit 35bcae4

46 files changed

Lines changed: 490 additions & 487 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/oidcrp/client_auth.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,15 @@ def _get_passwd(request, service, **kwargs):
9292
try:
9393
passwd = request["client_secret"]
9494
except KeyError:
95-
passwd = service.get_service_context().client_secret
95+
passwd = service.entity_get("service_context").client_secret
9696
return passwd
9797

9898
@staticmethod
9999
def _get_user(service, **kwargs):
100100
try:
101101
user = kwargs["user"]
102102
except KeyError:
103-
user = service.get_service_context().client_id
103+
user = service.entity_get("service_context").client_id
104104
return user
105105

106106
def _get_authentication_token(self, request, service, **kwargs):
@@ -133,7 +133,7 @@ def _with_or_without_client_id(request, service):
133133
'grant_type'] == 'authorization_code':
134134
if 'client_id' not in request:
135135
try:
136-
request['client_id'] = service.get_service_context().client_id
136+
request['client_id'] = service.entity_get("service_context").client_id
137137
except AttributeError:
138138
pass
139139
else:
@@ -210,7 +210,7 @@ def modify_request(self, request, service, **kwargs):
210210
:param request: The request
211211
:param service: The service that is using this authentication method
212212
"""
213-
_context = service.get_service_context()
213+
_context = service.entity_get("service_context")
214214
if "client_secret" not in request:
215215
try:
216216
request["client_secret"] = kwargs["client_secret"]
@@ -268,7 +268,7 @@ def find_token(request, token_type, service, **kwargs):
268268
except KeyError:
269269
# I should pick the latest acquired token, this should be the right
270270
# order for that.
271-
_arg = service.get_service_context().state.multiple_extend_request_args(
271+
_arg = service.entity_get("service_context").state.multiple_extend_request_args(
272272
{}, kwargs['key'], ['access_token'],
273273
['auth_response', 'token_response', 'refresh_token_response'])
274274
return _arg['access_token']
@@ -481,7 +481,7 @@ def _get_audience_and_algorithm(self, context, **kwargs):
481481
return audience, algorithm
482482

483483
def _construct_client_assertion(self, service, **kwargs):
484-
_context = service.get_service_context()
484+
_context = service.entity_get("service_context")
485485

486486
audience, algorithm = self._get_audience_and_algorithm(_context, **kwargs)
487487

src/oidcrp/entity.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,30 @@ def __init__(self,
5151
_srvs = services or DEFAULT_SERVICES
5252

5353
self._service = init_services(service_definitions=_srvs,
54-
get_service_context=self.get_service_context,
55-
get_services=self.get_services,
54+
entity_get=self.entity_get,
5655
client_authn_factory=_cam)
5756

58-
def get_services(self):
57+
def entity_get(self, what, *arg):
58+
_func = getattr(self, "get_{}".format(what), None)
59+
if _func:
60+
return _func(*arg)
61+
return None
62+
63+
def get_services(self, *arg):
5964
return self._service
6065

61-
def get_service_context(self):
66+
def get_service_context(self, *arg):
6267
return self._service_context
6368

64-
def get_service(self, service_name):
65-
return self._service[service_name]
69+
def get_service(self, service_name, *arg):
70+
try:
71+
return self._service[service_name]
72+
except KeyError:
73+
return None
74+
75+
def get_service_by_endpoint_name(self, endpoint_name, *arg):
76+
for service in self._service.values():
77+
if service.endpoint_name == endpoint_name:
78+
return service
79+
80+
return None

src/oidcrp/oauth2/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def get_response(self, service, url, method="GET", body=None, response_body_type
118118

119119
if resp.status_code < 300:
120120
if "keyjar" not in kwargs:
121-
kwargs["keyjar"] = service.get_service_context().keyjar
121+
kwargs["keyjar"] = service.entity_get("service_context").keyjar
122122
if not response_body_type:
123123
response_body_type = service.response_body_type
124124

src/oidcrp/oauth2/access_token.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ class AccessToken(Service):
2424
request_body_type = 'urlencoded'
2525
response_body_type = 'json'
2626

27-
def __init__(self, get_service_context, get_services, client_authn_factory=None, conf=None):
28-
Service.__init__(self, get_service_context, get_services,
27+
def __init__(self, entity_get, client_authn_factory=None, conf=None):
28+
Service.__init__(self, entity_get,
2929
client_authn_factory=client_authn_factory, conf=conf)
3030
self.pre_construct.append(self.oauth_pre_construct)
3131

3232
def update_service_context(self, resp, key='', **kwargs):
3333
if 'expires_in' in resp:
3434
resp['__expires_at'] = time_sans_frac() + int(resp['expires_in'])
35-
self.get_service_context().state.store_item(resp, 'token_response', key)
35+
self.entity_get("service_context").state.store_item(resp, 'token_response', key)
3636

3737
def oauth_pre_construct(self, request_args=None, post_args=None, **kwargs):
3838
"""
@@ -44,7 +44,7 @@ def oauth_pre_construct(self, request_args=None, post_args=None, **kwargs):
4444
_state = get_state_parameter(request_args, kwargs)
4545
parameters = list(self.msg_type.c_param.keys())
4646

47-
_context = self.get_service_context()
47+
_context = self.entity_get("service_context")
4848
_args = _context.state.extend_request_args({}, oauth2.AuthorizationRequest,
4949
'auth_request', _state, parameters)
5050

src/oidcrp/oauth2/add_on/dpop.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def add_support(services, signing_algorithms: Optional[list] = None):
156156
"""
157157

158158
_service = services["accesstoken"]
159-
_service.get_service_context().add_on['dpop'] = {
159+
_service.entity_get("service_context").add_on['dpop'] = {
160160
# "key": key_by_alg(signing_algorithm),
161161
"sign_algs": signing_algorithms
162162
}

src/oidcrp/oauth2/add_on/pkce.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def add_code_challenge(request_args, service, **kwargs):
2222
:param kwargs: Extra set of keyword arguments
2323
:return: Updated set of request arguments
2424
"""
25-
_context = service.get_service_context()
25+
_context = service.entity_get("service_context")
2626
_kwargs = _context.add_on["pkce"]
2727

2828
try:
@@ -74,7 +74,7 @@ def add_code_verifier(request_args, service, **kwargs):
7474
_state = request_args.get('state')
7575
if _state is None:
7676
_state = kwargs.get('state')
77-
_item = service.get_service_context().state.get_item(Message, 'pkce', _state)
77+
_item = service.entity_get("service_context").state.get_item(Message, 'pkce', _state)
7878
request_args.update({'code_verifier': _item['code_verifier']})
7979
return request_args
8080

@@ -96,7 +96,7 @@ def add_support(service, code_challenge_length, code_challenge_method):
9696
"""
9797
if "authorization" in service and "accesstoken" in service:
9898
_service = service["authorization"]
99-
_context = _service.get_service_context()
99+
_context = _service.entity_get("service_context")
100100
_context.add_on['pkce'] = {
101101
"code_challenge_length": code_challenge_length,
102102
"code_challenge_method": code_challenge_method

src/oidcrp/oauth2/add_on/pushed_authorization.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def push_authorization(request_args, service, **kwargs):
1515
:param kwargs: Extra keyword arguments.
1616
"""
1717

18-
_context = service.get_service_context()
18+
_context = service.entity_get("service_context")
1919
method_args = _context.add_on["pushed_authorization"]
2020

2121
# construct the message body
@@ -64,7 +64,7 @@ def add_support(services, body_format="jws", signing_algorithm="RS256",
6464
http_client = requests
6565

6666
_service = services["authorization"]
67-
_service.get_service_context().add_on['pushed_authorization'] = {
67+
_service.entity_get("service_context").add_on['pushed_authorization'] = {
6868
"body_format": body_format,
6969
"signing_algorithm": signing_algorithm,
7070
"http_client": http_client,

src/oidcrp/oauth2/authorization.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,29 @@ class Authorization(Service):
2929
# "endpoint": ""
3030
# })
3131

32-
def __init__(self, get_service_context, get_services, client_authn_factory=None, conf=None):
33-
Service.__init__(self, get_service_context, get_services,
32+
def __init__(self, entity_get, client_authn_factory=None, conf=None):
33+
Service.__init__(self, entity_get,
3434
client_authn_factory=client_authn_factory, conf=conf)
3535
self.pre_construct.extend([pick_redirect_uris, set_state_parameter])
3636
self.post_construct.append(self.store_auth_request)
3737

3838
def update_service_context(self, resp, key='', **kwargs):
3939
if 'expires_in' in resp:
4040
resp['__expires_at'] = time_sans_frac() + int(resp['expires_in'])
41-
self.get_service_context().state.store_item(resp, 'auth_response', key)
41+
self.entity_get("service_context").state.store_item(resp, 'auth_response', key)
4242

4343
def store_auth_request(self, request_args=None, **kwargs):
4444
"""Store the authorization request in the state DB."""
4545
_key = get_state_parameter(request_args, kwargs)
46-
self.get_service_context().state.store_item(request_args, 'auth_request', _key)
46+
self.entity_get("service_context").state.store_item(request_args, 'auth_request', _key)
4747
return request_args
4848

4949
def gather_request_args(self, **kwargs):
5050
ar_args = Service.gather_request_args(self, **kwargs)
5151

5252
if 'redirect_uri' not in ar_args:
5353
try:
54-
ar_args['redirect_uri'] = self.get_service_context().redirect_uris[0]
54+
ar_args['redirect_uri'] = self.entity_get("service_context").redirect_uris[0]
5555
except (KeyError, AttributeError):
5656
raise MissingParameter('redirect_uri')
5757

@@ -74,7 +74,7 @@ def post_parse_response(self, response, **kwargs):
7474
pass
7575
else:
7676
if _key:
77-
item = self.get_service_context().state.get_item(oauth2.AuthorizationRequest,
77+
item = self.entity_get("service_context").state.get_item(oauth2.AuthorizationRequest,
7878
'auth_request', _key)
7979
try:
8080
response["scope"] = item["scope"]

src/oidcrp/oauth2/client_credentials/cc_access_token.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ class CCAccessToken(Service):
1717
request_body_type = 'urlencoded'
1818
response_body_type = 'json'
1919

20-
def __init__(self, get_service_context, get_services, client_authn_factory=None, conf=None):
21-
Service.__init__(self, get_service_context, get_services,
20+
def __init__(self, entity_get, client_authn_factory=None, conf=None):
21+
Service.__init__(self, entity_get,
2222
client_authn_factory=client_authn_factory, conf=conf)
2323

2424
def update_service_context(self, resp, key='cc', **kwargs):
2525
if 'expires_in' in resp:
2626
resp['__expires_at'] = time_sans_frac() + int(resp['expires_in'])
27-
self.get_service_context().state.store_item(resp, 'token_response', key)
27+
self.entity_get('service_context').state.store_item(resp, 'token_response', key)

src/oidcrp/oauth2/client_credentials/cc_refresh_access_token.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ class CCRefreshAccessToken(Service):
1515
default_authn_method = 'bearer_header'
1616
http_method = 'POST'
1717

18-
def __init__(self, get_service_context, get_services, client_authn_factory=None, conf=None):
19-
Service.__init__(self, get_service_context, get_services,
18+
def __init__(self, entity_get, client_authn_factory=None, conf=None):
19+
Service.__init__(self, entity_get,
2020
client_authn_factory=client_authn_factory, conf=conf)
2121
self.pre_construct.append(self.cc_pre_construct)
2222
self.post_construct.append(self.cc_post_construct)
2323

2424
def cc_pre_construct(self, request_args=None, **kwargs):
2525
_state_id = kwargs.get("state", "cc")
2626
parameters = ['refresh_token']
27-
_state_interface = self.get_service_context().state
27+
_state_interface = self.entity_get("service_context").state
2828
_args = _state_interface.extend_request_args({}, oauth2.AccessTokenResponse,
2929
'token_response', _state_id, parameters)
3030

@@ -52,4 +52,4 @@ def cc_post_construct(self, request_args, **kwargs):
5252
def update_service_context(self, resp, key='cc', **kwargs):
5353
if 'expires_in' in resp:
5454
resp['__expires_at'] = time_sans_frac() + int(resp['expires_in'])
55-
self.get_service_context().state.store_item(resp, 'token_response', key)
55+
self.entity_get("service_context").state.store_item(resp, 'token_response', key)

0 commit comments

Comments
 (0)