<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Action;
use App\Entity\Reunion;
use App\Entity\BookMark;
use App\Enum\StatusEnum;
use App\Entity\ReunionAvis;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Configuration;
use Symfony\Component\Mime\Message;
use Symfony\Component\WebLink\Link;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Symfony\Component\Mercure\Update;
use Symfony\Component\Mercure\Publisher;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mercure\PublisherInterface;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomeController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function index(Request $request): Response
{
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
//bookmarks
$bookMarks = $entityManager->getRepository(BookMark::class)->findBy(['user'=>$user]);
//actions
$actions = $entityManager->getRepository(Action::class)->findBy(
['responsible'=>$user,'status'=>StatusEnum::STATUS_IN_PROGRESS],
['createdAt'=> 'DESC']
);
//reunions
$reunion = $entityManager->getRepository(Reunion::class)->findAll();
//reunionAvis
$reunionAvis = $entityManager->getRepository(ReunionAvis::class)->findAll();
//dd(ini_get("upload_max_filesize"));
$users = $entityManager->getRepository(User::class)->findAll();
$response= $this->render('home/index.html.twig',[
'bookMarks'=> $bookMarks,
'actions' => $actions,
'reunion' => $reunion,
'reunionAvis' => $reunionAvis,
'users' => $users
]);
// This parameter is automatically created by the MercureBundle
$hubUrl = $this->getParameter('mercure.default_hub');
// Link: <http://localhost:3000/.well-known/mercure>; rel="mercure"
$this->addLink($request, new Link('mercure', $hubUrl));
$key = Key\InMemory::plainText('aVerySecretKeyPersol'); // don't forget to set this parameter! Test value: !ChangeMe!
$configuration = Configuration::forSymmetricSigner(new Sha256(), $key);
$token = $configuration->builder()
->withClaim('mercure',['subscribe'=> ["http://".$request->server->get('HTTP_HOST')."/notification/{$user->getId()}"]])
->getToken($configuration->signer(), $configuration->signingKey())
->toString();
$response->headers->set(
'set-cookie',
sprintf('mercureAuthorization=%s; path=/.well-known/mercure; secure; httponly; SameSite=strict', $token)
);
return $response;
}
}