Skip to content

Commit

Permalink
improve local port bind for login
Browse files Browse the repository at this point in the history
  • Loading branch information
houqp committed Oct 11, 2018
1 parent e3bd7aa commit 251c5fb
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions floyd/manager/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,34 +57,34 @@ def log_message(self, fmt, *args):
return


@contextlib.contextmanager
def get_free_port():
try:
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('localhost', 0))
yield s.getsockname()[1]
(hostname, port) = s.getsockname()
s.close()
return (hostname, port)
except socket.error:
yield None
return (None, None)


def wait_for_apikey():
floyd_logger.info('Waiting for login from browser...')

key_queue = Queue()
with get_free_port() as port:
if not port:
floyd_logger.error("Failed to allocate TCP port for automatic login.")
return
server = LoginServer(('', port), LoginHttpRequestHandler, key_queue)
(hostname, port) = get_free_port()
if not port:
floyd_logger.error("Failed to allocate TCP port for automatic login.")
return
server = LoginServer((hostname, port), LoginHttpRequestHandler, key_queue)

t = threading.Thread(
target=server.serve_forever)
t.daemon = True
t.start()

cli_host = 'http://127.0.0.1'
cli_host = 'http://' + hostname
url = '%s/cli_login?callback=%s:%s' % (floyd.floyd_web_host, cli_host, port)
subprocess.check_output(
[sys.executable, '-m', 'webbrowser', url], stderr=subprocess.STDOUT)
Expand Down

0 comments on commit 251c5fb

Please sign in to comment.