11import logging
2+ from typing import Optional
3+ from typing import Union
24
35from oidcmsg .exception import MissingParameter
6+ from oidcmsg .message import Message
7+
8+ from oidcrp .service import Service
49
510logger = 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+
5160def set_state_parameter (request_args = None , ** kwargs ):
5261 """Assigned a state value."""
5362 request_args ['state' ] = get_state_parameter (request_args , kwargs )
0 commit comments