diff --git a/composer.json b/composer.json index eddf999..b087308 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ "symfonycasts/verify-email-bundle": "^1.17", "twig/extra-bundle": "^2.12|^3.0", "twig/twig": "^2.12|^3.0", - "vich/uploader-bundle": "^2.3" + "vich/uploader-bundle": "^2.3", + "ext-curl": "*" }, "config": { "allow-plugins": { diff --git a/config/services.yaml b/config/services.yaml index 223b4e5..23571ef 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -6,6 +6,7 @@ parameters: trusted_proxies: '%env(TRUSTED_PROXIES)%' env(TRUSTED_PROXIES): 127.0.0.1 + app.API_KEY_SIGHT_ENGINE: '%env(API_KEY_SIGHT_ENGINE)%' services: # default configuration for services in *this* file diff --git a/src/Controller/PostController.php b/src/Controller/PostController.php index af3d395..07ff2aa 100644 --- a/src/Controller/PostController.php +++ b/src/Controller/PostController.php @@ -8,8 +8,11 @@ use App\Entity\User; use App\Form\CommentType; use App\Form\PostType; use App\Repository\PostRepository; +use App\Security\Moderation\Moderation; +use CURLFile; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -45,15 +48,19 @@ class PostController extends AbstractController #[Route('/post/new', name: 'app_post_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_USER')] - public function new(Request $request, EntityManagerInterface $entityManager): Response + public function new(Request $request, EntityManagerInterface $entityManager, ParameterBagInterface $env): Response { $post = new Post(); $form = $this->createForm(PostType::class, $post); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - $entityManager->persist($post); - $entityManager->flush(); + $api_key = $this->getParameter('app.API_KEY_SIGHT_ENGINE'); + $moderation = new Moderation($api_key); + if($moderation->valide($post->getImageFile()->getRealPath())){ + $entityManager->persist($post); + $entityManager->flush(); + } return $this->redirectToRoute('app_posts', [], Response::HTTP_SEE_OTHER); } diff --git a/src/Security/Moderation/Moderation.php b/src/Security/Moderation/Moderation.php new file mode 100644 index 0000000..751c15e --- /dev/null +++ b/src/Security/Moderation/Moderation.php @@ -0,0 +1,39 @@ +api_key = $api_key; + } + + public function valide($file_image) + { + $params_api = array( + 'media' => new CurlFile($file_image), + 'models' => 'nudity-2.1', + 'api_user' => '26959338', + 'api_secret' => $this->api_key, + ); + + $ch = curl_init('https://api.sightengine.com/1.0/check.json'); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params_api); + $response = curl_exec($ch); + curl_close($ch); + + $output = json_decode($response, true); + + $score_nudity = $output["nudity"]; + return $score_nudity["sexual_activity"] < 0.8 && + $score_nudity["sexual_display"] < 0.8 && + $score_nudity["erotica"] < 0.8; + } +} \ No newline at end of file