Mini Shell
from logging import getLogger
from typing import Optional, Set
from defence360agent.api.integration_conf import IntegrationConfig
from defence360agent.subsys.panels.generic import GenericPanel as Base
from defence360agent.subsys.panels.generic.panel import (
get_integration_data,
)
from im360.subsys.int_config import is_force_use_coraza
from im360.subsys.panels.base import PanelInterface
from im360.subsys.panels.coraza_modsecurity import CorazaModSecurity
from .mod_security import GenericPanelModSecurity
log = getLogger(__name__)
class _GenericPanelBase:
pure_ftp_conf_cls = None
async def _get_all_admin_emails(self) -> list:
# Used only as a suggestion in UI for the ADMIN_CONTACTS.emails
# same as https://docs.cloudlinux.com/control_panel_integration/#admins
admins = await get_integration_data("admins")
for admin in admins:
if admin["is_main"] and admin.get("email"):
return [admin["email"]]
return []
def http_ports(self) -> Set[int]:
# Not needed since there is no WebShield, graylist, CAPTCHA
return set()
def https_ports(self) -> Set[int]:
# Not needed since there is no WebShield, graylist, CAPTCHA
return set()
def remoteip_supported(self) -> bool:
# Used to decide whether HostingPanel interface should be used for
# installation, removal, and configuration of mod_remoteip.
# Not needed since we will require it to be installed and configured.
return False
async def get_web_server(self) -> Optional[str]:
return IntegrationConfig.get("web_server", "server_type")
class _CorazaDriven(
Base,
_GenericPanelBase,
PanelInterface,
CorazaModSecurity,
):
@staticmethod
def _is_dns_only():
return False
class GenericPanel(
Base,
_GenericPanelBase,
PanelInterface,
# Remote IP should be installed/removed by admin, manually.
# GenericRemoteIPInterface,
GenericPanelModSecurity,
):
def __new__(cls):
if is_force_use_coraza():
log.info("Autodetect, creating Coraza-driven panel.")
return _CorazaDriven()
log.info("Autodetect, creating standard GenericPanel.")
return super().__new__(cls)