-
Guillaume Perréal authored8a049023
<?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 !");
}
}
}