fix: makes ical url publicly accessible if user has option enabled
This commit is contained in:
@@ -4,27 +4,35 @@ namespace App\Monitor\Framework\Controller;
|
||||
|
||||
use Aimeos\Map;
|
||||
use App\Monitor\Framework\Repository\MonitorRepository;
|
||||
use App\User\Framework\Entity\User;
|
||||
use Spatie\IcalendarGenerator\Components\Calendar;
|
||||
use Spatie\IcalendarGenerator\Components\Event;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Component\Security\Http\Attribute\IsGranted;
|
||||
|
||||
class CalendarController extends AbstractController
|
||||
{
|
||||
#[Route('/monitors/ical.ics', name: 'app.monitors.ical')]
|
||||
public function icalAction(MonitorRepository $monitorRepository)
|
||||
#[IsGranted('PUBLIC_ACCESS')]
|
||||
#[Route('/monitors/ical/{email:user}/upcoming-episodes.ics', name: 'app.monitors.ical')]
|
||||
public function icalAction(MonitorRepository $monitorRepository, User $user)
|
||||
{
|
||||
$calendar = new Calendar();
|
||||
if (false === $user->hasICalEnabled()) {
|
||||
return new Response('Calendar not found.', 404);
|
||||
}
|
||||
|
||||
$calendar = Calendar::create()
|
||||
->name('Upcoming Episodes')
|
||||
->refreshInterval(10);
|
||||
|
||||
$monitors = $monitorRepository->whereAirDateNotNull();
|
||||
$events = Map::from($monitors)->map(function ($monitor) {
|
||||
$calendar->event(Map::from($monitors)->map(function ($monitor) {
|
||||
return new Event($monitor->getTitle())
|
||||
->startsAt($monitor->getAirDate())
|
||||
->withoutTimezone()
|
||||
->fullDay()
|
||||
;
|
||||
});
|
||||
$calendar->event($events->toArray());
|
||||
->fullDay();
|
||||
})->toArray());
|
||||
|
||||
return new Response($calendar->get(), 200, [
|
||||
'Content-Type' => 'text/calendar',
|
||||
'Content-Disposition' => 'attachment; filename="upcoming-episodes.ics"',
|
||||
|
||||
Reference in New Issue
Block a user