vendor/pimcore/pimcore/bundles/CoreBundle/src/Controller/PublicServicesController.php line 65

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Commercial License (PCL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  14.  */
  15. namespace Pimcore\Bundle\CoreBundle\Controller;
  16. use Pimcore\Bundle\SeoBundle\Config;
  17. use Pimcore\Controller\Controller;
  18. use Pimcore\Logger;
  19. use Pimcore\Model\Asset;
  20. use Pimcore\Model\Site;
  21. use Symfony\Component\HttpFoundation\Cookie;
  22. use Symfony\Component\HttpFoundation\RedirectResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\HttpFoundation\StreamedResponse;
  26. /**
  27.  * @internal
  28.  */
  29. class PublicServicesController extends Controller
  30. {
  31.     public function thumbnailAction(Request $request): RedirectResponse|StreamedResponse
  32.     {
  33.         $thumbnailStream null;
  34.         $filename $request->get('filename');
  35.         $requestedFileExtension strtolower(pathinfo($filenamePATHINFO_EXTENSION));
  36.         $config = [
  37.             'prefix' => $request->get('prefix'''),
  38.             'type' => $request->get('type'),
  39.             'asset_id' => (int) $request->get('assetId'),
  40.             'thumbnail_name' => $request->get('thumbnailName'),
  41.             'filename' => $filename,
  42.             'file_extension' => $requestedFileExtension,
  43.         ];
  44.         try {
  45.             $thumbnail Asset\Service::getImageThumbnailByArrayConfig($config);
  46.             if ($thumbnail) {
  47.                 return Asset\Service::getStreamedResponseFromImageThumbnail($thumbnail$config);
  48.             }
  49.             throw new \Exception('Unable to generate '.$config['type'].' thumbnail, see logs for details.');
  50.         } catch (\Exception $e) {
  51.             Logger::error($e->getMessage());
  52.             return new RedirectResponse('/bundles/pimcoreadmin/img/filetype-not-supported.svg');
  53.         }
  54.     }
  55.     public function robotsTxtAction(Request $request): Response
  56.     {
  57.         // check for site
  58.         $domain \Pimcore\Tool::getHostname();
  59.         $site Site::getByDomain($domain);
  60.         $config = [];
  61.         if (class_exists(Config::class)) {
  62.             $config Config::getRobotsConfig();
  63.         }
  64.         $siteId 0;
  65.         if ($site instanceof Site) {
  66.             $siteId $site->getId();
  67.         }
  68.         // send correct headers
  69.         header('Content-Type: text/plain; charset=utf8');
  70.         while (@ob_end_flush()) ;
  71.         // check for configured robots.txt in pimcore
  72.         $content '';
  73.         if (array_key_exists($siteId$config)) {
  74.             $content $config[$siteId];
  75.         }
  76.         if (empty($content)) {
  77.             // default behavior, allow robots to index everything
  78.             $content "User-agent: *\nDisallow:";
  79.         }
  80.         return new Response($contentResponse::HTTP_OK, [
  81.             'Content-Type' => 'text/plain',
  82.         ]);
  83.     }
  84.     public function commonFilesAction(Request $request): Response
  85.     {
  86.         return new Response("HTTP/1.1 404 Not Found\nFiltered by common files filter"404);
  87.     }
  88.     public function customAdminEntryPointAction(Request $request): RedirectResponse
  89.     {
  90.         $params $request->query->all();
  91.         $url = match (true) {
  92.             isset($params['token'])    => $this->generateUrl('pimcore_admin_login_check'$params),
  93.             isset($params['deeplink']) => $this->generateUrl('pimcore_admin_login_deeplink'$params),
  94.             default                    => $this->generateUrl('pimcore_admin_login'$params)
  95.         };
  96.         $redirect = new RedirectResponse($url);
  97.         $customAdminPathIdentifier $this->getParameter('pimcore_admin.custom_admin_path_identifier');
  98.         if (!empty($customAdminPathIdentifier) && $request->cookies->get('pimcore_custom_admin') != $customAdminPathIdentifier) {
  99.             $redirect->headers->setCookie(new Cookie('pimcore_custom_admin'$customAdminPathIdentifierstrtotime('+1 year')));
  100.         }
  101.         return $redirect;
  102.     }
  103. }