Skip to content

Commit b509c22

Browse files
committed
Add settings to control IP address bindings
1 parent 3203ee6 commit b509c22

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

docs/server-config.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ at [`logging.config` documentation page](https://docs.python.org/3.6/library/log
5858
`[TabPy]` parameters:
5959

6060
- `TABPY_PORT` - port for TabPy to listen on. Default value - `9004`.
61+
- `TABPY_BIND_IP` - ip address to bind to for TabPy to listen on. Default value - `0.0.0.0`.
6162
- `TABPY_QUERY_OBJECT_PATH` - query objects location. Used with models, see
6263
[TabPy Tools documentation](tabpy-tools.md) for details. Default value -
6364
`/tmp/query_objects`.
@@ -103,6 +104,7 @@ at [`logging.config` documentation page](https://docs.python.org/3.6/library/log
103104
- `TABPY_ARROWFLIGHT_PORT` - port for
104105
[Arrow Flight](https://arrow.apache.org/docs/format/Flight.html)
105106
connection used in streaming mode. Default value is 13622.
107+
- `TABPY_ARROWFLIGHT_BIND_IP` - ip address to bind to for Arrow Flight to listen on. Default value is `0.0.0.0`.
106108

107109
### Configuration File Example
108110

@@ -113,6 +115,7 @@ settings._
113115
[TabPy]
114116
# TABPY_QUERY_OBJECT_PATH = /tmp/query_objects
115117
# TABPY_PORT = 9004
118+
# TABPY_BIND_IP = 0.0.0.0
116119
# TABPY_STATE_PATH = <package-path>/tabpy/tabpy_server
117120

118121
# Where static pages live
@@ -152,6 +155,7 @@ settings._
152155
# Flight port defaults to 13622 if not set here.
153156
# TABPY_ARROW_ENABLE = True
154157
# TABPY_ARROWFLIGHT_PORT = 13622
158+
# TABPY_ARROWFLIGHT_BIND_IP = 0.0.0.0
155159

156160

157161
[loggers]

tabpy/tabpy_server/app/app.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ def _initialize_ssl_context(self):
9696
if not hasattr(ssl.TLSVersion, min_tls):
9797
logger.warning(f"Unrecognized value for TABPY_MINIMUM_TLS_VERSION: {min_tls}")
9898
min_tls = "TLSv1_2"
99-
100-
logger.info(f"Setting minimum TLS version to {min_tls}")
99+
100+
logger.info(f"Setting minimum TLS version to {min_tls}")
101101
ssl_context.minimum_version = ssl.TLSVersion[min_tls]
102102

103103
return ssl_context
@@ -112,7 +112,7 @@ def _get_tls_certificates(self, config):
112112
tls_private_key = key_file.read()
113113
tls_certificates.append((tls_cert_chain, tls_private_key))
114114
return tls_certificates
115-
115+
116116
def _get_arrow_server(self, config):
117117
verify_client = None
118118
tls_certificates = None
@@ -121,7 +121,7 @@ def _get_arrow_server(self, config):
121121
scheme = "grpc+tls"
122122
tls_certificates = self._get_tls_certificates(config)
123123

124-
host = "0.0.0.0"
124+
host = config.get(SettingsParameters.ArrowFlightBindIp)
125125
port = config.get(SettingsParameters.ArrowFlightPort)
126126
location = "{}://{}:{}".format(scheme, host, port)
127127

@@ -140,7 +140,7 @@ def _get_arrow_server(self, config):
140140

141141
def run(self):
142142
application = self._create_tornado_web_app()
143-
143+
144144
init_model_evaluator(self.settings, self.tabpy_state, self.python_service)
145145

146146
protocol = self.settings[SettingsParameters.TransferProtocol]
@@ -158,14 +158,16 @@ def run(self):
158158

159159
application.listen(
160160
self.settings[SettingsParameters.Port],
161+
self.settings[SettingsParameters.BindIp],
161162
ssl_options=ssl_options,
162163
max_buffer_size=self.max_request_size,
163164
max_body_size=self.max_request_size,
164165
**settings,
165-
)
166+
)
166167

167168
logger.info(
168-
"Web service listening on port "
169+
"Web service listening on "
170+
f"{str(self.settings[SettingsParameters.BindIp])}:"
169171
f"{str(self.settings[SettingsParameters.Port])}"
170172
)
171173

@@ -332,6 +334,7 @@ def _parse_config(self, config_file):
332334

333335
settings_parameters = [
334336
(SettingsParameters.Port, ConfigParameters.TABPY_PORT, 9004, None),
337+
(SettingsParameters.BindIp, ConfigParameters.TABPY_BIND_IP, '0.0.0.0', None),
335338
(SettingsParameters.ServerVersion, None, __version__, None),
336339
(SettingsParameters.EvaluateEnabled, ConfigParameters.TABPY_EVALUATE_ENABLE,
337340
True, parser.getboolean),
@@ -357,8 +360,9 @@ def _parse_config(self, config_file):
357360
100, None),
358361
(SettingsParameters.GzipEnabled, ConfigParameters.TABPY_GZIP_ENABLE,
359362
True, parser.getboolean),
360-
(SettingsParameters.ArrowEnabled, ConfigParameters.TABPY_ARROW_ENABLE, False, parser.getboolean),
363+
(SettingsParameters.ArrowEnabled, ConfigParameters.TABPY_ARROW_ENABLE, False, parser.getboolean),
361364
(SettingsParameters.ArrowFlightPort, ConfigParameters.TABPY_ARROWFLIGHT_PORT, 13622, parser.getint),
365+
(SettingsParameters.ArrowFlightBindIp, ConfigParameters.TABPY_ARROWFLIGHT_BIND_IP, '0.0.0.0', None),
362366
]
363367

364368
for setting, parameter, default_val, parse_function in settings_parameters:
@@ -373,7 +377,7 @@ def _parse_config(self, config_file):
373377
].lower()
374378

