Skip to content

Commit ae1428c

Browse files
committed
Config download file name, require auth for config upload, support legacy file access
1 parent e94c997 commit ae1428c

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

src/py/bbctrl/Config.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import copy
3232
import glob
3333
import re
34-
import socket
3534
import datetime
3635

3736
from . import util
@@ -273,15 +272,10 @@ def reset(self):
273272
self.ctrl.events.emit('invalidate-all')
274273

275274

276-
def get_filename(self):
277-
fmt = socket.gethostname() + '-%Y%m%d-%H%M%S.json'
278-
return datetime.datetime.now().strftime(fmt)
279-
280-
281275
def backup(self):
282276
path = 'upload/configs'
283277
if not os.path.exists(path): os.makedirs(path)
284-
path += '/' + self.get_filename()
278+
path += '/' + util.get_config_filename()
285279

286280
with open(path, 'w') as f:
287281
json.dump(self.load(), f, indent = 2, separators = (',', ': '))

src/py/bbctrl/FileSystemHandler.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,23 @@ def get_fs(self): return self.get_ctrl().fs
5050
def delete(self, path): self.get_fs().delete(clean_path(path))
5151

5252

53-
def put(self, path):
54-
path = clean_path(path)
53+
def put(self, path = None):
54+
if path is not None:
55+
path = clean_path(path)
56+
57+
if 'file' in self.request.files:
58+
self.get_fs().mkdir(os.path.dirname(path))
59+
file = self.request.files['file'][0]
60+
self.get_fs().write(path, file['body'])
61+
62+
else: self.get_fs().mkdir(clean_path(path))
5563

56-
if 'file' in self.request.files:
57-
self.get_fs().mkdir(os.path.dirname(path))
58-
file = self.request.files['file'][0]
64+
elif 'gcode' in self.request.files: # Backwards compatibility
65+
file = self.request.files['gcode'][0]
66+
path = 'Home/' + clean_path(os.path.basename(file['filename']))
5967
self.get_fs().write(path, file['body'])
6068

61-
else: self.get_fs().mkdir(path)
69+
os.sync()
6270

6371

6472
@gen.coroutine

src/py/bbctrl/Web.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ def put(self, device, action):
178178

179179
class ConfigDownloadHandler(APIHandler):
180180
def set_default_headers(self):
181-
filename = self.get_ctrl().config.get_filename()
181+
# NOTE get_ctrl() not accessible from here because it needs get_cookie()
182+
filename = util.get_config_filename()
182183
self.set_header('Content-Type', 'application/octet-stream')
183184
self.set_header('Content-Disposition',
184185
'attachment; filename="%s"' % filename)
@@ -195,6 +196,7 @@ def get(self, action):
195196

196197

197198
def put(self, action):
199+
self.authorize()
198200
if action == 'save': self.get_ctrl().config.save(self.json)
199201
elif action == 'reset': self.get_ctrl().config.reset()
200202
elif action == 'backup': self.get_ctrl().config.backup()
@@ -522,6 +524,7 @@ def __init__(self, args, ioloop):
522524
(r'/api/upgrade', UpgradeHandler),
523525
(r'/api/usb/eject/(.*)', USBEjectHandler),
524526
(r'/api/fs/(.*)', FileSystemHandler),
527+
(r'/api/file', FileSystemHandler), # Compat
525528
(r'/api/macro/(\d+)', MacroHandler),
526529
(r'/api/(path)/(.*)', PathHandler),
527530
(r'/api/(positions)/(.*)', PathHandler),

src/py/bbctrl/util.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from datetime import datetime
2929
import pkg_resources
3030
from pkg_resources import Requirement, resource_filename
31+
import socket
3132

3233

3334
_version = pkg_resources.require('bbctrl')[0].version
@@ -53,5 +54,9 @@ def version_less(a, b): return parse_version(a) < parse_version(b)
5354
def timestamp(): return datetime.now().strftime('%Y%m%d-%H%M%S')
5455

5556

57+
def get_config_filename():
58+
return socket.gethostname() + datetime.now().strftime('-%Y%m%d-%H%M%S.json')
59+
60+
5661
def timestamp_to_iso8601(ts):
5762
return datetime.fromtimestamp(ts).replace(microsecond = 0).isoformat() + 'Z'

0 commit comments

Comments
 (0)