29
29
30
30
localport = '8080' # normally 8080
31
31
website = 'glowscript' # normally glowscript
32
- weblocs = ["www." + website + ".org" , website + ".org" , "localhost:" + localport ,"127.0.0.1:" + localport , "www.glowscriptdev.spvi.net" ,"devbasherwo.uc.r.appspot.com" ]
32
+
33
+ weblocs = ["www." + website + ".org" , website + ".org" , "localhost:" + localport ,"127.0.0.1:" + localport ,
34
+ "www.glowscriptdev.spvi.net" ,"devbasherwo.uc.r.appspot.com" ,"www.devbasherwo.org" ]
35
+
33
36
local_hosts = ['http://localhost' ,'http://127.0.0.1' ]
34
37
35
38
import json
39
42
import datetime
40
43
import uuid
41
44
import flask
45
+ import traceback
42
46
43
47
from google .cloud import ndb
44
48
from google .auth .transport import requests
45
49
from google .cloud import ndb
46
50
import google .oauth2 .id_token
47
51
48
- from .models import User , Program , Folder
52
+ from .models import User , Program , Folder , Setting
49
53
50
54
import os , re , base64 , logging # logging.info(string variable) prints to GAE launcher log, for debugging
51
55
from datetime import datetime
@@ -98,13 +102,36 @@ def middleware(environ, start_response):
98
102
# in production
99
103
#
100
104
105
+ module_cache = {} # cache some things, like ide.js, so we don't need to keep reloading them
106
+
107
+ #
108
+ # we need to replace WEBSERVER_NAME_TEMPLATE in ide.js with the correct
109
+ # webserver name from the datastore.
110
+ #
111
+
112
+ def load_idejs (webserver = 'devbasherwo.spvi.net' ):
113
+ try :
114
+ ide_js = open ('ide/ide.js' ).read ()
115
+ ide_js = ide_js .replace ('WEBSERVER_NAME_TEMPLATE' ,webserver )
116
+ module_cache ['ide.js' ] = ide_js
117
+ except :
118
+ ide_js = 'Ack! Cannot load ide.js'
119
+ traceback .print_exc ()
120
+
121
+ return ide_js
122
+
101
123
@app .route ('/css/<path:filename>' )
102
124
def css_static (filename ):
103
125
return flask .send_from_directory ('../css' , filename )
104
126
105
127
@app .route ('/ide.js' )
106
128
def idejs_static ():
107
- return flask .send_from_directory ('.' , 'ide.js' )
129
+ ide_js = module_cache .get ('ide_js' )
130
+ if not ide_js :
131
+ web_setting = Setting .get ('web_domain_name' )
132
+ ide_js = load_idejs (web_setting .value )
133
+
134
+ return ide_js ,200
108
135
109
136
@app .route ('/lib/<path:filename>' )
110
137
def lib_static (filename ):
@@ -286,7 +313,8 @@ def ApiUser(username):
286
313
try :
287
314
names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)' , 1 )
288
315
except ParseUrlPathException as pup :
289
- errorMsg , code = pup .args
316
+ errorMsg = pup .args [0 ]
317
+ code = pup .args [1 ]
290
318
return flask .make_response (errorMsg , code )
291
319
292
320
user = names and names [0 ] or ''
@@ -334,7 +362,8 @@ def ApiUserFolders(username):
334
362
try :
335
363
names , folder_owner , logged_in_email = parseUrlPath (r'/api/user/([^/]+)/folder/' , 1 )
336
364
except ParseUrlPathException as pup :
337
- errorMsg , code = pup .args
365
+ errorMsg = pup .args [0 ]
366
+ code = pup .args [1 ]
338
367
return flask .make_response (errorMsg , code )
339
368
340
369
user = names and names [0 ] or ''
@@ -356,9 +385,10 @@ def ApiUserFolders(username):
356
385
def ApiUserFolder (username , foldername ):
357
386
358
387
try :
359
- names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)' , 2 )
388
+ names , ndb_user , _ = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)' , 2 )
360
389
except ParseUrlPathException as pup :
361
- errorMsg , code = pup .args
390
+ errorMsg = pup .args [0 ]
391
+ code = pup .args [1 ]
362
392
return flask .make_response (errorMsg , code )
363
393
364
394
user = names and names [0 ] or ''
@@ -384,13 +414,13 @@ def ApiUserFolder(username, foldername):
384
414
385
415
ndb_folder = ndb .Key ("User" , user , "Folder" , folder ).get ()
386
416
if not ndb_folder :
387
- return self . error ( 404 )
417
+ return flask . make_response ( "Not found" , 403 )
388
418
program_count = 0
389
- for p in Program .query (ancestor = ndb .Key ("User" ,user ,"Folder" ,folder )):
419
+ for _ in Program .query (ancestor = ndb .Key ("User" ,user ,"Folder" ,folder )):
390
420
program_count += 1
391
421
392
422
if program_count > 0 :
393
- return self . error ( 409 )
423
+ return flask . make_response ( "There are programs here" , 409 )
394
424
ndb_folder .key .delete ()
395
425
return {}
396
426
@@ -402,7 +432,8 @@ def ApiUserFolderPrograms(username, foldername):
402
432
try :
403
433
names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)/program/' , 2 )
404
434
except ParseUrlPathException as pup :
405
- errorMsg , code = pup .args
435
+ errorMsg = pup .args [0 ]
436
+ code = pup .args [1 ]
406
437
return flask .make_response (errorMsg , code )
407
438
408
439
user , folder = names
@@ -413,7 +444,7 @@ def ApiUserFolderPrograms(username, foldername):
413
444
pub = ndb_folder .isPublic is None or ndb_folder .isPublic or email == ndb_user .email # before March 2015, isPublic wasn't set
414
445
except :
415
446
pub = True
416
- if not pub and not override (gaeUser ):
447
+ if not pub and not override (ndb_user . email ):
417
448
return {"user" :user ,"folder" :folder ,
418
449
"error" : str ('The folder "' + user + '/' + folder + '" is a private folder\n to which you do not have access.' )}
419
450
else :
@@ -431,7 +462,8 @@ def ApiUserFolderProgram(username, foldername, programname):
431
462
try :
432
463
names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)/program/([^/]+)' , 3 )
433
464
except ParseUrlPathException as pup :
434
- errorMsg , code = pup .args
465
+ errorMsg = pup .args [0 ]
466
+ code = pup .args [1 ]
435
467
return flask .make_response (errorMsg , code )
436
468
437
469
user , folder , program = names
@@ -462,7 +494,6 @@ def ApiUserFolderProgram(username, foldername, programname):
462
494
if not authorize_user (user ):
463
495
return flask .make_response ("Unauthorized" , 401 )
464
496
465
- source = ''
466
497
value = flask .request .values .get ("program" )
467
498
468
499
if value :
@@ -509,7 +540,8 @@ def ApiUserFolderProgramDownload(username, foldername, programname, optionname):
509
540
try :
510
541
names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)/program/([^/]+)/option/([^/]+)' , 4 )
511
542
except ParseUrlPathException as pup :
512
- errorMsg , code = pup .args
543
+ errorMsg = pup .args [0 ]
544
+ code = pup .args [1 ]
513
545
return flask .make_response (errorMsg , code )
514
546
515
547
user , folder , name , option = names
@@ -585,9 +617,10 @@ def ApiUserFolderProgramDownload(username, foldername, programname, optionname):
585
617
def ApiUserProgramCopy (username , foldername , programname , optionname , oldfoldername , oldprogramname ):
586
618
587
619
try :
588
- names , ndb_user , email = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)/program/([^/]+)/option/([^/]+)/oldfolder/([^/]+)/oldprogram/([^/]+)' , 6 )
620
+ names , _ , _ = parseUrlPath (r'/api/user/([^/]+)/folder/([^/]+)/program/([^/]+)/option/([^/]+)/oldfolder/([^/]+)/oldprogram/([^/]+)' , 6 )
589
621
except ParseUrlPathException as pup :
590
- errorMsg , code = pup .args
622
+ errorMsg = pup .args [0 ]
623
+ code = pup .args [1 ]
591
624
return flask .make_response (errorMsg , code )
592
625
593
626
user , folder , program , option , oldfolder , oldprogram = names
0 commit comments