<?php
namespace App\Controller;
use App\Security\UserProvider;
use App\Service\ProfileLoader;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController {
/**
* @var ProfileLoader
*/
private $profileLoader;
/**
* @var UserProvider
*/
private $userProvider;
/**
* SecurityController constructor.
* @param ProfileLoader $profileLoader
* @param UserProvider $userProvider
*/
public function __construct(ProfileLoader $profileLoader, UserProvider $userProvider) {
$this->profileLoader = $profileLoader;
$this->userProvider = $userProvider;
}
public function login(Request $request, AuthenticationUtils $authenticationUtils): Response {
// throw new \Exception("Nessuno profilo configurato");
if ($this->getUser()) {
return $this->redirectToRoute('index');
}
if ($request->get("ac")) {
$ref = $request->headers->get('referer');
if ($this->profileLoader->isRefererInternal($ref)) {
$this->userProvider->loginFromToken($request->get("ac"), $request);
return $this->redirectToRoute("index");
}
return $this->redirectToRoute("login");
}
$profiles = $this->profileLoader->getAvailableProfiles();
if (empty($profiles)) {
throw new \Exception("Nessuno profilo configurato");
}
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('login.html.twig', [
'last_username' => $lastUsername,
'last_profile' => $this->get('session')->get("profileDb"),
'error' => isset($error) ? $error->getMessage() : null,
'profiles' => $profiles,
'page' => "login",
]);
}
public function logout() {
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
public function systemOk(Request $request) {
return new Response(true);
}
}