def upload_source(self, input, file): """ POST /upload_source """ alerts = [] if get_exeflags(file["content"]): alerts.append({ "severity": "warning", "message": "You have submitted an executable! Please send the " "source code." }) Logger.info("UPLOAD", "User %s has uploaded an executable" % input["token"]) if not alerts: alerts.append({ "severity": "success", "message": "Source file uploaded correctly." }) source_id = Database.gen_id() try: path = StorageManager.new_source_file(source_id, file["name"]) except ValueError: BaseHandler.raise_exc(BadRequest, "INVALID_FILENAME", "The provided file has an invalid name") StorageManager.save_file(path, file["content"]) file_size = StorageManager.get_file_size(path) Database.add_source(source_id, input["id"], path, file_size) Logger.info("UPLOAD", "User %s has uploaded the source %s" % ( input["token"], source_id)) output = BaseHandler.format_dates(Database.get_source(source_id)) output["validation"] = {"alerts": alerts} return output
def upload_output(self, input, file): """ POST /upload_output """ output_id = Database.gen_id() try: path = StorageManager.new_output_file(output_id, file["name"]) except ValueError: BaseHandler.raise_exc(BadRequest, "INVALID_FILENAME", "The provided file has an invalid name") StorageManager.save_file(path, file["content"]) file_size = StorageManager.get_file_size(path) try: result = ContestManager.evaluate_output(input["task"], input["path"], path) except: BaseHandler.raise_exc(InternalServerError, "INTERNAL_ERROR", "Failed to evaluate the output") Database.add_output(output_id, input["id"], path, file_size, result) Logger.info( "UPLOAD", "User %s has uploaded the output %s" % (input["token"], output_id)) return InfoHandler.patch_output(Database.get_output(output_id))
def test_rename_file(self): backup = Config.storedir Config.storedir = Utils.new_tmp_dir() relative_path = 'baz/file.txt' new_path = 'baz/txt.elif' StorageManager.save_file(relative_path, 'foobar'.encode()) StorageManager.rename_file(relative_path, new_path) with open(StorageManager.get_absolute_path(new_path), 'r') as file: lines = file.readlines() self.assertEqual('foobar', lines[0]) Config.storedir = backup
def upload_pack(self, file): """ POST /admin/upload_pack """ if Database.get_meta("admin_token"): BaseHandler.raise_exc(Forbidden, "FORBIDDEN", "The pack has already been extracted") elif os.path.exists(Config.encrypted_file): BaseHandler.raise_exc(Forbidden, "FORBIDDEN", "The pack has already been uploaded") if not crypto.validate(file["content"]): self.raise_exc(Forbidden, "BAD_FILE", "The uploaded file is " "not valid") StorageManager.save_file(os.path.realpath(Config.encrypted_file), file["content"]) return {}
def test_save_file(self): backup = Config.storedir Config.storedir = Utils.new_tmp_dir("new_path") relative_path = os.path.join("baz", "file.txt") content = 'This is the content of the file' try: os.remove(Config.storedir) except: pass StorageManager.save_file(relative_path, content.encode()) with open(StorageManager.get_absolute_path(relative_path), 'r') as file: file_content = file.readlines() self.assertEqual(1, len(file_content)) self.assertEqual(content, file_content[0]) Config.storedir = backup