def upload_list_file(filename=None, content=None, overwrite=False): """Upload a new list file. Parameters ---------- filename : str Destination path of the new file. content : str Content of file to be uploaded. overwrite : bool True for updating existing files, false otherwise. Returns ------- result : AffectedItemsWazuhResult Confirmation message. """ result = AffectedItemsWazuhResult( all_msg='CDB list file uploaded successfully', none_msg='Could not upload CDB list file') full_path = join(common.user_lists_path, filename) backup_file = '' try: # Raise WazuhError if CDB list is not valid validate_cdb_list(content) # If file already exists and overwrite is False, raise exception. if not overwrite and exists(full_path): raise WazuhError(1905) # If file with same name already exists in subdirectory. elif get_filenames_paths([filename])[0] != full_path: raise WazuhError(1805) # Create backup and delete original CDB list. elif overwrite and exists(full_path): backup_file = f"{full_path}.backup" delete_file_with_backup(backup_file, full_path, delete_list_file) upload_file(content, to_relative_path(full_path), check_xml_formula_values=False) result.affected_items.append(to_relative_path(full_path)) result.total_affected_items = len(result.affected_items) # Remove back up file if no exceptions were raised. exists(backup_file) and remove(backup_file) except WazuhError as e: result.add_failed_item(id_=to_relative_path(full_path), error=e) finally: # If backup file was not deleted (any exception was raised), it should be restored. exists(backup_file) and safe_move( backup_file, full_path, permissions=0o660) return result
def upload_decoder_file(filename: str, content: str, overwrite: bool = False) -> AffectedItemsWazuhResult: """Upload a new decoder file or update an existing one. Parameters ---------- filename : str Name of the decoder file. content : str Content of the file. It must be a valid XML file. overwrite : bool True for updating existing files. False otherwise. Returns ------- AffectedItemsWazuhResult """ result = AffectedItemsWazuhResult( all_msg='Decoder was successfully uploaded', none_msg='Could not upload decoder') full_path = join(common.user_decoders_path, filename) backup_file = '' try: if len(content) == 0: raise WazuhError(1112) validate_wazuh_xml(content) # If file already exists and overwrite is False, raise exception if not overwrite and exists(full_path): raise WazuhError(1905) elif overwrite and exists(full_path): backup_file = f'{full_path}.backup' delete_file_with_backup(backup_file, full_path, delete_decoder_file) upload_file(content, to_relative_path(full_path)) result.affected_items.append(to_relative_path(full_path)) result.total_affected_items = len(result.affected_items) backup_file and exists(backup_file) and remove(backup_file) except WazuhError as e: result.add_failed_item(id_=to_relative_path(full_path), error=e) finally: exists(backup_file) and safe_move( backup_file, full_path, permissions=0o0660) return result