Skip to content

Commit 463e611

Browse files
authored
feat(auth): enable OS port selection for OAuth server Use port 0 to allow OS to automatically assign available port, removing hardcoded port range (8000-8010) from _prepare_server method. This resolves port conflict issues when the OAuth server fails to bind to predefined ports. Fixes #913
Refactor server preparation to use a dynamic port.
1 parent ec91377 commit 463e611

File tree

1 file changed

+6
-15
lines changed

1 file changed

+6
-15
lines changed

ggshield/verticals/auth/oauth.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def oauth_process(
104104
if extra_scopes is not None:
105105
self._extra_scopes = extra_scopes
106106

107-
self._prepare_server()
107+
self.158()
108108
self._redirect_to_login()
109109
self._wait_for_callback()
110110
self._print_login_success()
@@ -163,20 +163,11 @@ def _redirect_to_login(self) -> None:
163163
webbrowser.open_new_tab(request_uri)
164164

165165
def _prepare_server(self) -> None:
166-
for port in range(*USABLE_PORT_RANGE):
167-
try:
168-
self.server = HTTPServer(
169-
# only consider requests from localhost on the predetermined port
170-
("127.0.0.1", port),
171-
functools.partial(RequestHandler, self),
172-
)
173-
self._port = port
174-
break
175-
except OSError:
176-
continue
177-
else:
178-
raise UnexpectedError("Could not find unoccupied port.")
179-
166+
self.server = HTTPServer(
167+
("127.0.0.1", 0),
168+
functools.partial(RequestHandler, self),
169+
)
170+
self._port = self.server.server_port
180171
def _wait_for_callback(self) -> None:
181172
"""
182173
Wait to receive and process the authorization callback on the local server.

0 commit comments

Comments
 (0)