src/Controller/Webmaster/SecurityController.php line 120

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Webmaster;
  3. use App\EventSubscriber\WebmasterReferenceRequestSubscriber;
  4. use App\Form\Webmaster\SignupForm;
  5. use App\Form\WebmasterLogin;
  6. use App\Security\ApiUser;
  7. use App\Service\Client\User\AccountService;
  8. use App\Service\Client\User\WebmasterService;
  9. use DomainException;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  17. /**
  18.  * @Route("/webmaster")
  19.  */
  20. class SecurityController extends AbstractController
  21. {
  22.     /**
  23.      * @var WebmasterService
  24.      */
  25.     protected WebmasterService $service;
  26.     /**
  27.      * @var AccountService
  28.      */
  29.     protected AccountService $accountService;
  30.     /**
  31.      * @param WebmasterService $service
  32.      * @param AccountService $accountService
  33.      */
  34.     public function __construct(WebmasterService $serviceAccountService $accountService, protected Security $security)
  35.     {
  36.         $this->service $service;
  37.         $this->accountService $accountService;
  38.     }
  39.     /**
  40.      * @Route("/join")
  41.      * @Template()
  42.      * @param Request $request
  43.      * @return array|RedirectResponse
  44.      * @throws \Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface
  45.      * @throws \Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface
  46.      * @throws \Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface
  47.      * @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
  48.      */
  49.     public function join(Request $request)
  50.     {
  51.         // go to dashboard, if we are already logged in as a webmaster
  52.         if ($this->isGranted('ROLE_WEBMASTER')) {
  53.             return $this->redirectToRoute('app_webmaster_dashboard_index');
  54.         }
  55.         $form $this->createForm(SignupForm::class, [], []);
  56.         $form->handleRequest($request);
  57.         if ($form->isSubmitted() && $form->isValid()) {
  58.             $data $form->getData();
  59.             $specs = [
  60.                 'email' => $data['email'],
  61.                 'plaintextPassword' => $data['password'],
  62.                 'channel' => 'webmaster',
  63.                 "remote_ip" => $request->headers->get('X-Real-IP'$_SERVER["REMOTE_ADDR"]),
  64.             ];
  65.             $session $request->getSession();
  66.             if($session->has(WebmasterReferenceRequestSubscriber::SESSION_KEY)) {
  67.                 $wmRef $session->get(WebmasterReferenceRequestSubscriber::SESSION_KEY);
  68.                 $specs['advertised_by_webmaster'] = $wmRef['webmaster_id'] ?? 0;
  69.                 $specs['advertised_by_tracking_id'] = $wmRef['tracking_id'] ?? '';
  70.                 $specs['advertised_by_campaign_id'] = $wmRef['campaign_id'] ?? 0;
  71.             }
  72.             try {
  73.                 // try to find any existing user
  74.                 $account null;
  75.                 if($this->security->getUser() !== null) {
  76.                     $account = [
  77.                         "id" => $this->security->getUser()->getAccountId()
  78.                     ];
  79.                 }
  80.                 if($account === null) {
  81.                     // brand new user! try to register him
  82.                     $account $this->accountService->createRegistration($specs);
  83.                 }
  84.                 $wmSpecs = [
  85.                     'person' => $data['person'],
  86.                     'address' => $data['address']
  87.                 ];
  88.                 if($wm $this->service->createWebmasterForAccount($account['id'], $wmSpecs)) {
  89.                     $session->set('registrationEmail'$specs['email']);
  90.                     $session->save();
  91.                     $this->addFlash('success''Wir haben Dir eine E-Mail geschickt.');
  92.                 }
  93.                 return $this->redirectToRoute('app_security_registrationconfirm');
  94.             }
  95.             catch(DomainException $e) {
  96.                 $this->addFlash('error'$e->getMessage());
  97.             }
  98.         }
  99.         return [
  100.             'form' => $form->createView(),
  101.         ];
  102.     }
  103.     /**
  104.      * @Template()
  105.      * @return array
  106.      */
  107.     public function widget(): array
  108.     {
  109.         $form $this->createForm(WebmasterLogin::class, null, [
  110.             'action' => $this->generateUrl('webmasterlogin'),
  111.             'attr' => [
  112.                 'class' => 'd-none d-md-flex form-inline'
  113.             ]
  114.         ]);
  115.         return [
  116.             'form'  => $form->createView(),
  117.         ];
  118.     }
  119.     /**
  120.      * @Route("/security/login", name="webmasterlogin")
  121.      * @Template()
  122.      *
  123.      * @param AuthenticationUtils       $authenticationUtils
  124.      * @param Request                   $request
  125.      *
  126.      * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
  127.      */
  128.     public function webmasterlogin(AuthenticationUtils $authenticationUtilsRequest $request)
  129.     {
  130.         $form $this->createForm(WebmasterLogin::class, null, [
  131.             'action' => $this->generateUrl('webmasterlogin'),
  132.         ]);
  133.         $form->handleRequest($request);
  134.         $user $this->getUser();
  135.         if ($user instanceof ApiUser && $user->getApiToken()) {
  136.             return $this->redirectToRoute('app_webmaster_dashboard_news');
  137.         }
  138.         return [
  139.             'error' => $authenticationUtils->getLastAuthenticationError(),
  140.             'form'  => $form->createView(),
  141.         ];
  142.     }
  143. }