Je voudrais partager un de mes calendriers avec un ami, sans télécharger mes autres calendriers, et sans rendre ce calendrier partagé public. Est-ce possible ?
Réponses
Trop de publicités?Si vous êtes sur Mac :
- Ouvrez l'application Calendrier.
- Faites un clic droit sur le calendrier spécifique que vous voulez partager avec quelqu'un.
- Cliquez sur "Partager le calendrier..."
- Inscrivez le nom de l'utilisateur iCloud avec lequel vous souhaitez partager ce calendrier.
Si vous êtes sur ios :
- Ouvrez l'application Calendrier.
- Trouvez le calendrier que vous voulez partager.
- Appuyez sur l'icône "i" alignée à droite de chaque calendrier.
- Cliquez sur "Ajouter une personne" et écrivez l'adresse iCloud de vos amis, leur nom, etc
Je dois préciser qu'il fonctionne principalement sur les calendriers iCloud, pas pour le calendrier du compte "Google" par exemple.
J'espère que cela vous aidera, n'hésitez pas à commenter ici si vous avez d'autres questions.
Je poste ma solution au cas où elle aiderait quelqu'un. J'ai envisagé et abandonné trois fournisseurs :
-
Google Agenda, car le calendrier serait soit public sur l'internet, soit l'autre personne devrait créer un compte Google et le relier à son appareil (ce qu'elle est trop occupée pour faire) ;
-
Amazon Workmail, parce que la personne devrait soit vérifier le calendrier sur le web, soit relier son appareil (là encore, elle est trop occupée pour le faire) ;
-
iCloud, parce que j'aurais besoin de charger todo mes calendriers locaux, ce que je ne voulais pas faire pour des raisons de confidentialité.
Ma solution a consisté à exporter le calendrier local vers un fichier de type .ics
et coder une fonction sur mon serveur NodeJS qui sert ce fichier sous trois conditions :
- l'URL contient une clé secrète
- l'URL contient un paramètre GET avec une clé secrète
- la demande provient d'une adresse IP pré-approuvée.
Et cela fonctionne bien. Voici le code NodeJS :
/**
*
* GET /calendar
*
* URL: http://domain.com/secret1?secret2=secret2
*
**/
router.get('/secret1', async (req, res) => {
// Access control
let ips = ["", ":::fff:127.0.0.1"];
if (!(ips.includes(req.ip))) {
return res.redirect("/404");
}
if ("secret2" != req.query.secret2) {
return res.redirect("/404");
}
let filepath = path.join(__dirname, "cal.ics");
if (!fs.existsSync(filepath)) {
console.error("*** Error in serving calendar file");
return res.redirect("/404");
}
res.sendFile(filepath);
});