VirusScannerListener.php 1.43 KiB
<?php
/*
 * Copyright (C) 2015 IRSTEA
 * All rights reserved.
 */
namespace Irstea\FileUploadBundle\Listener;
use CL\Tissue\Adapter\AdapterInterface;
use CL\Tissue\Model\Detection;
use CL\Tissue\Model\ScanResult;
use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent;
use Irstea\FileUploadBundle\Exception\RejectedFileException;
/**
 * Description of AntivirusListener
 * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
class VirusScannerListener
    /**
     * @var AdapterInterface
    private $scanner;
    /**
     * @param AdapterInterface $scanner
    public function __construct(AdapterInterface $scanner)
        $this->scanner = $scanner;
    /**
     * @param FileUploadCompleteEvent $event
    public function onFileUploadCompleted(FileUploadCompleteEvent $event)
        $file = $event->getUploadedFile();
        $path = $file->getLocalPath();
        $result = $this->scanner->scan([$path]);
        $meta = $file->getMetadata();
        $meta['virus_scanner'] = ['has_virus' => $result->hasVirus()];
        if($result->hasVirus()) {
            if(null !== $desc = $result->getDetections()[0]->getDescription()) {
                $meta['virus_scanner']['detected'] = $desc;
        $file->setMetadata($meta);
        if($result->hasVirus()) {
            throw new RejectedFileException($file, "Found a virus !");