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

Commit 6029656

Browse files
committed
Refactoring
1 parent 816498c commit 6029656

4 files changed

Lines changed: 22 additions & 21 deletions

File tree

src/oidcrp/oauth2/authorization.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from oidcmsg.time_util import time_sans_frac
88

99
from oidcrp.oauth2.utils import get_state_parameter
10-
from oidcrp.oauth2.utils import pick_redirect_uris
10+
from oidcrp.oauth2.utils import pre_construct_pick_redirect_uri
1111
from oidcrp.oauth2.utils import set_state_parameter
1212
from oidcrp.service import Service
1313

@@ -32,7 +32,7 @@ class Authorization(Service):
3232
def __init__(self, client_get, client_authn_factory=None, conf=None):
3333
Service.__init__(self, client_get,
3434
client_authn_factory=client_authn_factory, conf=conf)
35-
self.pre_construct.extend([pick_redirect_uris, set_state_parameter])
35+
self.pre_construct.extend([pre_construct_pick_redirect_uri, set_state_parameter])
3636
self.post_construct.append(self.store_auth_request)
3737

3838
def update_service_context(self, resp, key='', **kwargs):

src/oidcrp/oauth2/utils.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import logging
2+
from typing import Optional
3+
from typing import Union
24

35
from oidcmsg.exception import MissingParameter
6+
from oidcmsg.message import Message
7+
8+
from oidcrp.service import Service
49

510
logger = logging.getLogger(__name__)
611

@@ -18,16 +23,13 @@ def get_state_parameter(request_args, kwargs):
1823
return _state
1924

2025

21-
def pick_redirect_uris(request_args=None, service=None, **kwargs):
22-
"""Pick one redirect_uri base on response_mode out of a list of such."""
23-
_context = service.client_get("service_context")
24-
26+
def pick_redirect_uri(context, request_args=None):
2527
if 'redirect_uri' in request_args:
2628
return request_args, {}
2729

28-
_callback = _context.callback
30+
_callback = context.callback
2931
if _callback:
30-
_response_type = request_args.get('response_type', _context.behaviour['response_types'][0])
32+
_response_type = request_args.get('response_type', context.behaviour['response_types'][0])
3133
request_args['response_type'] = _response_type
3234

3335
_response_mode = request_args.get('response_mode')
@@ -43,11 +45,18 @@ def pick_redirect_uris(request_args=None, service=None, **kwargs):
4345
f"pick_redirect_uris: response_type={_response_type}, response_mode={_response_mode}, "
4446
f"redirect_uri={request_args['redirect_uri']}")
4547
else:
46-
request_args['redirect_uri'] = _context.redirect_uris[0]
48+
request_args['redirect_uri'] = context.redirect_uris[0]
4749

4850
return request_args, {}
4951

5052

53+
def pre_construct_pick_redirect_uri(request_args: Optional[Union[Message, dict]] = None,
54+
service: Optional[Service] = None, **kwargs):
55+
_context = service.client_get("service_context")
56+
request_args["redirect_uri"] = pick_redirect_uri(_context, request_args)
57+
return request_args, {}
58+
59+
5160
def set_state_parameter(request_args=None, **kwargs):
5261
"""Assigned a state value."""
5362
request_args['state'] = get_state_parameter(request_args, kwargs)

src/oidcrp/oidc/authorization.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from oidcrp.exception import ParameterError
1010
from oidcrp.oauth2 import authorization
11-
from oidcrp.oauth2.utils import pick_redirect_uris
11+
from oidcrp.oauth2.utils import pre_construct_pick_redirect_uri
1212
from oidcrp.oidc import IDT2REG
1313
from oidcrp.oidc.utils import construct_request_uri
1414
from oidcrp.oidc.utils import request_object_encryption
@@ -28,7 +28,7 @@ def __init__(self, client_get, client_authn_factory=None, conf=None):
2828
authorization.Authorization.__init__(self, client_get,
2929
client_authn_factory, conf=conf)
3030
self.default_request_args = {'scope': ['openid']}
31-
self.pre_construct = [self.set_state, pick_redirect_uris,
31+
self.pre_construct = [self.set_state, pre_construct_pick_redirect_uri,
3232
self.oidc_pre_construct]
3333
self.post_construct = [self.oidc_post_construct]
3434

src/oidcrp/rp_handler.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from .defaults import DEFAULT_RP_KEY_DEFS
2929
from .exception import OidcServiceError
3030
from .oauth2 import Client
31+
from .oauth2.utils import pick_redirect_uri
3132
from .util import add_path
3233
from .util import dynamic_provider_info_discovery
3334
from .util import load_registration_response
@@ -386,15 +387,6 @@ def _get_response_type(self, context, req_args: Optional[dict] = None):
386387
else:
387388
return context.get('behaviour')['response_types'][0]
388389

389-
def _pick_redirect_uri(self, context, response_type: str):
390-
_callbacks = context.get("callbacks")
391-
if response_type == ["code"]:
392-
return _callbacks["code"]
393-
elif response_type == ["form_post"]:
394-
return _callbacks["formpost"]
395-
else:
396-
return _callbacks["implicit"]
397-
398390
def init_authorization(self, client=None, state='', req_args=None, behaviour_args=None):
399391
"""
400392
Constructs the URL that will redirect the user to the authorization
@@ -417,7 +409,7 @@ def init_authorization(self, client=None, state='', req_args=None, behaviour_arg
417409
_nonce = rndstr(24)
418410
_response_type = self._get_response_type(_context, req_args)
419411
request_args = {
420-
'redirect_uri': self._pick_redirect_uri(_context, _response_type),
412+
'redirect_uri': pick_redirect_uri(_context, _response_type),
421413
'scope': _context.get('behaviour')['scope'],
422414
'response_type': _response_type,
423415
'nonce': _nonce

0 commit comments

Comments
 (0)