src/Controller/RegistrierungController.php line 627
<?phpnamespace App\Controller;use App\AppHelper\Helper;use App\AppHelper\Settings;use App\Entity\EmailTemplates;use App\Entity\SentEmails;use App\Entity\SystemSettings;use App\Entity\User;use App\Entity\UserDetails;use App\Entity\UserRegister;use App\PhpMailer\Templates;use App\Services\SiteLogManager;use Doctrine\ORM\EntityManagerInterface;use ImagickException;use PHPMailer\PHPMailer\Exception;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Form\Extension\Core\Type\EmailType;use Symfony\Component\Form\Extension\Core\Type\PasswordType;use Symfony\Component\Form\Extension\Core\Type\RepeatedType;use Symfony\Component\Form\Extension\Core\Type\SubmitType;use Symfony\Component\Form\Extension\Core\Type\TextType;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpKernel\KernelInterface;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Uid\Ulid;use Symfony\Component\Uid\UuidV1;use Symfony\Component\Validator\Constraints\Email;use Symfony\Component\Validator\Constraints\Length;use Symfony\Component\Validator\Constraints\NotBlank;use Symfony\Component\Validator\Validator\ValidatorInterface;use Symfony\Contracts\Translation\TranslatorInterface;#[Route('/register', name: 'app_register')]class RegistrierungController extends AbstractController{use Settings;private array $site_settings;public function __construct(private readonly EntityManagerInterface $em,private readonly KernelInterface $kernel,private RequestStack $requestStack,private readonly TranslatorInterface $translator,private readonly SiteLogManager $logger){$this->requestStack = $requestStack;$this->site_settings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;}/*** @throws Exception* @throws ImagickException*/#[Route('/registrierung', name: '_account_register')]public function register_user(Request $request, UserPasswordHasherInterface $passEncoder, ValidatorInterface $validator): Response{$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$emailSettings = $this->em->getRepository(SystemSettings::class)->getSettings('email_settings')->record;$helper = Helper::instance();if (!$siteSettings['registrierung_aktiv']) {return $this->redirect($this->generateUrl('app_main'));}$regform = $this->createFormBuilder()->add('email', EmailType::class, ['constraints' => [new NotBlank(), new Email(['message' => $this->translator->trans('profil.The email {{ value }} is not a valid email address.'),'mode' => 'strict',])],])->add('register_btn', SubmitType::class)->getForm();if ($siteSettings['registrierung_option'] != 1) {$regform->add('passwort', RepeatedType::class, ['type' => PasswordType::class,'required' => true,'constraints' => [new NotBlank(),new Length(['min' => 8,'minMessage' => $this->translator->trans('profil.The password must be at least {{ limit }} characters long'),])],'first_options' => ['label' => $this->translator->trans('profil.Password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating pe-xl-2 mb-3 col-xl-6 col-12'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Password'),'min' => 8,],],'second_options' => ['label' => $this->translator->trans('profil.Repeat password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating ps-xl-2 mb-3 col-xl-6 col-12'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Repeat password'),],],]);}if ($siteSettings['form_firma_option'] != 1) {$siteSettings['form_firma_option'] == 2 ? $required = false : $required = true;$regform->add('company', TextType::class, ['required' => $required]);}if ($siteSettings['form_title_option'] != 1) {$siteSettings['form_title_option'] == 2 ? $required = false : $required = true;$regform->add('title', TextType::class, ['required' => $required]);}if ($siteSettings['form_name_option'] != 1) {$siteSettings['form_name_option'] == 2 ? $required = false : $required = true;$regform->add('first_name', TextType::class, ['required' => $required])->add('last_name', TextType::class, ['required' => $required]);}if ($siteSettings['form_street_hnr_option'] != 1) {$siteSettings['form_street_hnr_option'] == 2 ? $required = false : $required = true;$regform->add('street', TextType::class, ['required' => $required])->add('hnr', TextType::class, ['required' => $required]);}if ($siteSettings['form_zip_city_option'] != 1) {$siteSettings['form_zip_city_option'] == 2 ? $required = false : $required = true;$regform->add('zip', TextType::class, ['required' => $required])->add('country', TextType::class, ['required' => $required]);}if ($siteSettings['form_telefon_option'] != 1) {$siteSettings['form_telefon_option'] == 2 ? $required = false : $required = true;$regform->add('phone', TextType::class, ['required' => $required]);}if ($siteSettings['form_mobil_option'] != 1) {$siteSettings['form_mobil_option'] == 2 ? $required = false : $required = true;$regform->add('mobil', TextType::class, ['required' => $required]);}$regform->handleRequest($request);if ($regform->isSubmitted() && $regform->isValid()) {$appAdmin = $this->em->getRepository(User::class)->findByRole('Admin');if ($appAdmin) {$appAdmin = $appAdmin[0];}$daten = $regform->getData();$checkEmail = $this->em->getRepository(User::class)->findOneBy(['email' => $daten['email']]);if ($checkEmail) {$this->addFlash('reg-error', 'E-Mail-Adresse "<span class="fw-semibold">' . $daten['email'] . '</span>" schon vorhanden! ');return $this->render('registrierung/registrierung.html.twig', ['title' => $this->translator->trans('Registration'),'regForm' => $regform->createView(),'show' => true]);}$user = new User();$user->setRoles([$siteSettings['new_register_level']]);$user->setEmail($daten['email']);$user->setLocale('de_DE');$user->setUuid(new UuidV1());if ($siteSettings['registrierung_option'] == 1) {$daten['passwort'] = $helper->generate_callback_pw(16, 2, 6);}$user->setPassword($passEncoder->hashPassword($user, $daten['passwort']));if ($siteSettings['pw_leak_checker_aktiv']) {$user->setRawPassword($daten['passwort']);$errors = $validator->validate($user);if (count($errors) > 0) {foreach ($errors as $err) {$this->addFlash('reg-error', $err->getMessage());}return $this->render('registrierung/registrierung.html.twig', ['title' => $this->translator->trans('Registration'),'regForm' => $regform->createView(),'show' => true]);}}$aktiv = true;if ($siteSettings['registrierung_option'] != 4) {$aktiv = false;}$must_validated = false;if ($siteSettings['registrierung_option'] == 3) {$must_validated = true;}$userDetails = new UserDetails();$userDetails->setImgId(0);$userDetails->setRegisterIp($request->getClientIp());if ($siteSettings['form_firma_option'] != 1) {$userDetails->setCompany($daten['company']);}if ($siteSettings['form_title_option'] != 1) {$userDetails->setTitle($daten['title']);}if ($siteSettings['form_name_option'] != 1) {$userDetails->setFirstName($daten['first_name']);$userDetails->setLastName($daten['last_name']);}if ($siteSettings['form_street_hnr_option'] != 1) {$userDetails->setStreet($daten['street']);$userDetails->setHnr($daten['hnr']);}if ($siteSettings['form_zip_city_option'] != 1) {$userDetails->setZip($daten['zip']);$userDetails->setCountry($daten['country']);}if ($siteSettings['form_telefon_option'] != 1) {$userDetails->setPhone($daten['phone']);}if ($siteSettings['form_mobil_option'] != 1) {$userDetails->setMobil($daten['mobil']);}$userDetails->setAktiv($aktiv);$userDetails->setChangePw(true);$userDetails->setMustValidated($must_validated);$user->setUserdetails($userDetails);$this->em->persist($user);$this->em->flush();$clientSecret = $helper->generate_callback_pw(128, 0, 64);$uuid = new Ulid();$id = $uuid->toBase32();$clientId = $helper->generate_identifier($id);$redirectUris = ['http://localhost:8080/callback'];$grantTypes = ['authorization_code', 'refresh_token', 'client_credentials'];$scope = 'BASIC';$oauth_aktiv = 1;$conn = $this->em->getConnection();try {$conn->insert('oauth2_client', ['identifier' => $clientId,'secret' => $clientSecret,'name' => $user->getEmail(),'redirect_uris' => implode(' ', $redirectUris),'grants' => implode(' ', $grantTypes),'scopes' =>$scope,'active' => $oauth_aktiv,'allow_plain_text_pkce' => 0,]);} catch (Exception $e){$this->em->remove($user);$this->em->flush();exit($e->getMessage());}if ($siteSettings['log_registrierung_aktiv']) {$msg = sprintf('neue Registrierung: User: %s | IP: %s', $user->getEmail(), $userDetails->getRegisterIp());$this->logger->log_message('registrierung', $msg);}$flashMessage = '';if ($siteSettings['registrierung_option'] == 3) {$flashMessage = '<p>Vielen Dank für die Registrierung. Ihr Account wird nach einer Überprüfung <b>aktiviert</b>. Viel Spaß und Erfolg auf unseren Seiten.</p>';if ($emailSettings['smtp_aktiv'] && $siteSettings['send_notification_aktiv'] && $siteSettings['notifications_email'] && $siteSettings['template_aktivierungs_link']) {$newUser = $this->em->getRepository(User::class)->getUserProfil($user->getId());$newUser = $helper->arrayToObject($newUser);$newUser->signature_id = $siteSettings['signature_aktivierungs_link'];$newUser->template_id = $siteSettings['template_aktivierungs_link'];$newUser->send_to_email = $siteSettings['notifications_email'];$newUser->register_time = date('d.m.Y') . ' um ' . date('H:i:s') . ' Uhr';$newUser->clean_passwort = $daten['passwort'];$newUser->betreff = 'neue Anmeldung';$sendEmail = new Templates($this->em, $this->kernel, $this->logger);$sendEmail->send_email_template($newUser, $request);if ($emailSettings['email_save_confirmation_admin']) {if ($appAdmin) {$admin_id = $appAdmin->getId();} else {$admin_id = 1;}$emailTemplate = $this->em->getRepository(EmailTemplates::class)->find((int)$siteSettings['template_aktivierungs_link']);$saveContent = $sendEmail->placeholder_data(html_entity_decode($emailTemplate->getContent()), $newUser, $request);$saveEmail = new SentEmails();$saveEmail->setUserId($admin_id);$saveEmail->setType('system');$saveEmail->setSendFrom('system@app.de');$saveEmail->setSendTo($siteSettings['notifications_email']);$saveEmail->setBetreff($newUser->betreff);$saveEmail->setContent($helper->escape($saveContent['template']));$saveEmail->setIfShow(false);$this->em->persist($saveEmail);$this->em->flush();}}}if ($siteSettings['registrierung_option'] == 1 || $siteSettings['registrierung_option'] == 2) {$helper = Helper::instance();$sendCode = $helper->generate_callback_pw(32, 0, 16);$userRegister = new UserRegister();$userRegister->setUserId($user->getId());$userRegister->setRegistercode(sha1($sendCode));if ($emailSettings['smtp_aktiv'] && $siteSettings['notifications_email'] && $siteSettings['template_aktivierungs_link']) {$newUser = $this->em->getRepository(User::class)->getUserProfil($user->getId());$newUser = $helper->arrayToObject($newUser);if ($siteSettings['registrierung_option'] == 1) {$newUser->signature_id = $siteSettings['signature_pw_link'];$newUser->template_id = $siteSettings['template_pw_link'];$linkTime = $siteSettings['passwort_erstellen_link_time'];$uri = sprintf('%s/register/%s/passwort-erstellen', $helper->get_base_url($request), $sendCode);$newUser->register_passwort_link = $uri;$userRegister->setCodeTime(strtotime(sprintf("+%d hour", $linkTime)));$flashMessage = '<h5 class="card-title">Vielen Dank für Ihre Registrierung</h5><hr><p class="card-text px-5">Ein Link zum Passwort erstellen wurde Ihnen per <b>E-Mail</b> gesendet.<br>Sollten Sie keine E-Mail bekommen, überprüfen Sie Ihren Spam-Ordner!</p><hr><div class="card-footer text-muted">Der Link zum Passwort erstellen ist bis <b>' . date("d.m.Y H:i", strtotime(sprintf("+%d hour", $linkTime))) . ' Uhr</b>gültig.</div>';}if ($siteSettings['registrierung_option'] == 2) {$newUser->signature_id = $siteSettings['signature_aktivierungs_link'];$newUser->template_id = $siteSettings['template_aktivierungs_link'];$linkTime = $siteSettings['aktivierungs_link_time'];$uri = sprintf('%s/register/%s/activate', $helper->get_base_url($request), $sendCode);$newUser->aktivierungs_link = $uri;$userRegister->setCodeTime(strtotime(sprintf("+%d hour", $linkTime)));$flashMessage = '<h5 class="card-title">Vielen Dank für Ihre Registrierung</h5><hr><p class="card-text px-5">Ein Bestätigungslink wurde Ihnen per <b>E-Mail</b> gesendet.<br>Bitte <b>bestätigen</b> Sie diesen Link! Sollten Sie keineE-Mail bekommen, überprüfen Sie Ihren Spam-Ordner!</p><hr><div class="card-footer text-muted">Der Bestätigungslink ist bis <b>' . date("d.m.Y H:i", strtotime(sprintf("+%d hour", $linkTime))) . ' Uhr</b>gültig.</div>';}$userRegister->setIsNew(1);$user->setRegister($userRegister);$this->em->persist($user);$this->em->flush();$newUser->send_to_email = $user->getEmail();$newUser->register_time = date('d.m.Y') . ' um ' . date('H:i:s') . ' Uhr';$newUser->clean_passwort = $daten['passwort'];$newUser->link_ablauf_zeit = date('d.m.Y', $userRegister->getCodeTime()) . ' um ' . date('H:i', $userRegister->getCodeTime());$sendEmail = new Templates($this->em, $this->kernel, $this->logger);$sendEmail->send_email_template($newUser, $request);if ($siteSettings['send_notification_aktiv']) {$newUser->betreff = 'neue Anmeldung';$newUser->send_to_email = $siteSettings['notifications_email'];$sendEmail = new Templates($this->em, $this->kernel, $this->logger);$sendEmail->send_email_template($newUser, $request);}if ($emailSettings['email_save_confirmation']) {if ($appAdmin) {$admin_id = $appAdmin->getId();} else {$admin_id = 1;}$template = $siteSettings['template_aktivierungs_link'];if ($siteSettings['registrierung_option'] == 1) {$template = $siteSettings['template_pw_link'];}$emailTemplate = $this->em->getRepository(EmailTemplates::class)->find((int)$template);$saveContent = $sendEmail->placeholder_data(html_entity_decode($emailTemplate->getContent()), $newUser, $request);$content = str_replace('[signature]', '', $helper->escape($saveContent['template']));$setEmail = strtolower($helper->generate_callback_pw(6, 0, 3));$saveEmail = new SentEmails();$saveEmail->setUserId($admin_id);$saveEmail->setType('system');$saveEmail->setSendFrom(sprintf('%s@app.de', $setEmail));$saveEmail->setSendTo($user->getEmail());$saveEmail->setBetreff($emailTemplate->getSubject());$saveEmail->setContent($content);$saveEmail->setIfShow(false);$this->em->persist($saveEmail);$this->em->flush();}}}if (!$siteSettings['registrierung_option'] == 4) {$flashMessage = '<p>Vielen Dank für die Registrierung. Ihr Account wurde <b>aktiviert</b>. Viel Spaß und Erfolg auf unseren Seiten.</p>';}$this->addFlash('reg-success', $flashMessage);return $this->render('registrierung/registrierung.html.twig', ['title' => $this->translator->trans('Registration'),'show' => false]);}return $this->render('registrierung/registrierung.html.twig', ['title' => $this->translator->trans('Registration'),'regForm' => $regform->createView(),'show' => true]);}#[Route('/{hash}/passwort-erstellen', name: '_app_email_passwort_erstellen')]public function activate_by_passwort_erstellen(Request $request, UserPasswordHasherInterface $passEncoder, ValidatorInterface $validator): Response{$hash = $request->get('hash');$sshHash = sha1($hash);$regUser = $this->em->getRepository(UserRegister::class)->findOneBy(['registercode' => $sshHash]);if (!$regUser) {$errMsg = $this->translator->trans('system.The <b>link</b> is no longer valid. Contact the <b>administrator!</b>');$this->addFlash('pw-create-error', $errMsg);return $this->render('registrierung/formular-passwort-erstellen.html.twig', ['title' => $this->translator->trans('profil.Create password'),'name' => '','show' => false]);}$regform = $this->createFormBuilder()->add('email', EmailType::class, ['constraints' => [new NotBlank(), new Email(['message' => $this->translator->trans('profil.The email {{ value }} is not a valid email address.'),'mode' => 'strict',])],'attr' => array('autofocus' => true)])->add('passwort', RepeatedType::class, ['type' => PasswordType::class,'required' => true,'constraints' => [new NotBlank(),new Length(['min' => 8,'minMessage' => $this->translator->trans('profil.The password must be at least {{ limit }} characters long'),])],'first_options' => ['label' => $this->translator->trans('profil.Password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating mb-3'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Password'),'min' => 8,],],'second_options' => ['label' => $this->translator->trans('profil.Repeat password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating mb-3'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Repeat password'),],],])->add('register_btn', SubmitType::class, ['label' => '<i class="bi bi-incognito me-2"></i>' . $this->translator->trans('profil.Create password'),'row_attr' => ['class' => 'mb-0'],])->getForm();$regform->handleRequest($request);if ($regform->isSubmitted() && $regform->isValid()) {$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$daten = $regform->getData();$regUser->getUser()->setPassword($passEncoder->hashPassword($regUser->getUser(), $daten['passwort']));if ($siteSettings['pw_leak_checker_aktiv']) {$regUser->getUser()->setRawPassword($daten['passwort']);$errors = $validator->validate($regUser->getUser());if (count($errors) > 0) {foreach ($errors as $err) {$this->addFlash('pw-create-error', $err->getMessage());}return $this->render('registrierung/formular-passwort-erstellen.html.twig', ['title' => $this->translator->trans('profil.Create password'),'name' => $regUser->getUser()->getUserdetails()->getFirstName() . ' ' . $regUser->getUser()->getUserdetails()->getLastName(),'show' => true,'createPwForm' => $regform->createView()]);}}$regUser->getUser()->getUserdetails()->setAktiv(true);$regUser->setRegistercode('');$regUser->setCodeTime('');$this->em->persist($regUser);$this->em->flush();$msg = $this->translator->trans('system.The password was successfully saved and the account was activated.');$this->addFlash('pw-create-success', $msg);if ($siteSettings['log_passwort_erstellt_aktiv']) {$msg = sprintf('Passwort erstellt: User: %s', $regUser->getUser()->getEmail());$this->logger->log_message('registrierung', $msg);}return $this->render('registrierung/formular-passwort-erstellen.html.twig', ['title' => $this->translator->trans('profil.Create password'),'name' => $regUser->getUser()->getUserdetails()->getFirstName() . ' ' . $regUser->getUser()->getUserdetails()->getLastName(),'show' => false]);}return $this->render('registrierung/formular-passwort-erstellen.html.twig', ['title' => $this->translator->trans('profil.Create password'),'name' => $regUser->getUser()->getUserdetails()->getFirstName() . ' ' . $regUser->getUser()->getUserdetails()->getLastName(),'show' => true,'createPwForm' => $regform->createView()]);}#[Route('/{hash}/activate', name: '_app_email_user_activate')]public function activate_by_hash(Request $request): Response{$hash = $request->get('hash');$sshHash = sha1($hash);$regUser = $this->em->getRepository(UserRegister::class)->findOneBy(['registercode' => $sshHash]);if (!$regUser) {$errMsg = $this->translator->trans('system.The <b>unlock</b> code is <b>no longer valid</b>. Please register again.');$this->addFlash('validate-error', $errMsg);return $this->render('registrierung/registrierung-activate.html.twig', ['title' => $this->translator->trans('system.Activate account'),'success' => false,]);}$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$linkTime = $siteSettings['aktivierungs_link_time'];$codeTime = $regUser->getCodeTime();$time = strtotime(sprintf("%s +%s hour", date('d-m-Y H:i:s', $codeTime), $linkTime));if ($time < time()) {$errMsg = $this->translator->trans('system.The <b>link</b> is no longer valid. Contact the <b>administrator!</b>');$this->addFlash('validate-error', $errMsg);return $this->render('registrierung/registrierung-activate.html.twig', ['title' => $this->translator->trans('system.Activate account'),'success' => false,]);}$regUser->getUser()->getRegister()->setActivatedTime(time());$regUser->getUser()->getRegister()->setRegistercode('');$regUser->getUser()->getRegister()->setCodeTime('');$regUser->getUser()->getUserdetails()->setAktiv(true);$regUser->getUser()->getRegister()->setActivatedTime(time());$regUser->getUser()->getRegister()->setRegistercode('');$regUser->getUser()->getRegister()->setCodeTime('');$this->em->persist($regUser);$this->em->flush();if ($siteSettings['log_konto_aktiviert_aktiv']) {$msg = sprintf('Konto aktiviert - %s - E-Mail bestätigt', $regUser->getUser()->getEmail());$this->logger->log_message('registrierung', $msg);}return $this->render('registrierung/registrierung-activate.html.twig', ['title' => $this->translator->trans('Activate'),'success' => true,]);}/*** @throws Exception* @throws ImagickException*/#[Route('/passwort-vergessen', name: '_passwort_vergessen')]public function passwort_vergessen(Request $request): Response{$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$emailSettings = $this->em->getRepository(SystemSettings::class)->getSettings('email_settings')->record;$helper = Helper::instance();if (!$siteSettings['show_pw_vergessen']) {return $this->redirect($this->generateUrl('app_main'));}$regform = $this->createFormBuilder()->add('email', EmailType::class, ['constraints' => [new NotBlank(), new Email(['message' => $this->translator->trans('profil.The email {{ value }} is not a valid email address.'),'mode' => 'strict',])],'attr' => array('autofocus' => true)])->add('register_btn', SubmitType::class, ['label' => '<i class="bi bi-envelope-plus me-2"></i>' . $this->translator->trans('Send email')])->getForm();$emailTemplate = $this->em->getRepository(EmailTemplates::class)->find((int)$siteSettings['template_pw_vergessen']);if (!$emailSettings['smtp_aktiv'] || !$emailTemplate) {$errMsg = $this->translator->trans('system.At the moment this service cannot be performed.');$this->addFlash('pw-forgot-error', $errMsg);return $this->render('registrierung/passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'show' => false,'pwForm' => $regform->createView(),]);}$regform->handleRequest($request);if ($regform->isSubmitted() && $regform->isValid()) {$appAdmin = $this->em->getRepository(User::class)->findByRole('Admin');if ($appAdmin) {$appAdmin = $appAdmin[0];}$daten = $regform->getData();$user = $this->em->getRepository(User::class)->findOneBy(['email' => $daten['email']]);if (!$user) {$this->addFlash('pw-forgot-error', $this->translator->trans('system.The e-mail address is not known.'));return $this->render('registrierung/passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'show' => true,'pwForm' => $regform->createView()]);}$linkTime = $siteSettings['email_password_forgotten_time'];$sendCode = $helper->generate_callback_pw(32, 0, 16);$codeTime = strtotime(sprintf("+%d hour", $linkTime));if (!$user->getRegister()) {$newRegisterCode = new UserRegister();$newRegisterCode->setCodeTime($codeTime);$newRegisterCode->setPasswordcode(sha1($sendCode));$newRegisterCode->setUserId($user->getId());$newRegisterCode->setIsNew(false);$user->setRegister($newRegisterCode);} else {$user->getRegister()->setCodeTime($codeTime);$user->getRegister()->setPasswordcode(sha1($sendCode));$user->getRegister()->setUserId($user->getId());}$this->em->persist($user);$this->em->flush();$sendUser = $this->em->getRepository(User::class)->getUserProfil($user->getId());$sendUser = $helper->arrayToObject($sendUser);$sendUser->signature_id = $siteSettings['signature_pw_vergessen'];$sendUser->template_id = $siteSettings['template_pw_vergessen'];$sendUser->send_to_email = $user->getEmail();$sendUser->link_ablauf_zeit = date('d.m.Y', $user->getRegister()->getCodeTime()) . ' um ' . date('H:i', $user->getRegister()->getCodeTime());$uri = sprintf('%s/register/%s/passwort-vergessen', $helper->get_base_url($request), $sendCode);$sendUser->passwort_vergessen_link = $uri;$sendEmail = new Templates($this->em, $this->kernel, $this->logger);$sendEmail->send_email_template($sendUser, $request);if ($emailSettings['email_save_confirmation']) {if ($appAdmin) {$admin_id = $appAdmin->getId();} else {$admin_id = 1;}$saveContent = $sendEmail->placeholder_data(html_entity_decode($emailTemplate->getContent()), $sendUser, $request);$saveContent = str_replace('[signature]', '', $helper->escape($saveContent['template']));$saveEmail = new SentEmails();$saveEmail->setUserId($admin_id);$saveEmail->setType('system');$saveEmail->setSendFrom('system@app.de');$saveEmail->setSendTo($user->getEmail());$saveEmail->setBetreff($emailTemplate->getSubject());$saveEmail->setContent($saveContent);$saveEmail->setIfShow(false);$this->em->persist($saveEmail);$this->em->flush();if ($siteSettings['log_konto_aktiviert_aktiv']) {$msg = sprintf('Passwort vergessen - %s - E-Mail gesendet', $user->getEmail());$this->logger->log_message('registrierung', $msg);}}$flashMessage = '<h5 class="card-title">Link zum Passwort ändern gesendet.</h5><hr><p class="card-text px-5">Ein Link zum ändern des Passworts wurde Ihnen per <b>E-Mail</b> gesendet.Sollten Sie keine E-Mail bekommen, überprüfen Sie Ihren Spam-Ordner!</p><hr><div class="card-footer border rounded text-center text-muted">Der Link ist bis <b>' . date("d.m.Y H:i", strtotime(sprintf("+%d hour", $linkTime))) . ' Uhr</b>gültig.</div>';$this->addFlash('pw-forgot-success', $flashMessage);return $this->render('registrierung/passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'pwForm' => $regform->createView(),'show' => false]);}return $this->render('registrierung/passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'pwForm' => $regform->createView(),'show' => true]);}#[Route('/{hash}/passwort-vergessen', name: '_form_passwort_vergessen')]public function form_passwort_vergessen(Request $request, UserPasswordHasherInterface $passEncoder, ValidatorInterface $validator): Response{$regUser = $this->em->getRepository(UserRegister::class)->findOneBy(['passwordcode' => sha1($request->get('hash'))]);if (!$regUser) {$errMsg = $this->translator->trans('system.The <b>link</b> is no longer valid. Contact the <b>administrator!</b>');$this->addFlash('pw-forgot-error', $errMsg);return $this->render('registrierung/formular-passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'show' => false,'validate' => false,'name' => '']);}$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$linkTime = $siteSettings['email_password_forgotten_time'];$codeTime = $regUser->getCodeTime();$time = strtotime(sprintf("%s +%s hour", date('d-m-Y H:i:s', $codeTime), $linkTime));if ($time < time()) {$errMsg = $this->translator->trans('system.The <b>link</b> is no longer valid. Contact the <b>administrator!</b>');$this->addFlash('pw-forgot-error', $errMsg);$regUser->setPasswordcode('');$regUser->setCodeTime('');$this->em->persist($regUser);$this->em->flush();return $this->render('registrierung/formular-passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'show' => false,'validate' => false,'name' => '']);}$regform = $this->createFormBuilder()->add('passwort', RepeatedType::class, ['type' => PasswordType::class,'required' => true,'constraints' => [new NotBlank(),new Length(['min' => 8,'minMessage' => $this->translator->trans('profil.The password must be at least {{ limit }} characters long'),])],'first_options' => ['label' => $this->translator->trans('profil.Password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating mb-3'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Password'),'min' => 8,'autofocus' => true],],'second_options' => ['label' => $this->translator->trans('profil.Repeat password') . ' <sup class="small-lg">(min 8)</sup>','label_html' => true,'row_attr' => ['class' => 'form-floating mb-3'],'attr' => ['class' => 'no-blur','placeholder' => $this->translator->trans('profil.Repeat password'),],],])->add('register_btn', SubmitType::class, ['label' => '<i class="bi bi-incognito me-2"></i>' . $this->translator->trans('profil.Change Password')])->getForm();$regform->handleRequest($request);if ($regform->isSubmitted() && $regform->isValid()) {$siteSettings = $this->em->getRepository(SystemSettings::class)->getSettings('site_settings')->record;$daten = $regform->getData();$regUser->getUser()->setPassword($passEncoder->hashPassword($regUser->getUser(), $daten['passwort']));$name = $regUser->getUser()->getUserdetails()->getFirstName() . ' ' . $regUser->getUser()->getUserdetails()->getLastName();if ($siteSettings['pw_leak_checker_aktiv']) {$regUser->getUser()->setRawPassword($daten['passwort']);$errors = $validator->validate($regUser->getUser());if (count($errors) > 0) {foreach ($errors as $err) {$this->addFlash('pw-forgot-error', $err->getMessage());}return $this->render('registrierung/formular-passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'pwForgottenForm' => $regform->createView(),'show' => true,'validate' => false,'name' => $name]);}}$regUser->setPasswordcode('');$regUser->setCodeTime('');$this->em->persist($regUser);$this->em->flush();if ($siteSettings['log_pw_change_aktiv']) {$msg = sprintf('Passwort geändert - %s ',$regUser->getUser()->getEmail());$this->logger->log_message('registrierung', $msg);}return $this->render('registrierung/formular-passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'show' => false,'validate' => true,'name' => $name]);}$name = $regUser->getUser()->getUserdetails()->getFirstName() . ' ' . $regUser->getUser()->getUserdetails()->getLastName();return $this->render('registrierung/formular-passwort-vergessen.html.twig', ['title' => $this->translator->trans('Password forgotten'),'pwForgottenForm' => $regform->createView(),'show' => true,'validate' => false,'name' => $name]);}}