|  | 
| 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