<?php
namespace App\Controller;
use App\Entity\Token;
use App\Entity\User;
use App\Repository\TokenRepository;
use App\Repository\UserRepository;
use App\Service\PasswordGenerator;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\Transport\TransportInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="app_login")
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
// if ($this->getUser()) {
// return $this->redirectToRoute('target_path');
// }
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
/**
* @Route("/forget-password", name="app_forget_password")
*/
public function forgetPassword(): Response
{
return $this->render('security/forget-password.html.twig');
}
/**
* @Route("/link/reset-pwd/{token}/{user}", name="reset_pwd_link")
*/
public function resetLink(
string $token,
string $user,
TokenRepository $tokenRepository,
UserRepository $userRepository,
PasswordGenerator $passwordGenerator,
TransportInterface $mailer,
UserPasswordHasherInterface $passwordHasher,
EntityManagerInterface $manager,
LoggerInterface $logger
)
{
$token_ = $tokenRepository->valideToken($token);
if (!$token_) {
throw $this->createNotFoundException();
}
$token_->setActivated(false);
$user_ = $userRepository->findOneBy(['code' => $user, 'activated' => true]);
if (!$user_) {
throw $this->createNotFoundException();
}
$password = $passwordGenerator->generate();
$user_->setPassword(
$passwordHasher->hashPassword($user_, $password)
);
$user_->setFirstConnection(true);
$manager->persist($token_);
$manager->persist($user_);
$manager->flush();
try {
$email = (new TemplatedEmail())
->from('noreply@flexpaie.com')
->to($user_->getEmail())
->subject('Réinitialisation accès Konnect admin')
->htmlTemplate('security/_email_reinit_credential.html.twig')
->context([
'password' => $password,
'user' => $user_
]);
$mailer->send($email);
} catch (\Exception|TransportExceptionInterface $e) {
$logger->critical($e->getMessage());
}
return $this->render('security/new-pwd.html.twig', [
'password' => $password
]);
}
}