<?php
namespace Nen\Bundle\KennisbankPlatformBundle\Controller;
use Nen\Bundle\KennisbankPlatformBundle\Entity\BoltPage;
use App\Entity\User;
use Nen\Bundle\KennisbankPlatformBundle\Form\PasswordResetRequestType;
use Nen\Bundle\KennisbankPlatformBundle\Form\PasswordResetType;
use Nen\Bundle\KennisbankPlatformBundle\Model\PasswordResetRequestModel;
use Nen\Bundle\KennisbankPlatformBundle\Security\PasswordResetHandler;
use Nen\Bundle\KennisbankPlatformBundle\Security\PasswordResetRequestHandler;
use Nen\Bundle\KennisbankPlatformBundle\Service\PasswordReset;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use function Symfony\Component\Translation\t;
class PasswordController extends AbstractController
{
/**
* @Route("/wachtwoord-instellen/{token}", name="password_reset")
*
* @Entity("page", expr="repository.findOneBySystemSectionAndSlug('wachtwoord-instellen')")
*
* @param string $token
* @param Request $request
* @param PasswordReset $handler
* @param BoltPage $page
* @return Response
*/
public function reset(string $token, Request $request, PasswordReset $handler, BoltPage $page): Response
{
$user = $handler->getUserForToken($token);
$error = 'Dit verzoek is ongeldig of verlopen.';
if ($user === null || !$user->hasValidPasswordToken()) {
return $this->render('@KennisbankPlatform/password/reset.html.twig', [
'error' => $error,
'page' => $page,
]);
}
$form = $this
->createForm(PasswordResetType::class)
->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$handler->handle($user, $form->get('password')->getData());
$this->addFlash('success', t('Uw wachtwoord is aangepast.'));
return $this->redirectToRoute('home');
}
return $this->render('@KennisbankPlatform/password/reset.html.twig', [
'form' => $form->createView(),
'page' => $page,
]);
}
/**
* @Route("/wachtwoord-vergeten", name="password_reset_request")
*
* @Entity("page", expr="repository.findOneBySystemSectionAndSlug('wachtwoord-vergeten')")
*/
public function resetRequest(Request $request, BoltPage $page, PasswordReset $handler): Response
{
/** @var User|null $user */
$user = $this->getUser();
$message = t('U ontvangt een e-mail met instructies om uw wachtwoord opnieuw in te stellen.');
if ($user !== null) {
$handler->requestForUser($user);
$this->addFlash('success', $message);
return $this->redirectToRoute('mijnomgeving_account_index');
}
$form = $this
->createForm(PasswordResetRequestType::class)
->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$handler->request($form->get('username')->getData());
$this->addFlash('success', $message);
if ($request->isXmlHttpRequest()) {
return new JsonResponse(['url' => $this->generateUrl('home')]);
}
return $this->redirectToRoute('home');
}
$data = [
'form' => $form->createView(),
'page' => $page
];
if ($request->isXmlHttpRequest()) {
return $this->render('@KennisbankPlatform/password/modal/reset_request.html.twig', $data);
}
return $this->render('@KennisbankPlatform/password/reset_request.html.twig', $data);
}
}