375379
self._validate_transfer_protocol_settings()
376-
380+
377381
# Set max request size in bytes
378382
self.max_request_size = (
379383
int(self.settings[SettingsParameters.MaxRequestSizeInMb]) * 1024 * 1024
@@ -493,12 +497,12 @@ def _handle_configuration_without_authentication(self):
493497

494498
if self.disable_auth_warning == True:
495499
logger.info(std_no_auth_msg)
496-
return
500+
return
497501

498502
confirm_no_auth_msg = "\nWARNING: This TabPy server is not currently configured for username/password authentication. "
499503

500504
if self.settings[SettingsParameters.EvaluateEnabled]:
501-
confirm_no_auth_msg += ("This means that, because the TABPY_EVALUATE_ENABLE feature is enabled, there is "
505+
confirm_no_auth_msg += ("This means that, because the TABPY_EVALUATE_ENABLE feature is enabled, there is "
502506
"the potential that unauthenticated individuals may be able to remotely execute code on this machine. ")
503507

504508
confirm_no_auth_msg += ("We strongly advise against proceeding without authentication as it poses a significant security risk.\n\n"

tabpy/tabpy_server/app/app_parameters.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class ConfigParameters:
55

66
TABPY_PWD_FILE = "TABPY_PWD_FILE"
77
TABPY_PORT = "TABPY_PORT"
8+
TABPY_BIND_IP = "TABPY_BIND_IP"
89
TABPY_QUERY_OBJECT_PATH = "TABPY_QUERY_OBJECT_PATH"
910
TABPY_STATE_PATH = "TABPY_STATE_PATH"
1011
TABPY_TRANSFER_PROTOCOL = "TABPY_TRANSFER_PROTOCOL"
@@ -21,6 +22,7 @@ class ConfigParameters:
2122
# Arrow specific settings
2223
TABPY_ARROW_ENABLE = "TABPY_ARROW_ENABLE"
2324
TABPY_ARROWFLIGHT_PORT = "TABPY_ARROWFLIGHT_PORT"
25+
TABPY_ARROWFLIGHT_BIND_IP = "TABPY_ARROWFLIGHT_BIND_IP"
2426

2527

2628
class SettingsParameters:
@@ -30,6 +32,7 @@ class SettingsParameters:
3032

3133
TransferProtocol = "transfer_protocol"
3234
Port = "port"
35+
BindIp = "bind_ip"
3336
ServerVersion = "server_version"
3437
UploadDir = "upload_dir"
3538
CertificateFile = "certificate_file"
@@ -47,3 +50,4 @@ class SettingsParameters:
4750
# Arrow specific settings
4851
ArrowEnabled = "arrow_enabled"
4952
ArrowFlightPort = "arrowflight_port"
53+
ArrowFlightBindIp = "arrowflight_bind_ip"

tabpy/tabpy_server/common/default.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[TabPy]
22
# TABPY_QUERY_OBJECT_PATH = /tmp/query_objects
33
# TABPY_PORT = 9004
4+
# TABPY_BIND_IP = 0.0.0.0
45
# TABPY_STATE_PATH = ./tabpy/tabpy_server
56

67
# Where static pages live

0 commit comments

Comments
 (0)