""" 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 . Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see """ import asyncio import logging from imav.malwarelib.utils import malware_response from defence360agent.contracts.license import LicenseError logger = logging.getLogger(__name__) FALSE_POSITIVE = "fp" FALSE_NEGATIVE = "fn" async def submit_malware(filename, type, reason=None): """ Submit file to MRS for analysis :param filename: str -> path to file to submit :param type: str -> report type (fp or fn) :param scanner: int -> scanner id :param reason: str -> malware name provided by scanner :raises LicenseError: """ # submit to MRS upload_reason = ( malware_response.FALSE_POSITIVE if type == FALSE_POSITIVE else malware_response.FALSE_NEGATIVE ) try: await malware_response.upload_with_retries( filename, upload_reason=upload_reason ) except malware_response.ClientError as e: logger.error("File %s uploading failed. %s.", filename, e) def submit_in_background(*args, **kwargs): def report_error(future): e = future.exception() if isinstance(e, LicenseError): logger.warning(str(e)) elif e is not None: logger.exception("File submission failed", exc_info=e) loop = asyncio.get_event_loop() task = loop.create_task(submit_malware(*args, **kwargs)) task.add_done_callback(report_error)