Skip to content

Commit 1b613d7

Browse files
committed
Use dedicated function for frame origin.
1 parent c178287 commit 1b613d7

File tree

2 files changed

+17
-41
lines changed

2 files changed

+17
-41
lines changed

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ Note that [RStudio Server Pro](https://rstudio.com/products/rstudio-server-pro)
1111

1212
This extension used to proxy Shiny server as well, however that functionality has been [separated](https://github.com/ryanlovett/jupyter-shiny-proxy).
1313

14-
15-
1614
## Installation
1715

1816
### Pre-reqs
@@ -47,7 +45,7 @@ This extension launches an rstudio server process from the jupyter notebook serv
4745
The following behavior can be configured with environment variables
4846

4947
| Environment Variable | Effect | Default Value | Notes
50-
| RSERVER_FRAME_ORIGIN | The value of the `www-frame-origin` flag to rserver | `same` | |
48+
| JUPYTER_RSESSION_PROXY_WWW_FRAME_ORIGIN | The value of the `www-frame-origin` flag to rserver | `same` | |
5149
| RSERVER_TIMEOUT | Idle timeout flag to rserver in minutes | 15 | must be numeric and positive |
5250
| RSESSION_TIMEOUT | Idle timeout flag to rsession in minutes | 15 | must be numeric and positive |
53-
| NB_USER | Name of the Notebook user | `getuser.getpass()` ||
51+
| NB_USER | Fallback name of the Notebook user, if password database lookup fails | `getuser.getpass()` ||

jupyter_rsession_proxy/__init__.py

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,6 @@
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
4211

4312
def get_rstudio_executable(prog):
4413
# Find prog in known locations
@@ -78,14 +47,12 @@ def get_system_user():
7847
try:
7948
user = pwd.getpwuid(os.getuid())[0]
8049
except:
81-
user = get_env_value('NB_USER')
50+
user = os.getenv('NB_USER', getpass.getuser())
8251
return(user)
8352

8453
def setup_rserver():
8554
def _get_env(port):
8655
return dict(USER=get_system_user())
87-
88-
8956

9057
def db_config(db_dir):
9158
'''
@@ -110,6 +77,12 @@ def _support_arg(arg):
11077
ret = subprocess.check_output([get_rstudio_executable('rserver'), '--help'])
11178
return ret.decode().find(arg) != -1
11279

80+
def _get_www_frame_origin(default="same"):
81+
try:
82+
return os.getenv('JUPYTER_RSESSION_PROXY_WWW_FRAME_ORIGIN', default)
83+
except Exception:
84+
return default
85+
11386
def _get_cmd(port):
11487
ntf = tempfile.NamedTemporaryFile()
11588

@@ -121,7 +94,7 @@ def _get_cmd(port):
12194
cmd = [
12295
get_rstudio_executable('rserver'),
12396
'--auth-none=1',
124-
f'--www-frame-origin={get_env_value("RSERVER_FRAME_ORIGIN")}',
97+
'--www-frame-origin=' + _get_www_frame_origin(),
12598
'--www-port=' + str(port),
12699
'--www-verify-user-agent=0',
127100
'--secure-cookie-key-file=' + ntf.name,
@@ -138,10 +111,15 @@ def _get_cmd(port):
138111

139112
return cmd
140113

114+
def _get_timeout(default=15):
115+
try:
116+
return float(os.getenv('RSERVER_TIMEOUT', default))
117+
except Exception:
118+
return default
141119

142120
server_process = {
143121
'command': _get_cmd,
144-
'timeout': get_env_value('RSERVER_TIMEOUT'),
122+
'timeout': _get_timeout(),
145123
'environment': _get_env,
146124
'rewrite_response': rewrite_netloc,
147125
'launcher_entry': {
@@ -190,7 +168,7 @@ def _get_timeout(default=15):
190168

191169
return {
192170
'command': _get_cmd,
193-
'timeout': get_env_value('RSESSION_TIMEOUT'),
171+
'timeout': _get_timeout(),
194172
'environment': _get_env,
195173
'launcher_entry': {
196174
'title': 'RStudio',

0 commit comments

Comments
 (0)