Skip to content

Commit eaef6e3

Browse files
committed
Allowed environment configuration of RSERVER_FRAME_ORIGIN, NB_USER, RSERVER_TIMEOUT, RSESSION_TIMEOUT
1 parent bf936df commit eaef6e3

File tree

7 files changed

+64
-9
lines changed

7 files changed

+64
-9
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Metadata-Version: 2.1
2+
Name: jupyter-rsession-proxy
3+
Version: 2.2.1
4+
Summary: Jupyter extension to proxy RStudio
5+
Home-page: https://github.com/jupyterhub/jupyter-rsession-proxy
6+
Author: Ryan Lovett & Yuvi Panda
7+
Keywords: Jupyter
8+
Classifier: Framework :: Jupyter
9+
License-File: LICENSE
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
LICENSE
2+
MANIFEST.in
3+
README.md
4+
setup.cfg
5+
setup.py
6+
jupyter_rsession_proxy/__init__.py
7+
jupyter_rsession_proxy.egg-info/PKG-INFO
8+
jupyter_rsession_proxy.egg-info/SOURCES.txt
9+
jupyter_rsession_proxy.egg-info/dependency_links.txt
10+
jupyter_rsession_proxy.egg-info/entry_points.txt
11+
jupyter_rsession_proxy.egg-info/requires.txt
12+
jupyter_rsession_proxy.egg-info/top_level.txt
13+
jupyter_rsession_proxy/icons/rstudio.svg
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[jupyter_serverproxy_servers]
2+
rstudio = jupyter_rsession_proxy:setup_rserver
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jupyter-server-proxy!=4.0.0,!=4.1.0,>=3.2.3
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jupyter_rsession_proxy

jupyter_rsession_proxy/__init__.py

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,37 @@
88
from textwrap import dedent
99
from urllib.parse import urlparse, urlunparse
1010

11+
def get_env_value(env_var_name):
12+
'''
13+
Get the value of os.environ[env_var_name] if it is set, else return the default.
14+
Currently, defaults provdied are:
15+
RSERVER_FRAME_ORIGIN: 'same'
16+
NB_USER: getpass.getuser(),
17+
RSERVER_TIMEOUT: 15.0,
18+
RSESSION_TIMEOUT: 15.0
19+
Returns: the value of the environment variable if present; the default value
20+
if not. Returns None if the environment variable is not present and
21+
env_var_name is not a key of the default dictionary. Returns the default
22+
if the variable is expected to be numeric and the provided value in the
23+
environment is non-numeric
24+
'''
25+
env_var_defaults = {
26+
'RSERVER_FRAME_ORIGIN': 'some',
27+
'NB_USER': getpass.getuser(),
28+
'RSERVER_TIMEOUT': 15.0,
29+
'RSESSION_TIMEOUT': 15.0
30+
}
31+
numeric_values = {'RSERVER_TIMEOUT', 'RSESSION_TIMEOUT'}
32+
default_value = env_var_defaults[env_var_name] if env_var_name in env_var_defaults else None
33+
value = os.environ.get(env_var_name, default_value)
34+
if env_var_name in numeric_values:
35+
# Make sure we return a numeric value
36+
try:
37+
return float(value)
38+
except Exception:
39+
return default_value
40+
else:
41+
return value
1142

1243
def get_rstudio_executable(prog):
1344
# Find prog in known locations
@@ -47,12 +78,14 @@ def get_system_user():
4778
try:
4879
user = pwd.getpwuid(os.getuid())[0]
4980
except:
50-
user = os.environ.get('NB_USER', getpass.getuser())
81+
user = get_env_value('NB_USER')
5182
return(user)
5283

5384
def setup_rserver():
5485
def _get_env(port):
5586
return dict(USER=get_system_user())
87+
88+
5689

5790
def db_config(db_dir):
5891
'''
@@ -88,7 +121,7 @@ def _get_cmd(port):
88121
cmd = [
89122
get_rstudio_executable('rserver'),
90123
'--auth-none=1',
91-
'--www-frame-origin=same',
124+
f'--www-frame-origin={get_env_value("RSERVER_FRAME_ORIGIN")}',
92125
'--www-port=' + str(port),
93126
'--www-verify-user-agent=0',
94127
'--secure-cookie-key-file=' + ntf.name,
@@ -105,15 +138,10 @@ def _get_cmd(port):
105138

106139
return cmd
107140

108-
def _get_timeout(default=15):
109-
try:
110-
return float(os.getenv('RSERVER_TIMEOUT', default))
111-
except Exception:
112-
return default
113141

114142
server_process = {
115143
'command': _get_cmd,
116-
'timeout': _get_timeout(),
144+
'timeout': get_env_value('RSERVER_TIMEOUT'),
117145
'environment': _get_env,
118146
'rewrite_response': rewrite_netloc,
119147
'launcher_entry': {
@@ -162,7 +190,7 @@ def _get_timeout(default=15):
162190

163191
return {
164192
'command': _get_cmd,
165-
'timeout': _get_timeout(),
193+
'timeout': get_env_value('RSESSION_TIMEOUT'),
166194
'environment': _get_env,
167195
'launcher_entry': {
168196
'title': 'RStudio',

0 commit comments

Comments
 (0)