File: //opt/imunify360/venv/lib64/python3.11/site-packages/im360/simple_rpc/uninstall_cleanup.py
import logging
import os
from pathlib import Path
from defence360agent.contracts.config import AcronisBackup
from defence360agent.rpc_tools.lookup import RootEndpoints, bind
from defence360agent.utils import Scope, atomic_rewrite
from im360.plugins.lfd import LFD
from im360.subsys import csf
from im360.utils.net import OUT, TCP
logger = logging.getLogger(__name__)
class UninstallCleanupEndpoints(RootEndpoints):
SCOPE = Scope.IM360
@bind("remove-csf-ports")
async def remove_csf_ports(self):
if not os.path.isfile(csf.CSF_CONFIG):
logging.info("Nothing to do, there is no csf config file")
return
try:
ports = AcronisBackup.PORTS
ranges = AcronisBackup.RANGE
csf.remove_ports(TCP, OUT, *ports, ranges=ranges)
await csf.restart_all()
logging.info("Successfully removed Acronis ports from csf config")
except Exception:
logger.exception("Failed to remove Arconis ports from csf config")
@bind("remove-csf-post-hook")
async def remove_csf_post_hook(self):
for script_path in [
csf.CSF_POST_HOOK_SCRIPT_USR_LOCAL,
csf.CSF_POST_HOOK_SCRIPT_ETC,
]:
path = Path(script_path)
if not path.is_file():
continue
try:
content = path.read_bytes()
if csf.IPSET_RESTORE_SCRIPT in content:
logger.info(
"Removing ipset restore script from %s", script_path
)
new_content = content.replace(
csf.IPSET_RESTORE_SCRIPT, b""
)
atomic_rewrite(script_path, new_content)
except Exception:
logger.exception(
"Failed to remove ipset restore script from %s",
script_path,
)
@bind("remove-block-report-script")
async def restore_block_report_script(self):
await LFD().shutdown()
@bind("restore-configs")
async def pre_uninstall(self):
await self.remove_csf_ports()
await self.remove_csf_post_hook()
await self.restore_block_report_script()