<?php
namespace App\Controller;
use App\Entity\Usuario;
use App\Repository\CuentaRepository;
use App\Repository\UsuarioRepository;
use App\Service\UsuarioService;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface;
use phpDocumentor\Reflection\Types\Object_;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Rest\Route("/api/autenticacion/")
*
*/
class AutorizacionUsuarioController extends AbstractFOSRestController
{
private $repository;
private $cuentaRepository;
private $serviceUsuario;
private $JWTTokenManager;
public function __construct(SerializerInterface $serializer,
UsuarioRepository $usuarioRepository,
CuentaRepository $cuentaRepository,
UsuarioService $serviceUsuario,
JWTTokenManagerInterface $JWTTokenManager
){
$this->serializer = $serializer;
$this->repository = $usuarioRepository;
$this->cuentaRepository = $cuentaRepository;
$this-> serviceUsuario = $serviceUsuario;
$this->JWTTokenManager = $JWTTokenManager;
}
/**
* @Rest\Post("login", name="login")
* @param Request $request
* @return Response
*/
public function autentificarUsuario(Request $request)
{
$nombrePublico = $request->request->get("nombre");
$clavePublica = $request->request->get("pass");
$user = $this->repository->findOneBy(["nombre"=>$nombrePublico,"password"=>md5($clavePublica),"cuenta"=>1, "activo"=>1]);
//dd($user);
if(!$user) {
//data['error'] = $this->createNotFoundException();
$response = new Response("usuario no encontrado",Response::HTTP_UNAUTHORIZED);
return $response;
}
// $token = $this->JWTTokenManager->create($user);
$token = $this->JWTTokenManager->create($user->getCuenta());
$data = array("token" => $token, "tipoUser" => $user ->getTipo());
// $data = $token;
$response = new Response(json_encode($data),Response::HTTP_OK);
$response->prepare($request);
return $response;
}
/**
* @Rest\Post("loginCuenta", name="login_account")
* @param email string
* @param pass string
*/
public function autentificarCuenta(Request $request)
{
$token = null;
$appVersion = $request->request->get("version");
if ($request->request->has("email") && $request->request->has("pass")) {
$email = $request->request->get("email");
$clave = $request->request->get("pass");
if ($clave != '') {
$cuenta = $this->cuentaRepository->findOneBy(['email' => $email, 'password' => md5($clave), 'activo' => 1]);
if ($cuenta && !empty($cuenta->getToken())) {
$token = $cuenta->getToken();
}
}
} else {
if ($request->request->has("token")) {
$cuenta = $this->cuentaRepository->findOneBy(['token' => $request->request->get("token"), "activo" => 1]);
}
}
if (empty($cuenta)) {
$response = new Response(json_encode(["mensaje" => "cuenta no encontrada", "err_code" => 1]), Response::HTTP_UNAUTHORIZED);
return $response;
}
if ($token == null) {
$token = $this->JWTTokenManager->create($cuenta);
$cuenta->setToken($token);
}
$cuenta->setFechaLogin(new \DateTime());
if ($appVersion == null) {
$cuenta->setVersionApp('');
} else {
$cuenta->setVersionApp($appVersion);
}
$this->cuentaRepository->save($cuenta);
$this->cuentaRepository->commit();
$data= ['token'=> $token,
'tipo'=>$cuenta->getTipoCuenta()->getId(),
'parentId'=>$cuenta->getCuentaPadre()->getId(),
'parentNombre'=>$cuenta->getCuentaPadre()->getEmpresa(),
'disclaimerAccept'=>$cuenta->getAceptacionDisclaimer(),
'laboratorio'=>$cuenta->getLaboratorio(),
'emailCuenta'=>$cuenta->getEmail(),
'nombre_tipo'=>$cuenta->getTipoCuenta()->getNombre(),
'comparte_tarifa'=> $cuenta->getCuentaPadre()->getCompartirTarifa(),
'empresa' => $cuenta->getEmpresa()];
$response = new \Symfony\Component\HttpFoundation\JsonResponse($data);
$response->setEncodingOptions(JSON_UNESCAPED_UNICODE);
return $response;
// return new Response($this->serializer->serialize($data,'json'), Response::HTTP_OK);
}
/**
* @Rest\Post("loginUsuario", name="login_account_user")
* @param email string
* @param pass string
* @param token
*/
public function autentificarUsuarioCuenta(Request $request)
{
$nombrePublico = $request->request->get("nombre");
$clavePublica = $request->request->get("pass");
// $token = $request->headers->get("authorization"); //$request->request->get("token");
$token = substr($request->headers->get("authorization"),strlen("Bearer "));
if(!empty($token)) {
$cuenta = $this->cuentaRepository->findOneBy(['token' => $token, 'activo' => 1]);
}
if(empty($cuenta)) {
$response = new Response(json_encode(["mensaje"=>"cuenta no encontrada","err_code"=>1]), Response::HTTP_UNAUTHORIZED);
return $response;
}
$user = $this->repository->findOneBy(["nombre"=>$nombrePublico,"password"=>md5($clavePublica),'cuenta'=>$cuenta->getId()]);
if(!$user) {
$response = new Response(json_encode(["mensaje"=>"usuario no encontrado","err_code"=>2]),Response::HTTP_UNAUTHORIZED);
return $response;
}
$token = $this->JWTTokenManager->create($user);
$data = array("token" => $token, "tipoUser" => $user ->getTipo());
$response = new Response(json_encode($data),Response::HTTP_OK);
$response->prepare($request);
return $response;
}
/**
* @Rest\Post("logoutCuenta")
*/
public function logoutCuenta(Request $request)
{
$response = new Response(json_encode(["mensaje"=>"cuenta no encontrada","err_code"=>1]),Response::HTTP_UNAUTHORIZED);
if(!$request->request->has('token'))
return $response;
$token = $request->request->get('token');
$cuenta = $this->cuentaRepository->findOneBy(['token'=>$token]);
if(empty($cuenta))
return $response;
$cuenta->setToken('');
$this->cuentaRepository->save($cuenta);
$response = new Response("",Response::HTTP_OK);
return $response;
}
}