PHP 8.3.31
Preview: send_domain_list.py Size: 2.83 KB
/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/plugins/send_domain_list.py

import datetime
import logging
import pwd
import time
from typing import AsyncIterator

from defence360agent.contracts.config import (
    int_from_envvar,
)
from defence360agent.contracts.messages import DomainList
from defence360agent.contracts.myimunify_id import get_myimunify_users
from defence360agent.contracts.plugins import (
    MessageSink,
    MessageSource,
)
from defence360agent.subsys.panels.hosting_panel import HostingPanel
from defence360agent.utils import (
    Scope,
    recurring_check,
    split_for_chunk,
)

logger = logging.getLogger(__name__)


class SendDomainList(MessageSink, MessageSource):
    SCOPE = Scope.AV_IM360

    def __init__(self, period=None):
        self._task = None
        if period:
            self._period = period
        else:
            self._period = int_from_envvar(
                "IMUNIFY360_SEND_DOMAIN_PERIOD",
                int(datetime.timedelta(days=1).total_seconds()),
            )

    async def create_sink(self, loop):
        """MessageSink method"""

    async def create_source(self, loop, sink):
        self._loop = loop
        self._sink = sink

        self._task = self._loop.create_task(
            recurring_check(self._period)(self._send_domain_list)()
        )

    async def shutdown(self):
        if self._task is not None:
            self._task, t = None, self._task
            t.cancel()
            await t

    def _panel_domain_type_to_imunify(self, panel_type: str) -> str:
        return {
            "main": "primary",
            "parked": "alias",
        }.get(panel_type, panel_type)

    async def _create_domain_list_msg(self) -> AsyncIterator[DomainList]:
        hp = HostingPanel()
        logger.info("HostingsPanel: %s", hp.NAME)
        domains = []
        myimunify_users = await get_myimunify_users()
        for user in myimunify_users:
            username = user["username"]
            user_pwd = pwd.getpwnam(username)
            for domain_data in await hp.get_user_domains_details(username):
                domains.append(
                    {
                        "username": username,
                        "docroot": domain_data.docroot,
                        "name": domain_data.domain,
                        "securesite_user_id": user["myimunify_id"],
                        "uid": user_pwd.pw_uid,
                        "type": self._panel_domain_type_to_imunify(
                            domain_data.type
                        ),
                    }
                )
        timestamp = time.time()
        for chunk in split_for_chunk(domains, chunk_size=3000):
            msg = DomainList()
            msg["timestamp"] = timestamp
            msg["domains"] = chunk
            yield msg

    async def _send_domain_list(self):
        async for msg in self._create_domain_list_msg():
            await self._sink.process_message(msg)

Directory Contents

Dirs: 1 × Files: 22

Name Size Perms Modified Actions
- drwxr-xr-x 2026-06-08 20:23:14
Edit Download
3.51 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
5.53 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
2.98 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
5.17 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.23 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
12.72 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
828 B lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.89 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
777 B lrw-r--r-- 2026-05-26 21:20:44
Edit Download
3.23 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
6.33 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
7.09 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.09 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
4.42 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.21 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.77 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
1.98 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
536 B lrw-r--r-- 2026-05-26 21:20:44
Edit Download
2.83 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
11.05 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
26.40 KB lrw-r--r-- 2026-05-26 21:20:44
Edit Download
0 B lrw-r--r-- 2026-05-26 21:20:44
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).