36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
import logging
|
|
import os
|
|
|
|
from rest_framework.generics import get_object_or_404
|
|
|
|
from core.utils import httpFileResponse
|
|
from devices.exceptions import EndpointDeviceException
|
|
from devices.models.endpoint_device import EndpointModel
|
|
from storage.models import DataStorage
|
|
|
|
_log = logging.getLogger()
|
|
|
|
|
|
class EndpointAntivirusService:
|
|
""" Service to management endpoint antivirus """
|
|
|
|
def __init__(self, pk: int) -> None:
|
|
self.endpoint = get_object_or_404(EndpointModel, pk=pk)
|
|
|
|
def update(self):
|
|
if not self.endpoint.antivirus_update_db:
|
|
raise EndpointDeviceException({'status': 'error', 'detail': 'Endpoint antivirus no update required'})
|
|
try:
|
|
storage_file = DataStorage.objects.get(type=DataStorage.Type.CLAMAV)
|
|
except DataStorage.DoesNotExist:
|
|
raise EndpointDeviceException({'status': 'error', 'message': 'No database selected'})
|
|
is_zip = True if storage_file.Format == DataStorage.Format.ZIP else False
|
|
storage_file = os.path.join(storage_file.get_full_path())
|
|
self.endpoint.antivirus_update_db = False
|
|
self.endpoint.save()
|
|
return httpFileResponse(open(storage_file, 'rb'), "antivirus_update.zip", is_zip)
|
|
|
|
@staticmethod
|
|
def all_update(update):
|
|
EndpointModel.objects.all().update(antivirus_update_db=update)
|
|
_log.info('Set flag update antivirus for all endpoints')
|