diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/auth-config.el | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/modules/auth-config.el b/modules/auth-config.el index 43849f20f..5dbce2ef0 100644 --- a/modules/auth-config.el +++ b/modules/auth-config.el @@ -38,6 +38,47 @@ :config (setq epg-gpg-program "gpg2")) ;; force use gpg2 (not gpg v.1) +;; ----------------------------- Ensure-Auth-Before ---------------------------- + +(defun cj/ensure-auth-before (&rest _args) + "Ensure .authinfo.gpg is unlocked before calling the real function." + (cj/ensure-auth)) + +(defun cj/ensure-auth () + "Make sure .authinfo.gpg is decrypted (loops on failure)." + (interactive) + (auth-source-search :max 1)) + +(with-eval-after-load 'auth-source + (defun cj/auth-source-search-retry (orig-fun &rest args) + "Advice around `auth-source-search' to loop until we get non-nil." + (let (res) + (while (not (setq res (apply orig-fun args))) + ;; user hit RET or wrong passphrase → kill agent & retry + (message "Auth failed or cancelled; killing gpg-agent and retrying…") + (start-process "gpgconf-kill-gpg-agent" nil + "gpgconf" "--kill" "gpg-agent") + (sleep-for 0.5)) + res)) + + (advice-add 'auth-source-search :around #'cj/auth-source-search-retry)) + +;; Example: run it before your GPT toggle +;;(advice-add 'cj/toggle-gptel :before #'cj/ensure-auth-before) + +;; Example: before mu4e actually sends a message +;;(advice-add 'smtpmail-send-it ; or `mu4e~proc-send` if you prefer +;; :before #'cj/ensure-auth-before) + +;; Example: before Tramp prompts for a password +;; (advice-add 'tramp-read-passwd ; wherever Tramp reads your passphrase +;; :before #'cj/ensure-auth-before) + +;; ;; Example: before Dirvish opens a remote directory +;; (advice-add 'dirvish-find-file ; or the exact entry-point you use +;; :before #'cj/ensure-auth-before) + + (provide 'auth-config) ;;; auth-config.el ends here. @@ -50,7 +91,7 @@ (ert-deftest auth-config/authinfo-file-exists () "Verify that `authinfo-file` actually exists on disk." (should (and (stringp authinfo-file) - (file-exists-p authinfo-file)))) + (file-exists-p authinfo-file)))) (ert-deftest auth-config/gpg2-is-on-path () "Verify that the `gpg2` executable is on the user’s PATH." |
