<?php
namespace App\Controller;
use App\Entity\Customer;
use App\Exception\PasswordInvalidException;
use App\Helpers\Validation;
use App\Repository\OdbcFieldRepository;
use App\Service\MailService;
use App\Service\RegisterService;
use App\Service\SessionService;
use App\Service\UserService;
use App\Translations\DE\FormularTranslation;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Intl\Countries;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class RegisterUserController extends BaseController
{
/**
* @Route("/register", name="register", methods={"GET"})
*/
public function register(SessionService $sessionService): Response
{
return $this->baseRender('register.html.twig',
[
"countries" => Countries::getNames('de')
]
);
}
/**
* @Route("/register-validate", name="register-validate", methods={"POST"})
*/
public function registerValidate(ValidatorInterface $validator, RegisterService $registerService): Response
{
$request = Request::createFromGlobals();
return $registerService->validate($request, $validator);
}
/**
* @Route("/register_user", name="register_user", methods={"POST"})
*/
public function register_user(UserService $userService, SessionService $sessionService, MailerInterface $mailer, OdbcFieldRepository $odbcFieldRepository): Response
{
$user = $userService->getUserFromRequest();
try {
$userService->saveUser($user, $mailer);
$sessionService->setSessionFlash("Registrierung erfolgreich");
} catch (PasswordInvalidException $e) {
$sessionService->setSessionFlash($e->getMessage());
}
return $this->baseRender('register_success.html.twig');
}
/**
* @Route("/change-password", name="change_password", methods={"POST", "GET"})
*/
public function changePassword(UserService $userService, SessionService $sessionService, UserPasswordHasherInterface $passwordHasher): Response
{
$request = Request::createFromGlobals();
$sessionUser = $sessionService->getLoggedUser();
if ($sessionUser === null){
return $this->redirect("/");
}
$password = $request->get("password");
$oldpassword = $request->get("oldPassword");
$passwordConfirm = $request->get("password-repeat");
if ($password !== null){
$userfromSession = $userService->getUserFromInput($sessionUser->getLoginName(), $oldpassword);
$userFromDb = $userService->getUserByName($sessionUser->getLoginName());
$verify = Validation::validateUserLogin($userFromDb, $userfromSession, $passwordHasher);
if ($verify === null || $passwordConfirm != $password) {
if($verify === null){
$sessionService->setSessionFlash("Passwort konnte nicht validiert werden");
} else {
$sessionService->setSessionFlash("Passworter stimmen nicht überein");
}
return $this->baseRender('user/changepassword.html.twig');
}
try {
$userService->changePassword($sessionUser, $password);
$sessionService->setSessionFlash("Passwort Änderung erfolgreich");
} catch (PasswordInvalidException $e) {
$sessionService->setSessionFlash($e->getMessage());
}
}
return $this->baseRender('user/changepassword.html.twig');
}
}