From e135fd6514bb9050cbb7260ca4b73dd5f7da114f Mon Sep 17 00:00:00 2001 From: telamonian Date: Fri, 28 May 2021 18:39:16 -0400 Subject: [PATCH] adds `GatewayClient.auth_scheme` configurable --- .gitignore | 12 ++++++++++-- jupyter_server/gateway/gateway_client.py | 21 ++++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 1a246f57fe..5ff7515547 100644 --- a/.gitignore +++ b/.gitignore @@ -26,8 +26,6 @@ src *.swp *.map -.idea/ -.vscode/ Read the Docs config.rst @@ -37,3 +35,13 @@ config.rst # copied changelog file docs/source/other/changelog.md +# jetbrains ide stuff +*.iml +.idea/ + +# vscode ide stuff +*.code-workspace +.history +.vscode/* +!.vscode/*.template + diff --git a/jupyter_server/gateway/gateway_client.py b/jupyter_server/gateway/gateway_client.py index 83b1369e6d..2df23025b2 100644 --- a/jupyter_server/gateway/gateway_client.py +++ b/jupyter_server/gateway/gateway_client.py @@ -176,8 +176,13 @@ def _headers_default(self): return os.environ.get(self.headers_env, self.headers_default_value) auth_token = Unicode(default_value=None, allow_none=True, config=True, - help="""The authorization token used in the HTTP headers. (JUPYTER_GATEWAY_AUTH_TOKEN env var) - """ + help="""The authorization token used in the HTTP headers. The header will be formatted as: + + { + 'Authorization': '{auth_scheme} {auth_token}' + } + + (JUPYTER_GATEWAY_AUTH_TOKEN env var)""" ) auth_token_env = 'JUPYTER_GATEWAY_AUTH_TOKEN' @@ -185,6 +190,16 @@ def _headers_default(self): def _auth_token_default(self): return os.environ.get(self.auth_token_env, '') + auth_scheme = Unicode(default_value=None, allow_none=True, config=True, + help="""The auth scheme, added as a prefix to the authorization token used in the HTTP headers. + (JUPYTER_GATEWAY_AUTH_SCHEME env var)""" + ) + auth_scheme_env = 'JUPYTER_GATEWAY_AUTH_SCHEME' + + @default('auth_scheme') + def _auth_scheme_default(self): + return os.environ.get(self.auth_scheme_env, 'token') + validate_cert_default_value = True validate_cert_env = 'JUPYTER_GATEWAY_VALIDATE_CERT' validate_cert = Bool(default_value=validate_cert_default_value, config=True, @@ -268,7 +283,7 @@ def init_static_args(self): self._static_args['headers'] = json.loads(self.headers) if 'Authorization' not in self._static_args['headers'].keys(): self._static_args['headers'].update({ - 'Authorization': 'token {}'.format(self.auth_token) + 'Authorization': '{} {}'.format(self.auth_scheme, self.auth_token) }) self._static_args['connect_timeout'] = self.connect_timeout self._static_args['request_timeout'] = self.request_timeout