REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 4.12 KB
Close
/proc/thread-self/root/opt/imunify360/venv/lib64/python3.11/site-packages/imav/malwarelib/plugins/imunify_patch_subscription.py
Text
Base64
""" This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see <https://www.imunify360.com/legal/eula> """ import asyncio from logging import getLogger from typing import TYPE_CHECKING, Any from defence360agent.contracts.messages import MessageType from defence360agent.contracts.plugins import ( MessageSink, MessageSource, expect, ) from defence360agent.utils import Scope from imav.contracts.imunify_patch_id import ( get_imunify_patch_id, ) from imav.contracts.messages import VulnerabilityPatchTask from imav.malwarelib.api.imunify_patch_subscription import ( ImunifyPatchSubscriptionAPI, ) from imav.malwarelib.config import VulnerabilityHitStatus from imav.malwarelib.model import ImunifyPatchSubscription, VulnerabilityHit from imav.malwarelib.utils import user_list if TYPE_CHECKING: from imav.contracts.imunify_patch_id import ImunifyPatchUserId from imav.contracts.messages import RefreshImunifyPatchSubscription logger = getLogger(__name__) class ImunifyPatchSubscriptionPlugin(MessageSink, MessageSource): SCOPE = Scope.AV_IM360 async def create_sink(self, loop): pass async def create_source(self, loop, sink): self._sink = sink def __init__(self) -> None: self._lock = asyncio.Lock() async def _get_users_map(self) -> dict["ImunifyPatchUserId", Any]: users_map = {} for user in await user_list.panel_users(): patch_id = await get_imunify_patch_id(user["user"]) if patch_id: users_map[patch_id] = user["user"] return users_map @expect(MessageType.RefreshImunifyPatchSubscription) async def refresh_subscription( self, _: "RefreshImunifyPatchSubscription" ) -> None: async with self._lock: # handle concurrent updates users = await self._get_users_map() if not users: logger.warning("No users found while refreshing subscription") return subscribed_users_ids = ( await ImunifyPatchSubscriptionAPI.get_subscriptions( list(users.keys()) ) ) # do not update subscription if something's wrong with API if subscribed_users_ids is None: return for user_id in subscribed_users_ids: if user_id in users: await self._set_subscription(users[user_id]) unsubscribed_users = [ users[user_id] for user_id in users if user_id not in subscribed_users_ids ] self._unset_subscription(unsubscribed_users) async def _set_subscription(self, user: str) -> None: _, created = ImunifyPatchSubscription.get_or_create(user_id=user) if created: paths = [ x.orig_file for x in VulnerabilityHit.select( VulnerabilityHit.orig_file ).where( VulnerabilityHit.user == user, VulnerabilityHit.status == VulnerabilityHitStatus.VULNERABLE, ) ] if paths: await self._sink.process_message( VulnerabilityPatchTask(filelist=paths, user=user) ) def _unset_subscription(self, users: list[str]) -> None: ImunifyPatchSubscription.delete().where( ImunifyPatchSubscription.user_id.in_(users) ).execute()
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 1 × Files: 15
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
__pycache__
DIR
-
drwxr-xr-x
2026-03-03 09:00:23
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
aibolit_result_scan.py
5.26 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
cleanup.py
32.32 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
cleanup_revert.py
3.37 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
detached_scan.py
9.30 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
imunify_patch_subscription.py
4.12 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
malware_response.py
3.82 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
mrs_uploader.py
6.60 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
patch_vulnerabilities.py
7.91 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
remote_patch_revert.py
2.62 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
scanner.py
4.11 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
scan_queue.py
2.32 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schedule_watcher.py
10.90 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
store.py
25.99 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
store_vulnerabilities.py
5.24 KB
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.py
0 B
lrw-r--r--
2026-01-23 13:55:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).