|
2 | 2 | # Distributed under the terms of the Modified BSD License.
|
3 | 3 | """Kernel Gateway Jupyter application."""
|
4 | 4 |
|
5 |
| -import os |
6 |
| -import socket |
7 | 5 | import errno
|
8 |
| -import logging |
9 |
| -import nbformat |
10 | 6 | import importlib
|
| 7 | +import logging |
| 8 | +import os |
11 | 9 | import signal
|
| 10 | +import socket |
| 11 | +from distutils.util import strtobool |
12 | 12 |
|
| 13 | +import nbformat |
13 | 14 | from notebook.services.kernels.kernelmanager import MappingKernelManager
|
14 | 15 |
|
15 | 16 | try:
|
16 | 17 | from urlparse import urlparse
|
17 | 18 | except ImportError:
|
18 | 19 | from urllib.parse import urlparse
|
19 | 20 |
|
20 |
| -from traitlets import Unicode, Integer, default, observe, Type, Instance, List |
| 21 | +from traitlets import Unicode, Integer, default, observe, Type, Instance, List, CBool |
21 | 22 |
|
22 | 23 | from jupyter_core.application import JupyterApp, base_aliases
|
23 | 24 | from jupyter_client.kernelspec import KernelSpecManager
|
@@ -174,6 +175,15 @@ def allow_origin_default(self):
|
174 | 175 | def expose_headers_default(self):
|
175 | 176 | return os.getenv(self.expose_headers_env, '')
|
176 | 177 |
|
| 178 | + trust_xheaders_env = 'KG_TRUST_XHEADERS' |
| 179 | + trust_xheaders = CBool(False, config=True, |
| 180 | + help='Use x-* header values for overriding the remote-ip, useful when application is behing a proxy. (KG_TRUST_XHEADERS env var)' |
| 181 | + ) |
| 182 | + @default('trust_xheaders') |
| 183 | + def trust_xheaders_default(self): |
| 184 | + return strtobool(os.getenv(self.trust_xheaders_env, 'False')) |
| 185 | + |
| 186 | + |
177 | 187 | max_age_env = 'KG_MAX_AGE'
|
178 | 188 | max_age = Unicode(config=True,
|
179 | 189 | help='Sets the Access-Control-Max-Age header. (KG_MAX_AGE env var)'
|
@@ -505,6 +515,7 @@ def init_http_server(self):
|
505 | 515 | """
|
506 | 516 | ssl_options = self._build_ssl_options()
|
507 | 517 | self.http_server = httpserver.HTTPServer(self.web_app,
|
| 518 | + xheaders=self.trust_xheaders, |
508 | 519 | ssl_options=ssl_options)
|
509 | 520 |
|
510 | 521 | for port in random_ports(self.port, self.port_retries+1):
|
|
0 commit comments