add Moderation.php (#14)

Co-authored-by: bastien <bastien.ollier1@gmail.com>
Co-authored-by: clfreville2 <clement.freville2@etu.uca.fr>
Reviewed-on: https://codefirst.iut.uca.fr/git/clement.freville2/herbarium/pulls/14
Reviewed-by: Clément FRÉVILLE <clement.freville2@etu.uca.fr>
This commit is contained in:
Bastien OLLIER
2024-06-13 08:08:46 +02:00
parent 6a6a135891
commit ccb2b541ea
9 changed files with 128 additions and 1 deletions

View File

@@ -0,0 +1,13 @@
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\File\File;
class DummyImageSafetyService implements ImageSafetyServiceInterface
{
public function isValid(File $file): bool
{
return true;
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\File\File;
interface ImageSafetyServiceInterface
{
public function isValid(File $file): bool;
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Contracts\HttpClient\HttpClientInterface;
readonly class SightEngineImageSafetyService implements ImageSafetyServiceInterface
{
public function __construct(
private HttpClientInterface $client,
#[Autowire(env: 'API_USER_SIGHT_ENGINE')] private string $apiUser,
#[Autowire(env: 'API_KEY_SIGHT_ENGINE')] private string $apiKey,
)
{
}
public function isValid(File $file): bool
{
$handle = fopen($file->getRealPath(), 'r');
if ($handle === false) {
return false;
}
$response = $this->client->request('POST', 'https://api.sightengine.com/1.0/check.json', [
'body' => [
'media' => $handle,
'models' => 'nudity-2.1',
'api_user' => $this->apiUser,
'api_secret' => $this->apiKey,
],
]);
fclose($handle);
$output = $response->toArray();
$scoreNudity = $output['nudity'];
return $scoreNudity['sexual_activity'] < 0.8 &&
$scoreNudity['sexual_display'] < 0.8 &&
$scoreNudity['erotica'] < 0.8;
}
}