88from textwrap import dedent
99from 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
1243def 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
5384def 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