emacs: Minor refactoring of crypto code

This commit is contained in:
David Edmondson 2019-09-11 21:32:58 -04:00 committed by David Bremner
parent a1d6e406f6
commit 50f0cbcc4d

View file

@ -96,34 +96,37 @@ mode."
:supertype 'notmuch-button-type) :supertype 'notmuch-button-type)
(defun notmuch-crypto-insert-sigstatus-button (sigstatus from) (defun notmuch-crypto-insert-sigstatus-button (sigstatus from)
"Insert a button describing the signature status SIGSTATUS sent
by user FROM."
(let* ((status (plist-get sigstatus :status)) (let* ((status (plist-get sigstatus :status))
(help-msg nil)
(show-button t) (show-button t)
(label nil)
(face 'notmuch-crypto-signature-unknown) (face 'notmuch-crypto-signature-unknown)
(button-action (lambda (button) (message (button-get button 'help-echo))))) (button-action (lambda (button) (message (button-get button 'help-echo))))
(keyid (concat "0x" (plist-get sigstatus :keyid)))
label help-msg)
(cond (cond
((string= status "good") ((string= status "good")
(let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint)))) (let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint)))
;; if userid present, userid has full or greater validity (userid (plist-get sigstatus :userid)))
(if (plist-member sigstatus :userid) ;; If userid is present it has full or greater validity.
(let ((userid (plist-get sigstatus :userid))) (if userid
(setq label (concat "Good signature by: " userid)) (setq label (concat "Good signature by: " userid)
(setq face 'notmuch-crypto-signature-good)) face 'notmuch-crypto-signature-good)
(progn (setq label (concat "Good signature by key: " fingerprint)
(setq label (concat "Good signature by key: " fingerprint)) face 'notmuch-crypto-signature-good-key))
(setq face 'notmuch-crypto-signature-good-key))) (setq button-action 'notmuch-crypto-sigstatus-good-callback
(setq button-action 'notmuch-crypto-sigstatus-good-callback) help-msg (concat "Click to list key ID 0x" fingerprint "."))))
(setq help-msg (concat "Click to list key ID 0x" fingerprint "."))))
((string= status "error") ((string= status "error")
(let ((keyid (concat "0x" (plist-get sigstatus :keyid)))) (setq label (concat "Unknown key ID " keyid " or unsupported algorithm")
(setq label (concat "Unknown key ID " keyid " or unsupported algorithm")) button-action 'notmuch-crypto-sigstatus-error-callback
(setq button-action 'notmuch-crypto-sigstatus-error-callback) help-msg (concat "Click to retrieve key ID " keyid
(setq help-msg (concat "Click to retrieve key ID " keyid " from keyserver.")))) " from keyserver.")))
((string= status "bad") ((string= status "bad")
(let ((keyid (concat "0x" (plist-get sigstatus :keyid)))) (setq label (concat "Bad signature (claimed key ID " keyid ")")
(setq label (concat "Bad signature (claimed key ID " keyid ")")) face 'notmuch-crypto-signature-bad))
(setq face 'notmuch-crypto-signature-bad)))
(status (status
(setq label (concat "Unknown signature status: " status))) (setq label (concat "Unknown signature status: " status)))
(t (t
@ -140,19 +143,19 @@ mode."
:notmuch-from from) :notmuch-from from)
(insert "\n")))) (insert "\n"))))
(declare-function notmuch-show-refresh-view "notmuch-show" (&optional reset-state))
(defun notmuch-crypto-sigstatus-good-callback (button) (defun notmuch-crypto-sigstatus-good-callback (button)
(let* ((sigstatus (button-get button :notmuch-sigstatus)) (let* ((sigstatus (button-get button :notmuch-sigstatus))
(fingerprint (concat "0x" (plist-get sigstatus :fingerprint))) (fingerprint (concat "0x" (plist-get sigstatus :fingerprint)))
(buffer (get-buffer-create "*notmuch-crypto-gpg-out*")) (buffer (get-buffer-create "*notmuch-crypto-gpg-out*"))
(window (display-buffer buffer t nil))) (window (display-buffer buffer)))
(with-selected-window window (with-selected-window window
(with-current-buffer buffer (with-current-buffer buffer
(goto-char (point-max)) (goto-char (point-max))
(call-process epg-gpg-program nil t t "--batch" "--no-tty" "--list-keys" fingerprint)) (call-process epg-gpg-program nil t t "--batch" "--no-tty" "--list-keys" fingerprint))
(recenter -1)))) (recenter -1))))
(declare-function notmuch-show-refresh-view "notmuch-show" (&optional reset-state))
(defun notmuch-crypto--async-key-sentinel (process event) (defun notmuch-crypto--async-key-sentinel (process event)
"When the user asks for a GPG key to be retrieved "When the user asks for a GPG key to be retrieved
asynchronously, handle completion of that task. asynchronously, handle completion of that task.
@ -194,6 +197,8 @@ redisplay the thread."
(insert label)))) (insert label))))
(defun notmuch-crypto-sigstatus-error-callback (button) (defun notmuch-crypto-sigstatus-error-callback (button)
"When signature validation has failed, try to retrieve the
corresponding key when the status button is pressed."
(let* ((sigstatus (button-get button :notmuch-sigstatus)) (let* ((sigstatus (button-get button :notmuch-sigstatus))
(keyid (concat "0x" (plist-get sigstatus :keyid))) (keyid (concat "0x" (plist-get sigstatus :keyid)))
(buffer (get-buffer-create "*notmuch-crypto-gpg-out*"))) (buffer (get-buffer-create "*notmuch-crypto-gpg-out*")))
@ -215,7 +220,7 @@ redisplay the thread."
(process-put p :notmuch-show-point (point)) (process-put p :notmuch-show-point (point))
(message "Getting the GPG key %s asynchronously..." keyid) (message "Getting the GPG key %s asynchronously..." keyid)
(continue-process p))) (continue-process p)))
(let ((window (display-buffer buffer t nil))) (let ((window (display-buffer buffer)))
(with-selected-window window (with-selected-window window
(with-current-buffer buffer (with-current-buffer buffer
(goto-char (point-max)) (goto-char (point-max))
@ -226,25 +231,23 @@ redisplay the thread."
(notmuch-show-refresh-view))))) (notmuch-show-refresh-view)))))
(defun notmuch-crypto-insert-encstatus-button (encstatus) (defun notmuch-crypto-insert-encstatus-button (encstatus)
(let* ((status (plist-get encstatus :status)) "Insert a button describing the encryption status ENCSTATUS."
(help-msg nil) (insert-button
(label "Decryption not attempted") (concat "[ "
(face 'notmuch-crypto-decryption)) (let ((status (plist-get encstatus :status)))
(cond (cond
((string= status "good") ((string= status "good")
(setq label "Decryption successful")) "Decryption successful")
((string= status "bad") ((string= status "bad")
(setq label "Decryption error")) "Decryption error")
(t (t
(setq label (concat "Unknown encryption status" (concat "Unknown encryption status"
(if status (concat ": " status)))))) (if status (concat ": " status))))))
(insert-button " ]")
(concat "[ " label " ]")
:type 'notmuch-crypto-status-button-type :type 'notmuch-crypto-status-button-type
'help-echo help-msg 'face 'notmuch-crypto-decryption
'face face 'mouse-face 'notmuch-crypto-decryption)
'mouse-face face) (insert "\n"))
(insert "\n")))
;; ;;