I have a blueMind server that runs well, so I’m creating a rest API to retrieve my user’s calendars via caldav where I use the Sabre\DAV lib.
But I can’t connect to blueMind
I’m trying to connect to BlueMind via caldav but it won’t work. Is there a specific url to connect to BlueMind via caldav?
this my code:
<?php
namespace App\Service;
use Sabre\DAV\Client;
use Sabre\DAV\Exception;
use Sabre\HTTP\ClientHttpException;
class CalDavClient
{
private $client;
public function __construct()
{
try {
$settings = [
'baseUri' => $_ENV['CALDAV_SERVER_URL'], //http:bm5.organi.tech
'userName' => $_ENV['CALDAV_USER'],
'password' => $_ENV['CALDAV_PASSWORD'],
];
// Vérification des paramètres de connexion
if (empty($settings['baseUri']) || empty($settings['userName']) || empty($settings['password'])) {
throw new \InvalidArgumentException('Les paramètres de connexion CalDAV sont manquants.');
}
$this->client = new Client($settings);
// Vérifier la connexion en envoyant une requête OPTIONS
$this->checkConnection();
} catch (\InvalidArgumentException $e) {
error_log('Erreur lors de la connexion au serveur CalDAV : ' . $e->getMessage());
throw new \RuntimeException('Erreur de configuration du client CalDAV : ' . $e->getMessage());
} catch (Exception $e) {
// Gérer les exceptions de connexion CalDAV
error_log('Erreur lors de la connexion au serveur CalDAV : ' . $e->getMessage());
throw new \RuntimeException('Erreur lors de la connexion au serveur CalDAV : ' . $e->getMessage());
}
}
public function getClient(): Client
{
return $this->client;
}
private function checkConnection()
{
try {
// var_dump("tttt", $this->client->options());
// Envoyer une requête OPTIONS pour vérifier la connexion
$response = $this->client->request('OPTIONS', '/');
;
// Vérifier et afficher les méthodes autorisées
$allowedMethods = $response['headers']['Allow'] ?? '';
if (!empty($allowedMethods)) {
echo "Méthodes autorisées : " . $allowedMethods;
} else {
echo "Aucune méthode autorisée trouvée.";
}
} catch (ClientHttpException $e) {
error_log("Erreur lors de la vérification de la connexion : " . $e->getMessage());
throw new \RuntimeException("Erreur lors de la vérification de la connexion : " . $e->getMessage());
} catch (Exception $e) {
error_log("Une erreur s'est produite lors de la vérification de la connexion : " . $e->getMessage());
throw new \RuntimeException("Une erreur s'est produite lors de la vérification de la connexion : " . $e->getMessage());
}
}
public function getAllowedMethods(): array
{
try {
// Envoyer une requête OPTIONS pour récupérer les méthodes disponibles
$response = $this->client->request('OPTIONS', '/');
// Récupérer les en-têtes de la réponse
$allowedMethods = $response['headers']['Allow'] ?? '';
// Si les méthodes sont trouvées, retourner un tableau, sinon un tableau vide
return !empty($allowedMethods) ? explode(',', $allowedMethods) : [];
} catch (ClientHttpException $e) {
error_log("Erreur lors de la récupération des méthodes : " . $e->getMessage());
throw new \RuntimeException("Erreur lors de la récupération des méthodes : " . $e->getMessage());
} catch (Exception $e) {
error_log("Une erreur s'est produite : " . $e->getMessage());
throw new \RuntimeException("Une erreur s'est produite : " . $e->getMessage());
}
}
}
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\CalDavClient;
use Symfony\Component\HttpFoundation\Response;
use Exception;
class CalendarController
{
private $caldavClient;
public function __construct(CalDavClient $caldavClient)
{
$this->caldavClient = $caldavClient->getClient();
}
#[Route('/api/calendars', methods: ["GET"])]
public function listCalendars(): JsonResponse
{
try {
// var_dump($this->caldavClient);
$response = $this->caldavClient->propfind('/calendars/', ['{DAV:}displayname'], 1);
return new JsonResponse($response, Response::HTTP_OK);
} catch (Exception $e) {
return new JsonResponse(['error' => 'Error fetching calendars: ' . $e->getMessage()], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
#[Route('/api/calendars', methods: ["POST"])]
p