src/Diplix/KMGBundle/Controller/Service/ServiceBaseController.php line 76

Open in your IDE?
  1. <?php
  2. namespace Diplix\KMGBundle\Controller\Service;
  3. use Cocur\Slugify\Slugify;
  4. use Diplix\KMGBundle\Entity\User;
  5. use Diplix\KMGBundle\Repository\UserRepository;
  6. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  9. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  10. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  11. use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
  12. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  13. class ServiceBaseController extends \Symfony\Bundle\FrameworkBundle\Controller\AbstractController
  14. {
  15.     const DATE_FORMAT "Y-m-d H:i O";
  16.     /**
  17.      * @var User
  18.      */
  19.     protected $user null;
  20.     /**
  21.      * @var UserRepository
  22.      */
  23.     protected $userRepo;
  24.     public function __construct(
  25.         protected UserPasswordHasherInterface $hasher,
  26.         private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry
  27.     )
  28.     {
  29.     }
  30.     protected function loadUser($userName$password,$checkMembership)
  31.     {
  32.         try
  33.         {
  34.             /** @var UserRepository $ur */
  35.             $this->userRepo $this->managerRegistry->getRepository(User::class);
  36.             /** @var User $U */
  37.             $U $this->userRepo->loadUserByUsername($userName,true);
  38.             if (!$this->hasher->isPasswordValid($U$password))
  39.             {
  40.                 throw new \RuntimeException("Ungültiges Passwort.");
  41.             }
  42.             if ($checkMembership)
  43.             {
  44.                 if ($U->getMember()===null)
  45.                 {
  46.                     throw new \RuntimeException("Keine Mitgliedschaft zugeordnet.");
  47.                 }
  48.             }
  49.             $this->user $U;
  50.         }
  51.         catch (\Throwable $ex)
  52.         {
  53.             throw new AccessDeniedHttpException("Ungültige Zugangsdaten.".$ex->getMessage(),$ex);
  54.         }
  55.     }
  56.     protected function parseRequest(Request $request)
  57.     {
  58.         $data = [];
  59.         $contentType $request->headers->get('Content-Type');
  60.         if ( (=== strpos($contentType'application/json'))
  61.               ||
  62.              (=== strpos($contentType'text/json'))
  63.         )
  64.         {
  65.             $data json_decode($request->getContent(), true);
  66.             if ($data === null$data = [];
  67.         }
  68.         else if (=== strpos($contentType,'multipart/form-data'))
  69.         {
  70.             $data $request->request->all();
  71.         }
  72.         else
  73.         {
  74.             throw new AccessDeniedHttpException("Falscher Content-Type (".$contentType.")");
  75.         }
  76.         if ((!array_key_exists("login",$data))||(!array_key_exists("password",$data)))
  77.         {
  78.             throw new AccessDeniedHttpException("Fehlende Zugangsdaten.");
  79.         }
  80.         return $data;
  81.     }
  82.     protected function arrGet($arr$key$default=null)
  83.     {
  84.         if (array_key_exists($key,$arr)) return $arr[$key];
  85.         return $default;
  86.     }
  87.     // todo: remove duplicate code (BaseController)
  88.     protected function getDownloadResponse($fullPathToFile,$fileName)
  89.     {
  90.         // @see http://stackoverflow.com/questions/25680932/symfony2-file-download-and-the-filename-fallback-must-only-contain-ascii-char
  91.         // @see https://github.com/symfony/symfony/issues/9093
  92.         $sl = new Slugify();
  93.         // $fnFallback = $sl->slugify($fileName); // need to provide a ascii fallback for filename to be http conform
  94.         // need to provide a ascii fallback for filename to be http conform -> but keep extension dot
  95.         $fnFallback $sl->slugifysubstr($fileName,0,strrpos($fileName,'.')-1) )
  96.                             .'.'
  97.                             $sl->slugifysubstr($fileName,strrpos($fileName,'.')+1) );
  98.         $br = new BinaryFileResponse($fullPathToFile200, array(), true);
  99.         $br->setContentDisposition(
  100.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  101.             $fileName,    // or '' to guess the file name from $file
  102.             $fnFallback
  103.         );
  104.         return $br;
  105.     }
  106. }