@@ -72,12 +72,12 @@ class HttpServerThread(threading.Thread):
7272 Thread that runs a HTTP server (`http.server.HTTPServer`)
7373 """
7474
75- def __init__ (self , RequestHandlerClass , server_address = ( '' , 0 ) ):
75+ def __init__ (self , RequestHandlerClass , server_address : Tuple [ str , int ] = None ):
7676 # Make it a daemon to minimize potential shutdown issues due to `serve_forever`
7777 super ().__init__ (daemon = True )
7878 self ._RequestHandlerClass = RequestHandlerClass
7979 # 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 )
8181 self ._server = None
8282
8383 def start (self ):
@@ -187,11 +187,13 @@ class OidcAuthCodePkceAuthenticator(OidcAuthenticator):
187187 AuthCodeResult = namedtuple ("AuthCodeResult" , ["auth_code" , "nonce" , "code_verifier" , "redirect_uri" ])
188188 AccessTokenResult = namedtuple ("AccessTokenResult" , ["access_token" , "id_token" , "refresh_token" ])
189189
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 ):
191192 self ._client_id = client_id
192193 self ._provider_info = requests .get (oidc_discovery_url ).json ()
193194 self ._webbrowser_open = webbrowser_open or webbrowser .open
194195 self ._authentication_timeout = timeout
196+ self ._server_address = server_address
195197
196198 @staticmethod
197199 def hash_code_verifier (code : str ) -> str :
@@ -222,7 +224,11 @@ def _get_auth_code(self) -> AuthCodeResult:
222224 # Set up HTTP server (in separate thread) to catch OAuth redirect URL
223225 callback_queue = Queue ()
224226 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 :
226232 port , host , fqdn = http_server_thread .server_address_info ()
227233 # TODO: use fully qualified domain name instead of "localhost"?
228234 # Otherwise things won't work when the client is for example
0 commit comments