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)
This commit is contained in:
39
config.el
39
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 <pass>"
|
||||
(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 <pass>"))))
|
||||
|
||||
(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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user