|  |  |  | @ -263,6 +263,13 @@ def reboot(): | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dispatcher.add_method | 
			
		
	
		
			
				
					|  |  |  |  | def uploadFileToUrl(fn, url, headers): | 
			
		
	
		
			
				
					|  |  |  |  |   return uploadFilesToUrls([[fn, url, headers]]) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dispatcher.add_method | 
			
		
	
		
			
				
					|  |  |  |  | def uploadFilesToUrls(files_data): | 
			
		
	
		
			
				
					|  |  |  |  |   items = [] | 
			
		
	
		
			
				
					|  |  |  |  |   for fn, url, headers in files_data: | 
			
		
	
		
			
				
					|  |  |  |  |     if len(fn) == 0 or fn[0] == '/' or '..' in fn: | 
			
		
	
		
			
				
					|  |  |  |  |       return 500 | 
			
		
	
		
			
				
					|  |  |  |  |     path = os.path.join(ROOT, fn) | 
			
		
	
	
		
			
				
					|  |  |  | @ -271,12 +278,14 @@ def uploadFileToUrl(fn, url, headers): | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     item = UploadItem(path=path, url=url, headers=headers, created_at=int(time.time() * 1000), id=None) | 
			
		
	
		
			
				
					|  |  |  |  |     upload_id = hashlib.sha1(str(item).encode()).hexdigest() | 
			
		
	
		
			
				
					|  |  |  |  |   item = item._replace(id=upload_id) | 
			
		
	
		
			
				
					|  |  |  |  |     items.append(item._replace(id=upload_id)) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   for item in items: | 
			
		
	
		
			
				
					|  |  |  |  |     upload_queue.put_nowait(item) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   UploadQueueCache.cache(upload_queue) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   return {"enqueued": 1, "item": item._asdict()} | 
			
		
	
		
			
				
					|  |  |  |  |   return {"enqueued": len(items), "items": [i._asdict() for i in items]} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dispatcher.add_method | 
			
		
	
	
		
			
				
					|  |  |  | @ -287,11 +296,15 @@ def listUploadQueue(): | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dispatcher.add_method | 
			
		
	
		
			
				
					|  |  |  |  | def cancelUpload(upload_id): | 
			
		
	
		
			
				
					|  |  |  |  |   upload_ids = {item.id for item in list(upload_queue.queue)} | 
			
		
	
		
			
				
					|  |  |  |  |   if upload_id not in upload_ids: | 
			
		
	
		
			
				
					|  |  |  |  |   if not isinstance(upload_id, list): | 
			
		
	
		
			
				
					|  |  |  |  |     upload_id = [upload_id] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   uploading_ids = {item.id for item in list(upload_queue.queue)} | 
			
		
	
		
			
				
					|  |  |  |  |   cancelled_ids = uploading_ids.intersection(upload_id) | 
			
		
	
		
			
				
					|  |  |  |  |   if len(cancelled_ids) == 0: | 
			
		
	
		
			
				
					|  |  |  |  |     return 404 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   cancelled_uploads.add(upload_id) | 
			
		
	
		
			
				
					|  |  |  |  |   cancelled_uploads.update(cancelled_ids) | 
			
		
	
		
			
				
					|  |  |  |  |   return {"success": 1} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |