<?php
namespace App\Controller;
use App\Env;
use App\Func;
use App\DTO\AppDTO;
use App\Entity\User;
use App\Service\Auth\Auth;
use App\Service\Cart\Cart;
use App\Service\Mail\Mail;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class LoginController extends AbstractASController
{
private EntityManagerInterface $em;
protected AppDTO $app;
protected Auth $Auth;
//Repositories
private UserRepository $Users;
public function __construct(EntityManagerInterface $em, AppDTO $app, Auth $Auth, Security $security, RequestStack $requestStack)
{
$this->requestStack = $requestStack;
$this->em = $em;
$this->app = $app;
$this->Auth = $Auth;
$this->Auth->setUser($security->getUser());
$this->Users = $em->getRepository(User::class);
}
#[Route('/login', name: 'login_no_locale', defaults: ['_locale' => '%app.default_lang%'])]
#[Route('/{_locale}/login', name: 'login', requirements: ['_locale' => '%app.langs%'])]
public function login(AuthenticationUtils $authenticationUtils, Request $request, Cart $cart, Auth $Auth): Response
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('login/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
#[Route('/login/remind', name: 'login_remind_no_locale', defaults: ['_locale' => '%app.default_lang%'])]
#[Route('/{_locale}/login/remind', name: 'login_remind', requirements: ['_locale' => '%app.langs%'])]
public function remind(Request $request, Mail $Mail): Response
{
$submit = $request->get('submit');
$email = $request->get('email');
if ($email) {
if(!$email) {
$result = ['noerrors' => false, "message" => $this->app->labels->get("field_cant_be_empty")];
return new JsonResponse($result);
} else {
$user = $this->Users->findOneBy(['email' => $email]);
if ($user) {
$password = $this->Auth->mkpass();
$data = array(
"pass" => $password,
);
$params = array(
"email" => $user->getEmail(),
"pass" => $password,
);
$user->setPassword($password);
$this->em->flush();
$Mail->send($this->app->sett->get('sitename'), Env::mail_from(), $email, $this->app->labels->get("remind_message_theme"), Func::mess_from_tmp($this->app->templates->get("remind_message_template"), $params));
$result = ['noerrors' => true, "message" => $this->app->labels->get("password_sent")];
return new JsonResponse($result);
} else {
$result = ['noerrors' => false, "message" => $this->app->labels->get("email_not_found")];
return new JsonResponse($result);
}
}
}
return $this->render('login/remind.html.twig', [
]);
}
#[Route('/logout', name: 'app_logout', defaults: ['_locale' => '%app.default_lang%'])]
#[Route('/{_locale}/logout', name: 'app_logout_locale', requirements: ['_locale' => '%app.langs%'])]
public function logout(Security $security)
{
}
#[Route(path: '/connect/google', name: 'connect_google_start')]
public function connectGoogleAction(ClientRegistry $clientRegistry)
{
return $clientRegistry
->getClient('google_main') // key used in config/packages/knpu_oauth2_client.yaml
->redirect([], []);
}
#[Route(path: '/connect/google/check', name: 'connect_google_check')]
public function connectGoogleCheckAction(Request $request, ClientRegistry $clientRegistry)
{
}
#[Route(path: '/connect/facebook', name: 'connect_facebook_start')]
public function connectFacebookAction(ClientRegistry $clientRegistry)
{
// on Symfony 3.3 or lower, $clientRegistry = $this->get('knpu.oauth2.registry');
// will redirect to Facebook!
return $clientRegistry
->getClient('facebook_main') // key used in config/packages/knpu_oauth2_client.yaml
->redirect([], []);
}
#[Route(path: '/connect/facebook/check', name: 'connect_facebook_check')]
public function connectFacebookCheckAction(Request $request, ClientRegistry $clientRegistry)
{
}
}