X7ROOT File Manager
Current Path:
/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/utils
opt
/
imunify360
/
venv
/
lib
/
python3.11
/
site-packages
/
defence360agent
/
utils
/
??
..
??
__init__.py
(55.96 KB)
??
__pycache__
??
_shutil.py
(795 B)
??
antivirus_mode.py
(497 B)
??
async_utils.py
(718 B)
??
benchmark.py
(538 B)
??
buffer.py
(1.24 KB)
??
check_db.py
(7.72 KB)
??
check_lock.py
(636 B)
??
cli.py
(7.39 KB)
??
common.py
(14.41 KB)
??
config.py
(999 B)
??
cronjob.py
(902 B)
??
doctor.py
(1 KB)
??
hyperscan.py
(149 B)
??
importer.py
(2.67 KB)
??
ipecho.py
(3.17 KB)
??
json.py
(953 B)
??
kwconfig.py
(1.56 KB)
??
parsers.py
(11.12 KB)
??
resource_limits.py
(2.29 KB)
??
safe_fileops.py
(7.99 KB)
??
safe_sequence.py
(363 B)
??
serialization.py
(1.72 KB)
??
sshutil.py
(7.94 KB)
??
subprocess.py
(1.53 KB)
??
support.py
(5.2 KB)
??
threads.py
(1005 B)
??
validate.py
(4.27 KB)
??
whmcs.py
(7.6 KB)
??
wordpress_mu_plugin.py
(1.41 KB)
Editing: kwconfig.py
import re from typing import Optional from defence360agent.utils import atomic_rewrite class KWConfig: """ Basic class for working with key-value configuration files Subclasses must define SEARCH_PATTERN and WRITE_PATTERN attributes """ SEARCH_PATTERN = DEFAULT_FILENAME = WRITE_PATTERN = "" ALLOW_EMPTY_CONFIG = True def __init__(self, name, filename=None): assert self.SEARCH_PATTERN self._pattern = re.compile( self.SEARCH_PATTERN.format(name), re.MULTILINE ) self._filename = filename or self.DEFAULT_FILENAME self._name = name def set(self, value) -> Optional[str]: assert self.WRITE_PATTERN with open(self._filename) as f: content = f.read() old_value = self._parse(content) if old_value is None: # If no variable found, just add to the bottom content += ( "\n" + self.WRITE_PATTERN.format(self._name, value) + "\n" ) else: content = self._pattern.sub( self.WRITE_PATTERN.format(self._name, value), content ) atomic_rewrite( self._filename, content, allow_empty_content=self.ALLOW_EMPTY_CONFIG, ) return old_value def get(self) -> Optional[str]: with open(self._filename) as f: content = f.read() return self._parse(content) def _parse(self, content) -> Optional[str]: match = self._pattern.search(content) return match and match.group(1)
Upload File
Create Folder