Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SG-31911 Add listen address argument #32

Merged
merged 3 commits into from Oct 31, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 24 additions & 5 deletions webapp.py
Expand Up @@ -12,7 +12,9 @@
from six.moves.urllib import parse
from six.moves import BaseHTTPServer
import json
import socket
import ssl
import sys
import logging
import subprocess

Expand Down Expand Up @@ -470,19 +472,20 @@ def log_error(self, format, *args):
logger.error(message)


def create_server(port, settings, keyfile=None, certfile=None):
def create_server(port, listen_address, settings, keyfile=None, certfile=None):
"""
Create the server.

:param int port: A port number to listen to.
:param str listen_address: The address to listen to.
:param str settings: Path to settings file.
:param str keyfile: Optional path to a PEM key file to run in HTTPS mode.
:param str certfile: Optional path to a PEM certificate file to run in HTTPS mode.

:returns: The HTTP Server
:type: :class:`BaseHTTPServer.BaseHTTPRequestHandler`
"""
httpd = Server(settings, ("localhost", port), RequestHandler)
httpd = Server(settings, (listen_address, port), RequestHandler)
if keyfile and certfile:
# Activate HTTPS.
httpd.socket = ssl.wrap_socket(
Expand All @@ -491,23 +494,29 @@ def create_server(port, settings, keyfile=None, certfile=None):
return httpd


def run_server(port, settings, keyfile=None, certfile=None):
def run_server(port, listen_address, settings, keyfile=None, certfile=None):
"""
Run the server until a shutdown is requested.

:param int port: A port number to listen to.
:param str listen_address: The address to listen to.
:param str settings: Path to settings file.
:param str keyfile: Optional path to a PEM key file to run in https mode.
:param str certfile: Optional path to a PEM certificate file to run in https mode.
"""
create_server(port, settings, keyfile, certfile).serve_forever()
create_server(port, listen_address, settings, keyfile, certfile).serve_forever()


def main():
"""
Retrieve command line arguments and start the server.
"""
parser = argparse.ArgumentParser(description=DESCRIPTION)
parser.add_argument(
"--listen_address",
default="127.0.0.1",
help="The IPv4 address that the server binds to. Use 0.0.0.0 to bind on all network interfaces.",
)
parser.add_argument(
"--port", type=int, default=9090, help="The port number to listen to.",
)
Expand All @@ -525,8 +534,18 @@ def main():
if args.ssl_context:
keyfile, certfile = args.ssl_context

try:
socket.inet_aton(args.listen_address)
except socket.error:
print("The specified listen address is not a valid IPv4 address.")
sys.exit(1)

run_server(
port=args.port, settings=args.settings, keyfile=keyfile, certfile=certfile,
listen_address=args.listen_address,
port=args.port,
settings=args.settings,
keyfile=keyfile,
certfile=certfile,
)


Expand Down