better form & mime type check

This commit is contained in:
Olivier PARPAILLON
2024-11-21 13:47:47 +01:00
parent 3d4fe031f6
commit 2a594a8d44
12 changed files with 85 additions and 55 deletions

View File

@@ -9,6 +9,7 @@ use App\Form\RegistrationFormType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\MimeTypes;
use Symfony\Component\Routing\Attribute\Route;
use App\Repository\ParticipantRepository;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
@@ -51,6 +52,26 @@ class ProfileController extends AbstractController
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$imageFile = $form->get('image')->getData();
if ($imageFile) {
if ($imageFile->getSize() > 1024 * 1024) { // 1MB
$this->addFlash('error', 'Votre image est trop lourde');
return $this->render('profile/edit.html.twig', [
'profile' => $userConnect,
'formProfile' => $form,
]);
}
$mimeTypes = new MimeTypes();
$validMimeTypes = ['image/png', 'image/jpeg'];
$fileMimeType = $mimeTypes->guessMimeType($imageFile->getRealPath());
if (!in_array($fileMimeType, $validMimeTypes, true)) {
$this->addFlash('error', "Veuillez insérer un type d'image valide (.jpg ou .png)");
return $this->render('profile/edit.html.twig', [
'profile' => $userConnect,
'formProfile' => $form,
]);
}
}
if (($form->has('deleteImage') && $form['deleteImage']->getData()) || $imageFile) {
$this->fileUploader->delete($profile->getFileName(), '/upload/image/profile');
if ($imageFile) {

View File

@@ -117,16 +117,6 @@ class ProfileFormType extends AbstractType
'class' => 'w-full mb-4 px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:border-blue-500',
],
'label_attr' => ['class' => 'text-gray-700 font-bold'],
'constraints' => [
new File([
'maxSize' => '1024k',
'mimeTypes' => [
'image/png',
'image/jpeg',
],
'mimeTypesMessage' => 'Please upload a valid image',
])
],
])
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$profile = $event->getData();

View File

@@ -90,39 +90,6 @@ class RegistrationFormType extends AbstractType
]),
],
])
->add('image', FileType::class, [
'label' => 'Image',
'mapped' => false,
'required' => false,
'attr' => [
'class' => 'w-full mb-4 px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:border-blue-500',
],
'label_attr' => ['class' => 'text-gray-700 font-bold'],
'constraints' => [
new File([
'maxSize' => '1024k',
'mimeTypes' => [
'image/png',
'image/jpeg',
],
'mimeTypesMessage' => 'Please upload a valid image',
])
],
])
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$profile = $event->getData();
if ($profile && $profile->getFileName()) {
$form = $event->getForm();
$form->add('deleteImage', CheckboxType::class, [
'required' => false,
'mapped' => false,
'label' => 'Supprimer l\'image',
'attr' => [
'class' => 'w-4 h-4 mb-4 border-gray-300 rounded mx-2',
], 'label_attr' => ['class' => 'text-gray-700 font-bold px-4']
]);
}
})
;
}