X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/6d6c1141f8f45f6895b81402fe7b3d6a478953bf..9a0da79286b2454f4db7b160594fe45808f7c21b:/Handler/AccessDeniedHandler.php?ds=inline

diff --git a/Handler/AccessDeniedHandler.php b/Handler/AccessDeniedHandler.php
index 7304de6..b742db0 100644
--- a/Handler/AccessDeniedHandler.php
+++ b/Handler/AccessDeniedHandler.php
@@ -2,160 +2,23 @@
 
 namespace Rapsys\AirBundle\Handler;
 
-use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\RequestStack;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
-use Symfony\Component\Routing\RouterInterface;
 use Symfony\Component\Security\Core\Exception\AccessDeniedException;
 use Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface;
-use Symfony\Component\Translation\TranslatorInterface;
-use Twig\Environment;
-use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
 
 use Rapsys\AirBundle\RapsysAirBundle;
+use Rapsys\AirBundle\Controller\AbstractController;
 
-class AccessDeniedHandler implements AccessDeniedHandlerInterface {
-	use ControllerTrait;
-
-	//Config array
-	protected $config;
-
-	//Context array
-	protected $context;
-
-	//Environment instance
-	protected $environment;
-
-	//Translator instance
-	protected $translator;
-
-	/**
-	 * {@inheritdoc}
-	 */
-	public function __construct(ContainerInterface $container, Environment $environment, RouterInterface $router, RequestStack $stack, TranslatorInterface $translator) {
-		//Retrieve config
-		$this->config = $container->getParameter(RapsysAirBundle::getAlias());
-
-		//Set the container
-		$this->container = $container;
-
-		//Set the translator
-		$this->translator = $translator;
-
-		//Set the environment
-		$this->environment = $environment;
-
-		//Set the context
-		$this->context = [
-			'contact' => [
-				'title' => $translator->trans($this->config['contact']['title']),
-				'mail' => $this->config['contact']['mail']
-			],
-			'copy' => [
-				'by' => $translator->trans($this->config['copy']['by']),
-				'link' => $this->config['copy']['link'],
-				'long' => $translator->trans($this->config['copy']['long']),
-				'short' => $translator->trans($this->config['copy']['short']),
-				'title' => $this->config['copy']['title']
-			],
-			'page' => [
-				'description' => null,
-				'section' => null,
-				'title' => null
-			],
-			'site' => [
-				'donate' => $this->config['site']['donate'],
-				'ico' => $this->config['site']['ico'],
-				'logo' => $this->config['site']['logo'],
-				'png' => $this->config['site']['png'],
-				'svg' => $this->config['site']['svg'],
-				'title' => $translator->trans($this->config['site']['title']),
-				'url' => $router->generate($this->config['site']['url'])
-			],
-			'canonical' => null,
-			'alternates' => [],
-			'facebook' => [
-				'heads' => [
-					'og' => 'http://ogp.me/ns#',
-					'fb' => 'http://ogp.me/ns/fb#'
-				],
-				'metas' => [
-					'og:type' => 'article',
-					'og:site_name' => $this->translator->trans($this->config['site']['title']),
-					#'fb:admins' => $this->config['facebook']['admins'],
-					'fb:app_id' => $this->config['facebook']['apps']
-				],
-				'texts' => []
-			],
-			'forms' => []
-		];
-
-		//Get current request
-		$request = $stack->getCurrentRequest();
-
-		//Get current locale
-		$locale = $request->getLocale();
-
-		//Set locale
-		$this->context['locale'] = str_replace('_', '-', $locale);
-
-		//Get context path
-		$pathInfo = $router->getContext()->getPathInfo();
-
-		//Iterate on locales excluding current one
-		foreach($this->config['locales'] as $current) {
-			//Set titles
-			$titles = [];
-
-			//Iterate on other locales
-			foreach(array_diff($this->config['locales'], [$current]) as $other) {
-				$titles[$other] = $this->translator->trans($this->config['languages'][$current], [], null, $other);
-			}
-
-			//Retrieve route matching path
-			$route = $router->match($pathInfo);
-
-			//Get route name
-			$name = $route['_route'];
-
-			//Unset route name
-			unset($route['_route']);
-
-			//With current locale
-			if ($current == $locale) {
-				//Set locale locales context
-				$this->context['canonical'] = $router->generate($name, ['_locale' => $current]+$route, UrlGeneratorInterface::ABSOLUTE_URL);
-			} else {
-				//Set locale locales context
-				$this->context['alternates'][str_replace('_', '-', $current)] = [
-					'absolute' => $router->generate($name, ['_locale' => $current]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
-					'relative' => $router->generate($name, ['_locale' => $current]+$route),
-					'title' => implode('/', $titles),
-					'translated' => $this->translator->trans($this->config['languages'][$current], [], null, $current)
-				];
-			}
-
-			//Add shorter locale
-			if (empty($this->context['alternates'][$shortCurrent = substr($current, 0, 2)])) {
-				//Set locale locales context
-				$this->context['alternates'][$shortCurrent] = [
-					'absolute' => $router->generate($name, ['_locale' => $current]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
-					'relative' => $router->generate($name, ['_locale' => $current]+$route),
-					'title' => implode('/', $titles),
-					'translated' => $this->translator->trans($this->config['languages'][$current], [], null, $current)
-				];
-			}
-		}
-	}
-
+/**
+ * {@inheritdoc}
+ */
+class AccessDeniedHandler extends AbstractController implements AccessDeniedHandlerInterface {
 	/**
 	 * {@inheritdoc}
 	 */
 	public function handle(Request $request, AccessDeniedException $exception) {
 		//Set title
-		$this->context['page']['title'] = $this->translator->trans('Access denied');
+		$this->context['title'] = $this->translator->trans('Access denied');
 
 		//Set message
 		//XXX: we assume that it's already translated
@@ -168,12 +31,13 @@ class AccessDeniedHandler implements AccessDeniedHandlerInterface {
 		}
 
 		//Render template
-		return new Response(
-			$this->environment->render(
-				'@RapsysAir/security/denied.html.twig',
-				$this->context
-			),
-			403
-		);
+		$response = $this->render('@RapsysAir/security/denied.html.twig', $this->context);
+		$response->setStatusCode(403);
+		$response->setEtag(md5($response->getContent()));
+		$response->setPublic();
+		$response->isNotModified($request);
+
+		//Return response
+		return $response;
 	}
 }