src/OEW/LoginBundle/Controller/LoginController.php line 116

  1. <?php
  2. namespace OEW\LoginBundle\Controller;
  3. use Exception;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Twig\Environment;
  6. use OEW\RegistrationBundle\Entity\Logging;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  13. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  14. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  15. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. use App\Security\User;
  18. use App\Security\UserProvider;
  19. use Symfony\Component\Security\Core\Security;
  20. use Symfony\Component\Security\Core\User\UserCheckerInterface;
  21. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  22. use Symfony\Component\Security\Http\Authenticator\FormLoginAuthenticator;
  23. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  24. class LoginController extends AbstractController {
  25.     private UserCheckerInterface $checker;
  26.     private UserAuthenticatorInterface $userAuthenticator;
  27.     private $router;
  28.     ##private FormLoginAuthenticator $formLoginAuthenticator;
  29.     /**
  30.      * @param UserCheckerInterface $checker
  31.      * @param UserAuthenticatorInterface $userAuthenticator
  32.      * @param FormLoginAuthenticator $formLoginAuthenticator
  33.      */
  34.     public function __construct(UserCheckerInterface $checkerUserAuthenticatorInterface $userAuthenticatorUrlGeneratorInterface $router)//, FormLoginAuthenticator $formLoginAuthenticator)
  35.     {
  36.         $this->checker $checker;
  37.         $this->userAuthenticator $userAuthenticator;
  38.         $this->router $router;
  39.         #$this->formLoginAuthenticator = $formLoginAuthenticator;
  40.         
  41.     }
  42.  
  43.     public function logg$teilnehmerId$veranstaltungid$aktionManagerRegistry $doctrine$beschreibung="" ) {
  44.         $em $doctrine->getManager();
  45.         
  46.         if(!$veranstaltungid) return;
  47.         
  48.         $logg = new Logging();
  49.         $logg->setTeilnehmerId($teilnehmerId);
  50.         $logg->setAnTeilnehmerId($teilnehmerId);
  51.         $logg->setVeranstaltungId($veranstaltungid);
  52.         $logg->setZeitpunkt( new \DateTime(date("Y-m-d H:i:s")) );
  53.         $logg->setAktion($aktion);
  54.         $logg->setBeschreibung($beschreibung);
  55.         
  56.         try { $em->persist($logg);$em->flush(); }
  57.         catch (Exception $e) {}
  58.     }
  59.     public function passworthashActionRequest $requestTranslatorInterface $translator$mailhashManagerRegistry $doctrineEnvironment $twig ) {
  60.         $formerrors = array();
  61. //        $session = $request->getSession();
  62.         $passok false;
  63.         
  64.         $em $doctrine->getManager();
  65.         
  66.         $hash strip_tags($mailhash);
  67.         $teilnehmer $doctrine->getRepository('OEW\RegistrationBundle\Entity\Teilnehmer')->findOneByKontrolleHash($hash);
  68.         if ( !$teilnehmer ) return $this->redirect$this->generateUrl('login') );
  69.         $teilnahme $doctrine->getRepository('OEW\RegistrationBundle\Entity\Teilnahme')->findOneByTeilnehmerId($teilnehmer->getId());
  70.         $veranstaltungid null;
  71.         if ($teilnahme$veranstaltungid $teilnahme->getVeranstaltungId();
  72.         
  73.         $passwort strip_tags(trim($request->get('f_passwort')));
  74.         $passwort2 strip_tags(trim($request->get('f_passwort2')));
  75.         
  76.            $error = array();
  77.         $errorfields = array();
  78.         if ($request->isMethod('POST') && $passwort) {
  79.             if ( $passwort != $passwort2 ) {
  80.                 $error['type'] = "";
  81.                 $error['text'] = $translator->trans('Fehler.Passwoerter');
  82.                 $formerrors[] = $error;                
  83.                 $errorfields[] = "f_passwort";
  84.                 $errorfields[] = "f_passwort2";
  85.                 $registration['login']['passwort2'] = "";
  86.             }
  87.             if ( strlen($passwort)<) {
  88.                 $error['type'] = "";
  89.                 $error['text'] = $translator->trans('Fehler.Passwort');
  90.                 $formerrors[] = $error;                
  91.                 $errorfields[] = "f_passwort";
  92.                 $errorfields[] = "f_passwort2";
  93.             } 
  94.             
  95.             if ( !$formerrors ) {
  96.                 $teilnehmer->setPasswortmd5($passwort) );
  97.                     $teilnehmer->setKontrolleHash(Null);
  98.                     $teilnehmer->setPasswortVerschickt(Null);
  99.                 $em->flush();
  100.                 $passok true;
  101.                 $this->logg$teilnehmer->getId(), $veranstaltungid"PASSWORT_MAIL"$doctrine"" );
  102.             }
  103.                        
  104.         }
  105.         
  106.         $html $twig->render('@OEWLoginBundle/passworthash.html.twig', array( 'formerrors' => $formerrors'passok' => $passok'mailhash' => $mailhash ));
  107.         return new Response$html );
  108.     }
  109.     public function passwortreqAction(Request $requestTranslatorInterface $translatorManagerRegistry $doctrineEnvironment $twig) {
  110.         $formerrors = array();
  111. //        $session = $request->getSession();
  112. //        $veranstaltungid = $session->get('veranstaltungid');
  113.         $hashok false;
  114.         $username trim($request->get('f_benutzername'));
  115.         
  116.         if ( $request->isMethod('POST') && $username) {
  117.             $em $doctrine->getManager();
  118.             $query $em->createQuery("
  119.                 SELECT t FROM OEW\RegistrationBundle\Entity\Teilnehmer t 
  120.                 WHERE t.benutzername = :username AND 
  121.                 t.aktiviert IS NOT NULL AND t.deaktiviert IS NULL AND t.geloescht IS NULL
  122.             ");
  123.             $query->setParameter('username'$username);
  124.             $user $query->getOneOrNullResult();
  125.             
  126.             if ( $user ) {                
  127.                 $person $doctrine->getRepository('OEW\RegistrationBundle\Entity\Person')->findOneById($user->getPersonId());
  128.                 if ( $person ) {
  129.                     $id uniqid(hash("sha1",rand()), TRUE);
  130.                         $hash hash("sha1"$id);
  131.                         $user->setKontrolleHash($hash);
  132.                         $user->setPasswortVerschickt(new \DateTime(date("Y-m-d H:i:s")));
  133.                     $em->flush();
  134.                     $hashok true
  135.                     $hash_route 'passwort_vergessen_hash';
  136.                     $maildaten = array();
  137.                     $maildaten['anrede'] =  $translator->trans("Label.".$person->getAnrede());
  138.                     $maildaten['name'] = $person->getVorname(). " ".$person->getNachname();
  139.                     $maildaten['benutzername'] = $username;
  140.                     $maildaten['link'] = $request->getSchemeAndHttpHost() .""$this->router->generate($hash_route, array('mailhash' => $hash), true);
  141.                     $mail_vorlage "passworthash_".$request->getLocale();
  142.         
  143.                     $message = (new \Swift_Message())
  144.                     ->setSubject('Ă–sterreich Werbung: ' $translator->trans("Passvergessen") )
  145.                     ->setFrom('noreply@austria.info')
  146.                     ->setTo($person->getEmail())
  147.                     ->setContentType('text/html')
  148.                     ->setBody($twig->render('@OEWLoginBundle/Emails/'.$mail_vorlage.'.txt.twig', array('daten' => $maildaten)));
  149.                     //$mailer = $this->get('mailer');
  150.                     $ps openssl_decrypt ($_ENV["smtppass"], "AES-128-CTR""03029771TGSzYaHI"0);
  151.                     $transport = (new \Swift_SmtpTransport($_ENV["smtphost"], 587'tls'))
  152.                       ->setUsername$_ENV["smtpusername"] )
  153.                       ->setPassword$ps )
  154.                     ;
  155.                     // Create the Mailer using your created Transport
  156.                     $mymailer = new \Swift_Mailer($transport);
  157.                     // Or to use the Echo Logger
  158.                     //$logger = (new \Swift_Plugins_Loggers_ArrayLogger());
  159.                     //$mymailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger));
  160.                     //$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));
  161.                     $mymailer->send($message);
  162.                     //print_r($logger);
  163.                 }    
  164.                 else throw new Exception('Benutzername<->Person nicht gefunden!');
  165.             }
  166.             else {
  167.                 $formerrors[] = array( 'type'=>'''text'=>$translator->trans("Fehler.Passwortvergessen.Text1") );
  168.             }
  169.         }
  170.         
  171.         $html $twig->render('@OEWLoginBundle/passwortreq.html.twig', array( 'formerrors' => $formerrors'hashok' => $hashok ));
  172.         return new Response$html );
  173.     }
  174.     public function indexAction(
  175.         Request $request,
  176.         TranslatorInterface $translator,
  177.         TokenStorageInterface $tokenStorage,
  178.         EventDispatcherInterface $eventDispatcher,
  179.         ManagerRegistry $doctrine,
  180.         Environment $twig,
  181.         Security $security,
  182.         AuthorizationCheckerInterface $aci,
  183.         User $user,
  184.         AuthenticationUtils $authenticationUtils,
  185.         FormLoginAuthenticator $formLoginAuthenticator
  186.     ) {
  187.         $formerrors = array();
  188.         $session $request->getSession();
  189.         $sysuser $session->get('sysuser');
  190.         $error $authenticationUtils->getLastAuthenticationError();
  191.         
  192.         /*
  193.         if ( $this->get('security.context')->isGranted('ROLE_ADMIN') ) 
  194.             return $this->redirect( $this->generateUrl('oew_admin_sys') );
  195.         elseif ( $this->get('security.context')->isGranted('ROLE_USER') )
  196.             return $this->redirect( $this->generateUrl('oew_admin_user') );
  197.         */
  198.         if ( $aci->isGranted('ROLE_ADMIN') ) 
  199.             return $this->redirect$this->generateUrl('oew_admin_sys') );
  200.         elseif ( $aci->isGranted('ROLE_USER') ) 
  201.             return $this->redirect$this->generateUrl('oew_admin_user') );
  202.         
  203.         $username trim((string) $request->get('_username'));
  204.         $password trim((string) $request->get('_password'));
  205.         if ( $request->isMethod('POST') && $username && $password ) {
  206.             $em $doctrine->getManager();
  207.             $query $em->createQuery("SELECT t FROM OEW\RegistrationBundle\Entity\Teilnehmer t WHERE t.benutzername = :username");
  208.             $query->setParameter('username'$username);
  209.             $user $query->getOneOrNullResult();
  210.             $error_text "";
  211.             $error false;
  212.             $veranstaltungid 999;
  213.             if ( $user ) {
  214.                 if ( md5($password) === $user->getPasswort() ) {
  215.                     if ( !$user->getAktiviert() ) {
  216.                         $error true;
  217.                         $error_text $translator->trans("Login.Fehler");    
  218.                         $this->logg($user->getId(), $veranstaltungid,"LOGIN_FEHLER"$doctrine"Nicht aktiviert.");
  219.                     }
  220.                     elseif ( $user->getDeaktiviert() || $user->getGeloescht() ) {
  221.                         $error true;
  222.                         $error_text $translator->trans("Login.Fehler.deaktiviert");                
  223.                         $this->logg($user->getId(), $veranstaltungid"LOGIN_FEHLER"$doctrine"Deaktiviert oder gelöscht.");
  224.                     }
  225.                     else {
  226.                         
  227.                         $teilnahme $doctrine->getRepository('OEW\RegistrationBundle\Entity\Teilnahme')->findOneByTeilnehmerId($user->getId());
  228.                         if ($teilnahme)
  229.                             $veranstaltungid $teilnahme->getVeranstaltungId();
  230.                         $sysuser = array();
  231.                         if (  == $user->getSystemadmin() ) {
  232.                             $roles = array( 'ROLE_ADMIN' );
  233.                             $sysuser['systemadmin'] = true;
  234.                             $sysuser['rolle'] = 15;
  235.                             
  236.                         } elseif ( isset($teilnahme) && 15 == $teilnahme->getRolleId() ) {
  237.                             $roles = array( 'ROLE_ADMIN' );
  238.                             $sysuser['rolle'] = 15;
  239.                             $sysuser['systemadmin'] = true;
  240.                         } else {
  241.                             $roles = array( 'ROLE_USER' );
  242.                             $sysuser['systemadmin'] = false;
  243.                             $sysuser['rolle'] = $teilnahme->getRolleId();
  244.                         }
  245.                         $myuser = new User();
  246.                         $myuser->setUsername$username );
  247.                         $myuser->setPassword$password );
  248.                         
  249.                         $token = new UsernamePasswordToken($myuser"admin"$roles);                    
  250.                         //$tokenStorage->setToken($token);
  251.                         $this->tokenStorage->setToken($token);
  252.                         $event = new InteractiveLoginEvent($request$token);
  253.                         $eventDispatcher->dispatch($event"security.interactive_login");
  254.                         //$session->set('_security_admin',  serialize($token));
  255.                         $session->set('_security_login_firewall',  serialize($token));
  256.                         
  257.                         
  258.                         $sysuser['teilnehmerId'] = $user->getId();
  259.                         $sysuser['personId'] = $user->getPersonId();
  260.                         $sysuser['benutzername'] = $user->getBenutzername();
  261.                         if ( $user->getLetztesLogin() ) $sysuser['letztesLogin'] = $user->getLetztesLogin()->format('Y-m-d H:m');
  262.                         $person $doctrine->getRepository('OEW\RegistrationBundle\Entity\Person')->findOneById($user->getPersonId());
  263.                         if ( $person ) {
  264.                             $sysuser['vorname'] = $person->getVorname();
  265.                             $sysuser['nachname'] = $person->getNachname();
  266.                             $sysuser['firmaid'] = $person->getFirmaId();
  267.                         }
  268.                         
  269.                         // if MA rolle            
  270.                         if ( (isset($teilnahme) && 15 == $teilnahme->getRolleId()) ||  $sysuser['rolle'] == 15) {                            
  271.                             $query $em->createQuery("SELECT r FROM OEW\RegistrationBundle\Entity\Zustaendigkeit r WHERE r.veranstaltungId=".$veranstaltungid." AND r.teilnehmerId=".$user->getId());
  272.                             $regionen $query->getResult();
  273.                             $sysuser['laender'] = array();
  274.                             foreach ( $regionen as $region )  {
  275.                                 $sysuser['laender'][] = $region->getLandId();
  276.                             }                                        
  277.                         }
  278.                         $session->set('sysuser',$sysuser);
  279.                         $session->set('veranstaltungid'$veranstaltungid);
  280.                         $this->logg($user->getId(), $veranstaltungid"LOGIN"$doctrine);
  281.                         
  282.                         $user->setLetztesLogin( new \DateTime(date("Y-m-d H:i:s")) );
  283.                         $em->flush();    
  284.                         if ( $this->isGranted('ROLE_ADMIN') ) {
  285.                             return $this->redirect$this->generateUrl('oew_admin_sys') );
  286.                         } else {
  287.                             return $this->redirect$this->generateUrl('oew_admin_user') );    
  288.                         }                        
  289.                     }
  290.                 }
  291.                 else {
  292.                     $error true;
  293.                     $error_text $translator->trans("Login.Fehler");
  294.                     $this->logg($user->getId(), $veranstaltungid"LOGIN_FEHLER"$doctrine"Passwort falsch.");
  295.                 }
  296.             }
  297.             else {
  298.                 $error true;
  299.                 $error_text $translator->trans("Login.Fehler");
  300.             }
  301.             
  302.             if ( $error ) {
  303.                 $formerrors[] = array( 'type'=>'''text'=>$error_text );
  304.             }
  305.             
  306.        
  307.         } elseif (isset($sysuser) && isset($sysuser['teilnehmerId']) && $sysuser['teilnehmerId'] > 0) {
  308.             $this->checker->checkPreAuth($user);
  309.             $this->userAuthenticator->authenticateUser($user$formLoginAuthenticator$request);
  310.             
  311.             if ( $this->isGranted('ROLE_ADMIN') ) {
  312.                 return $this->redirect$this->generateUrl('oew_admin_sys') );
  313.             } else {
  314.                 return $this->redirect$this->generateUrl('oew_admin_user') );    
  315.             }
  316.                         
  317.         }
  318.         $html $twig->render('@OEWLoginBundle/login.html.twig', array( 'formerrors' => $formerrors'last_username' => $username ));
  319.         return new Response$html );
  320.     }
  321.     public function logoutAction(Request $request) {
  322.         $session $request->getSession();  
  323.         $session->set('sysuser'"");
  324.         unset($_COOKIE['systid']);
  325.         setcookie("systid"""time()-3600);
  326.         
  327.         return $this->render('@OEWLoginBundle/login.html.twig', array());
  328.     }
  329.     public function customLogoutAction(Request $request) {
  330.         $session $request->getSession();
  331.         $session->set('sysuser'"");
  332.         unset($_COOKIE['systid'], $_COOKIE['PHPSESSID'], $_COOKIE['SFSESSID']);
  333.     
  334.         setcookie("PHPSESSID"""time()-3600"/"".tourismustage.at"true);
  335.         setcookie("SFSESSID"""time()-3600"/"".tourismustage.at"true);
  336.         setcookie("systid"""time()+3600"/"".tourismustage.at"true); 
  337.         /*setcookie("PHPSESSID", "", time()-3600, "/", ".tourismustage.at", true);
  338.         setcookie("SFSESSID", "", time()-3600, "/", ".tourismustage.at", true);
  339.         setcookie("systid", "", time()+3600, "/", ".tourismustage.at", true); 
  340.         */
  341.         if ($request->getLocale() == "en")
  342.             return $this->redirect$this->generateUrl('oew_reg_welcome_en') );          
  343.         else
  344.             return $this->redirect$this->generateUrl('oew_reg_welcome_de') );                  
  345.     }
  346. }