@@ -72,12 +72,12 @@ class HttpServerThread(threading.Thread):
72
72
Thread that runs a HTTP server (`http.server.HTTPServer`)
73
73
"""
74
74
75
- def __init__ (self , RequestHandlerClass , server_address = ( '' , 0 ) ):
75
+ def __init__ (self , RequestHandlerClass , server_address : Tuple [ str , int ] = None ):
76
76
# Make it a daemon to minimize potential shutdown issues due to `serve_forever`
77
77
super ().__init__ (daemon = True )
78
78
self ._RequestHandlerClass = RequestHandlerClass
79
79
# Server address ('', 0): listen on all ips and let OS pick a free port
80
- self ._server_address = server_address
80
+ self ._server_address = server_address or ( '' , 0 )
81
81
self ._server = None
82
82
83
83
def start (self ):
@@ -187,11 +187,13 @@ class OidcAuthCodePkceAuthenticator(OidcAuthenticator):
187
187
AuthCodeResult = namedtuple ("AuthCodeResult" , ["auth_code" , "nonce" , "code_verifier" , "redirect_uri" ])
188
188
AccessTokenResult = namedtuple ("AccessTokenResult" , ["access_token" , "id_token" , "refresh_token" ])
189
189
190
- def __init__ (self , client_id : str , oidc_discovery_url : str , webbrowser_open : Callable = None , timeout = 120 ):
190
+ def __init__ (self , client_id : str , oidc_discovery_url : str , webbrowser_open : Callable = None , timeout = 120 ,
191
+ server_address : Tuple [str , int ] = None ):
191
192
self ._client_id = client_id
192
193
self ._provider_info = requests .get (oidc_discovery_url ).json ()
193
194
self ._webbrowser_open = webbrowser_open or webbrowser .open
194
195
self ._authentication_timeout = timeout
196
+ self ._server_address = server_address
195
197
196
198
@staticmethod
197
199
def hash_code_verifier (code : str ) -> str :
@@ -222,7 +224,11 @@ def _get_auth_code(self) -> AuthCodeResult:
222
224
# Set up HTTP server (in separate thread) to catch OAuth redirect URL
223
225
callback_queue = Queue ()
224
226
RequestHandlerClass = OAuthRedirectRequestHandler .with_queue (callback_queue )
225
- with HttpServerThread (RequestHandlerClass = RequestHandlerClass ) as http_server_thread :
227
+ http_server_thread = HttpServerThread (
228
+ RequestHandlerClass = RequestHandlerClass ,
229
+ server_address = self ._server_address
230
+ )
231
+ with http_server_thread :
226
232
port , host , fqdn = http_server_thread .server_address_info ()
227
233
# TODO: use fully qualified domain name instead of "localhost"?
228
234
# Otherwise things won't work when the client is for example
0 commit comments