From 9904370ac89aa42bf1a7f6003d1ddeb57957d9f7 Mon Sep 17 00:00:00 2001 From: alma Date: Wed, 14 Jan 2026 20:37:49 +0100 Subject: [PATCH] Agenda refactor --- test-infomaniak-caldav.js | 142 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 test-infomaniak-caldav.js diff --git a/test-infomaniak-caldav.js b/test-infomaniak-caldav.js new file mode 100644 index 0000000..494ac64 --- /dev/null +++ b/test-infomaniak-caldav.js @@ -0,0 +1,142 @@ +#!/usr/bin/env node + +/** + * Script de test pour la connexion CalDAV Infomaniak + * Usage: node test-infomaniak-caldav.js + */ + +const { createClient } = require('webdav'); + +const email = process.argv[2] || 'a.tmiri@icmaae.foundation'; +const password = process.argv[3]; + +if (!password) { + console.error('❌ Usage: node test-infomaniak-caldav.js '); + console.error(''); + console.error('Example:'); + console.error(' node test-infomaniak-caldav.js a.tmiri@icmaae.foundation "your-password"'); + process.exit(1); +} + +const baseUrl = 'https://sync.infomaniak.com/caldav'; + +console.log('🔍 Test CalDAV Infomaniak'); +console.log('Email:', email); +console.log('URL:', baseUrl); +console.log('Password length:', password.length); +console.log(''); + +async function testCalDAV() { + try { + console.log('📡 Création du client CalDAV...'); + const client = createClient(baseUrl, { + username: email, + password: password, + }); + + console.log('📡 Test PROPFIND sur la racine (/)...'); + const items = await client.getDirectoryContents('/'); + + console.log('✅ SUCCESS - Connexion réussie!'); + console.log(''); + console.log(`📅 ${items.length} élément(s) trouvé(s):`); + console.log(''); + + const calendars = items.filter(item => item.type === 'directory' && item.filename !== '/'); + + if (calendars.length === 0) { + console.log('⚠️ Aucun calendrier trouvé (seulement des fichiers)'); + } else { + console.log('Calendriers:'); + for (let i = 0; i < calendars.length; i++) { + const cal = calendars[i]; + console.log(` ${i + 1}. ${cal.basename || cal.filename}`); + console.log(` Chemin: ${cal.filename}`); + console.log(` Type: ${cal.type}`); + + // Essayer de récupérer les propriétés du calendrier + try { + const props = await client.customRequest(cal.filename, { + method: 'PROPFIND', + headers: { + Depth: '0', + 'Content-Type': 'application/xml', + }, + data: ` + + + + + +`, + }); + + // Parser le XML pour extraire le displayname + const displayNameMatch = props.data.match(/]*>([^<]+)<\/d:displayname>/i); + const colorMatch = props.data.match(/]*>([^<]+)<\/c:calendar-color>/i); + + if (displayNameMatch) { + console.log(` Nom: ${displayNameMatch[1]}`); + } + if (colorMatch) { + console.log(` Couleur: ${colorMatch[1]}`); + } + } catch (propError) { + console.log(` ⚠️ Impossible de récupérer les propriétés: ${propError.message}`); + } + console.log(''); + } + } + + console.log('=========================================='); + console.log('✅ La connexion CalDAV fonctionne correctement'); + console.log(' Si le code Node.js échoue, le problème est dans la bibliothèque webdav'); + console.log(' ou dans la configuration du client.'); + console.log('=========================================='); + + } catch (error) { + console.error('❌ ERREUR'); + console.error(''); + console.error('Type:', error.constructor.name); + console.error('Message:', error.message); + + if (error.status === 401 || error.response?.status === 401) { + console.error(''); + console.error('🔐 Erreur 401 - Non autorisé'); + console.error(''); + console.error('Causes possibles:'); + console.error(' 1. Mot de passe incorrect'); + console.error(' 2. 2FA activé - utilisez un mot de passe d\'application'); + console.error(' 3. Compte suspendu ou désactivé'); + console.error(' 4. Email incorrect'); + console.error(''); + console.error('Pour générer un mot de passe d\'application Infomaniak:'); + console.error(' 1. Connectez-vous à https://config.infomaniak.com'); + console.error(' 2. Allez dans "Mon profil" > "Mots de passe d\'application"'); + console.error(' 3. Générez un nouveau mot de passe pour "CalDAV"'); + console.error(' 4. Utilisez ce mot de passe dans votre compte email'); + } else { + console.error(''); + console.error('Détails de l\'erreur:'); + if (error.status) { + console.error(' Status:', error.status); + } + if (error.statusText) { + console.error(' Status Text:', error.statusText); + } + if (error.response) { + console.error(' Response Status:', error.response.status); + console.error(' Response Status Text:', error.response.statusText); + } + if (error.stack) { + console.error(''); + console.error('Stack trace:'); + console.error(error.stack.split('\n').slice(0, 5).join('\n')); + } + } + + process.exit(1); + } +} + +testCalDAV();