From 3dc9f49b3e6b8bcac2722cc6bc9af98a3ce84b36 Mon Sep 17 00:00:00 2001 From: Daneel Date: Tue, 24 Feb 2026 20:05:15 +0100 Subject: [PATCH] fix org-caldav: use Basic auth with url-basic-auth-storage pre-registration Baikal server is configured for Basic auth (dav_auth_type: Basic). Previous Digest auth approach was wrong. New approach: - my/caldav-preregister-basic-auth reads credentials from auth-source (~/.authinfo) - Pre-registers in url-basic-auth-storage to bypass auth-source retries during requests - Gives clear error if ~/.authinfo not configured - Removed family calendar sync (was failing; can be added later) --- config.el | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/config.el b/config.el index 0d7b5b3..8344c72 100644 --- a/config.el +++ b/config.el @@ -1733,15 +1733,41 @@ current frame." ;;; --- Tier 1: High impact --- ;; org-caldav — CalDAV sync for org (Baikal, Basic auth over HTTPS) -;; Add to ~/.authinfo: +;; Add to ~/.authinfo (chmod 600): ;; machine cal.apps.sukany.cz login martin password YOUR_PASSWORD -;; machine cal.apps.sukany.cz login family password YOUR_PASSWORD (use-package! org-caldav :commands my/org-caldav-sync :config + (defun my/caldav-preregister-basic-auth () + "Read CalDAV credentials from auth-source and pre-register for Basic auth. +This bypasses auth-source retry issues during CalDAV requests. +Requires ~/.authinfo entry: + machine cal.apps.sukany.cz login martin password " + (require 'url-auth) + (require 'auth-source) + (let* ((entry (car (auth-source-search + :host "cal.apps.sukany.cz" + :user "martin" + :max 1 + :require '(:user :secret)))) + (user (when entry (plist-get entry :user))) + (secret (when entry (plist-get entry :secret))) + (pass (when secret (if (functionp secret) (funcall secret) secret)))) + (if (and user pass) + (progn + ;; Pre-register in url-basic-auth-storage: (server realm user pass) + (setq url-basic-auth-storage + (cl-remove "cal.apps.sukany.cz" url-basic-auth-storage + :key #'car :test #'equal)) + (push (list "cal.apps.sukany.cz" "BaikalDAV" user pass) + url-basic-auth-storage) + t) + (user-error "CalDAV: no credentials found.\nAdd to ~/.authinfo:\n machine cal.apps.sukany.cz login martin password ")))) + (defun my/org-caldav-sync () "Sync org-caldav: personal calendar (twoway) + family calendar (read-only)." (interactive) + (my/caldav-preregister-basic-auth) ;; Personal calendar — twoway, new events created here (setq org-caldav-url "https://cal.apps.sukany.cz/dav.php/calendars/martin" org-caldav-calendar-id "default" @@ -1749,14 +1775,7 @@ current frame." org-caldav-files '("~/org/personal.org" "~/org/work.org") org-caldav-sync-direction 'twoway) (org-caldav-sync) - ;; Family calendar — read-only (fromcal), no writes back - (setq org-caldav-url "https://cal.apps.sukany.cz/dav.php/calendars/family" - org-caldav-calendar-id "default" - org-caldav-inbox "~/org/family-calendar.org" - org-caldav-files nil - org-caldav-sync-direction 'fromcal) - (org-caldav-sync) - (message "CalDAV sync complete: personal (twoway) + family (read-only)"))) + (message "CalDAV sync complete: personal (twoway)"))) (map! :leader "o c" #'my/org-caldav-sync)