fix(org-caldav): fallback HA1 hash + boundp guard for url-digest-auth-storage
This commit is contained in:
41
config.el
41
config.el
@@ -1747,26 +1747,29 @@ current frame."
|
|||||||
;; Baikal uses Digest auth. Pre-register credentials from ~/.authinfo
|
;; Baikal uses Digest auth. Pre-register credentials from ~/.authinfo
|
||||||
;; so Emacs url package doesn't prompt interactively.
|
;; so Emacs url package doesn't prompt interactively.
|
||||||
(defun my/caldav-setup-digest-auth ()
|
(defun my/caldav-setup-digest-auth ()
|
||||||
"Load Digest auth credentials for Baikal from auth-source (~/.authinfo).
|
"Pre-register Baikal Digest auth. HA1 = MD5(user:realm:pass) from authinfo.
|
||||||
Baikal uses Digest auth. url-digest-auth-storage stores HA1 = MD5(user:realm:pass)."
|
Falls back to hardcoded hash if auth-source lookup fails.
|
||||||
|
url-digest-auth-storage format: ((\"server:port\" (\"realm\" user ha1)) ...)"
|
||||||
(require 'url-auth)
|
(require 'url-auth)
|
||||||
(let* ((found (car (auth-source-search :host "cal.apps.sukany.cz"
|
(let* ((user "martin")
|
||||||
:user "martin" :max 1)))
|
(realm "BaikalDAV")
|
||||||
(pass (when found
|
(server "cal.apps.sukany.cz:443")
|
||||||
(let ((s (plist-get found :secret)))
|
(found (car (auth-source-search :host "cal.apps.sukany.cz"
|
||||||
(if (functionp s) (funcall s) s))))
|
:user user :max 1)))
|
||||||
(user "martin")
|
(pass (when found
|
||||||
(realm "BaikalDAV")
|
(let ((s (plist-get found :secret)))
|
||||||
(server "cal.apps.sukany.cz:443"))
|
(if (functionp s) (funcall s) s))))
|
||||||
(when pass
|
;; Compute HA1 from authinfo password, or use pre-computed fallback
|
||||||
;; url-digest-auth-storage format: (("server:port" ("realm" user ha1) ...) ...)
|
(ha1 (if pass
|
||||||
;; (cdr realm-entry) must be a list (user ha1), NOT a bare string.
|
(md5 (concat user ":" realm ":" pass))
|
||||||
(let ((ha1 (md5 (concat user ":" realm ":" pass)))
|
;; Fallback: MD5("martin:BaikalDAV:treasure-Hunter")
|
||||||
(existing (assoc server url-digest-auth-storage)))
|
"7cf9c41c78f4986fd65948029bcc4743")))
|
||||||
(if existing
|
(if (boundp 'url-digest-auth-storage)
|
||||||
(setcdr existing (list (list realm user ha1)))
|
;; Modern Emacs: inject into url-digest-auth-storage
|
||||||
(push (list server (list realm user ha1))
|
(setq url-digest-auth-storage
|
||||||
url-digest-auth-storage))))))
|
(list (list server (list realm user ha1))))
|
||||||
|
;; Older Emacs: warn and skip
|
||||||
|
(message "org-caldav: url-digest-auth-storage not available, auth may fail"))))
|
||||||
|
|
||||||
(defun my/org-caldav-sync ()
|
(defun my/org-caldav-sync ()
|
||||||
"Sync org-caldav after pre-registering Baikal Digest auth."
|
"Sync org-caldav after pre-registering Baikal Digest auth."
|
||||||
|
|||||||
Reference in New Issue
Block a user