<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use App\Entity\AppMensaje;
use App\Repository\AppMensajeRepository;
use App\Entity\LoginLog;
use App\Repository\LoginLogRepository;
use App\Service\AuthService;
use App\Service\PostulacionService;
use App\Service\AuthClaveUnicaService;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\HttpFoundation\HeaderUtils;
use Symfony\Component\Mime\Email;
//use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesSmtpTransport;
use DateTime;
use DateTimeInterface;
class DefaultController extends AbstractController
{
#[Route('/', name: 'default')]
public function default(
Request $request,
AuthService $authService
): Response
{
/*
if (!($authService->isValidaSessionUsuario($request))){
return $this->redirect($this->generateUrl('sesionExpirada'));
}else{
return $this->redirect($this->generateUrl('home'));
}
*/
return $this->render('default/index.html.twig', [
]);
}
/*
#[Route('/testmail', name: 'testmail')]
public function testmail(
Request $request,
MailerInterface $mailer
){
echo "testing mail<br>";
//docs:
//https://github.com/symfony/amazon-mailer
//https://symfony.com/doc/current/mailer.html
try{
$transport = new SesSmtpTransport(
'AKIA3RSIM2NRIV7M6YVO',
'BIqUTpjtfHD9fTiv6dig6z2vnY2J/QzhpBJwcG9/HJtJ',
'us-east-1'
);
$transport = new SesSmtpTransport(
$_ENV['MAILER_SES_USER'],
$_ENV['MAILER_SES_PASS'],
$_ENV['MAILER_SES_REGION']
);
$mailer = new Mailer($transport);
$email = (new Email())
->from($_ENV['MAILER_SES_SENDER'])
->to('eduardo.rojas@cultura.gob.cl')
//->to('alfonso.calderon@cultura.gob.cl')
//->cc('eduardo.rojas@cultura.gob.cl')
//->to('alfonso.calderon@cultura.gob.cl')
//->to('eduardo.rojasc@gmail.com')
//->bcc('bcc@example.com')
//->replyTo('fabien@example.com')
//->priority(Email::PRIORITY_HIGH)
->replyTo($_ENV['MAILER_SES_REPLY_TO'])
->subject('Test mail Amazon for Symfony Mailer!')
->text('Este es un test de erojasc!')
->html('<p>Este es un test de erojasc!</p>');
if ($_ENV['MAILER_SES_CC']!=""){
$email->cc($_ENV['MAILER_SES_CC']);
}
if ($_ENV['MAILER_SES_BCC']!=""){
$email->bcc($_ENV['MAILER_SES_BCC']);
}
$mailer->send($email);
}
catch(\Exception $e){
print_r($e->getMessage());
}
die;
}
*/
#[Route('/home', name: 'home')]
public function home(
Request $request,
AuthService $authService,
AppMensajeRepository $appMensajeRepository,
PostulacionService $postulacionService
){
if (!($authService->isValidaSessionUsuario($request))){
//Verificar si token ha expirado
$this->addFlash('warning', 'Sesión Expirada!');
$authService->clearSessionUsuario($request);
return $this->redirect($this->generateUrl('sesionExpirada'));
}
if ($postulacionService->hasPostulacionEnviadaUsuarioSession($request)){
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'home_has_postulacion_enviada_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
$urlCertificadoPostulacion = $this->generateUrl('postulacion_certificado', array('disposition' => 'ATTACHMENT'), UrlGenerator::ABSOLUTE_URL);
return $this->renderForm('default/home_has_postulacion_enviada.html.twig', [
'msjInicial'=>$msjInicial,
'urlCertificadoPostulacion'=>$urlCertificadoPostulacion
]);
}else{
$botonLabel="Iniciar solicitud de inscripción";
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'home_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
if ($postulacionService->hasPostulacionCreadaUsuarioSession($request)){
$postulacion = $postulacionService->getPostulacionUsuarioSession($request);
if ($postulacion->hasAvanceGuardado()){
$botonLabel="Continuar Inscripción";
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'home_has_postulacion_sin_enviar_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
}
}
//$this->addFlash('success', 'Tu solicitud de inscripción en el registro de Puntos de Cultura Comunitaria fue guardada exitosamente');
//$this->addFlash('danger', 'Email no Enviado [Se ha producido un error con el envio de la copia de tu solicitud al correo que indicaste {"sdfsdf"}]');
return $this->renderForm('default/home.html.twig', [
'msjInicial'=>$msjInicial,
'botonLabel'=>$botonLabel
]);
}
}
#[Route('/sesionExpirada', name: 'sesionExpirada')]
public function sesionExpirada(
AppMensajeRepository $appMensajeRepository,
AuthClaveUnicaService $authClaveUnicaService
){
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'sesion_expirada_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
$urlBase = $authClaveUnicaService->getUrlToLogin();
return $this->render('default/sesionExpirada.html.twig', [
'msjInicial'=>$msjInicial,
'urlBase' => $urlBase
]);
}
#[Route('/tokenNoValido', name: 'tokenNoValido')]
public function tokenNoValido(
AppMensajeRepository $appMensajeRepository
){
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'sesion_expirada_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
return $this->render('default/tokenNoValido.html.twig', [
'msjInicial'=>$msjInicial
]);
}
#[Route('/login', name: 'login')]
public function login(
Request $request,
AuthService $authService,
LoginLogRepository $loginLogRepository
){
$validarTokenUsuario = $authService->validarTokenUsuario($request);
//echo "validarTokenUsuario";
//die;
//Registrar loginLog - Incio
$loginLog = new LoginLog();
$now = new DateTime();
//$loginLog->setCreatedAt($now);
$loginLog->updateTimestamps();
if ($validarTokenUsuario){
$data_token = $authService->getDataToken($request);
$loginLog->setToken($data_token->jwt);
// $loginLog->setUserRut($data_token->user_token->run);
// $loginLog->setUserNombre($data_token->user_token->nombres);
// $loginLog->setUserApellidos($data_token->user_token->apellidos);
$loginLog->setUserEmail("");
//$loginLog->setUserEmail($data_token->user_token->run);
$loginLog->setOrganizacionId($data_token->organizacion_token->id);
$loginLog->setOrganizacionRut($data_token->organizacion_token->rut);
$loginLog->setOrganizacionNombre($data_token->organizacion_token->nombre);
}else{
$loginLog->setToken($request->query->get('token'));
return $this->redirect($this->generateUrl('tokenNoValido'));
}
$loginLog->setTokenValido($validarTokenUsuario);
$loginLogRepository->save($loginLog,true);
//Registrar loginLog - Fin
return $this->redirect($this->generateUrl('home'));
}
#[Route('/logout', name: 'logout')]
public function logout(
Request $request,
AppMensajeRepository $appMensajeRepository,
AuthService $authService
){
if ($authService->clearSessionUsuario($request)){
$this->addFlash('success', 'Sesión Cerrada Exitosamente!');
}
$appMensaje= $appMensajeRepository->findOneBy(['name'=>'logout_mensaje_inicial']);
$msjInicial = $appMensaje->getMensaje();
return $this->renderForm('default/logout.html.twig', [
'msjInicial'=>$msjInicial
]);
//return $this->redirect($this->generateUrl('login'));
}
// #[Route('/documento/get/{filename}/{relative_path}/{disposition}', name: 'documento_get')]
#[Route('/documento/get/{filename}/{relative_path}/{disposition}', name: 'documento_get')]
public function documento_get(
Request $request,
string $filename,
string $relative_path,
string $disposition
):Response
{
if (($disposition=="") || ($disposition=="ATTACHMENT")){
$dispositionResponseHeaderBag=ResponseHeaderBag::DISPOSITION_ATTACHMENT;
}else{
$dispositionResponseHeaderBag=ResponseHeaderBag::DISPOSITION_INLINE;
}
$projectRoot = $this->getParameter('kernel.project_dir');
$bin_data = file_get_contents($projectRoot."/public/documentos/".$relative_path."/".$filename, true);
$response = new Response($bin_data);
$disposition = HeaderUtils::makeDisposition(
$dispositionResponseHeaderBag,
$filename
);
$response->headers->set('Content-Disposition', $disposition);
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Length', strlen($bin_data));
return $response;
}
}