Commit 8a049023 authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

Mise en place d'une analyse antivirus si CLTissueBundle est installé.

Showing with 79 additions and 0 deletions
+79 -0
......@@ -22,6 +22,12 @@ class IrsteaFileUploadExtension extends Extension implements PrependExtensionInt
$loader->load('services.yml');
$container->setParameter('irstea_file_upload.max_chunk_size', $config['max_chunk_size']);
$bundles = $container->getParameter('kernel.bundles');
if(!isset($bundles['CLTissueBundle'])) {
// On a pas le CLTissueBundle => pas d'antivirus
$container->removeDefinition('irstea_file_upload.virus_scanner');
}
}
/**
......
<?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 !");
}
}
}
......@@ -57,3 +57,11 @@ services:
factory: [ @knp_gaufrette.filesystem_map, get ]
arguments:
- %irstea_file_upload.filesystem.name%
# Scanner anti-virus
irstea_file_upload.virus_scanner:
class: Irstea\FileUploadBundle\Listener\VirusScannerListener
arguments:
- @cl_tissue.scanner
tags:
- { name: kernel.event_listener, event: file_upload.complete, method: onFileUploadCompleted }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment