It existed as T1's proof of life; the rendered list proves it better. liste.js was its only caller and no longer counts VEVENTs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
// Transport CalDAV isolé : récupère le flux iCalendar brut du calendrier
|
|
// Nextcloud de l'Atelier du Huit en réutilisant la session du navigateur
|
|
// (cookies). Aucun mot de passe stocké. Le module reste pur de toute
|
|
// présentation : il renvoie un *type* d'erreur, pas un message.
|
|
|
|
export const URL_CALENDRIER =
|
|
"https://atelier-huit.frama.space/remote.php/dav/calendars/Pierre/latelier-du-huit-sbastien_shared_by_admin/?export";
|
|
|
|
// fetchImpl est injecté (obligatoire) pour la testabilité.
|
|
// Résultat discriminé : { ok:true, flux } | { ok:false, erreur }.
|
|
export async function recupererFluxCalendrier(fetchImpl) {
|
|
let reponse;
|
|
try {
|
|
reponse = await fetchImpl(URL_CALENDRIER, { credentials: "include" });
|
|
} catch {
|
|
return { ok: false, erreur: "reseau" };
|
|
}
|
|
|
|
if (reponse.status === 401 || reponse.status === 403) {
|
|
return { ok: false, erreur: "non-connecte" };
|
|
}
|
|
if (!reponse.ok) {
|
|
return { ok: false, erreur: "serveur" };
|
|
}
|
|
|
|
const flux = await reponse.text();
|
|
// Piège central : une redirection vers la page de login renvoie un 200 HTML.
|
|
if (!flux.trimStart().startsWith("BEGIN:VCALENDAR")) {
|
|
return { ok: false, erreur: "non-connecte" };
|
|
}
|
|
return { ok: true, flux };
|
|
}
|