mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
emacs: Minor refactoring of crypto code
This commit is contained in:
parent
a1d6e406f6
commit
50f0cbcc4d
1 changed files with 47 additions and 44 deletions
|
@ -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
|
'face 'notmuch-crypto-decryption
|
||||||
'help-echo help-msg
|
'mouse-face 'notmuch-crypto-decryption)
|
||||||
'face face
|
(insert "\n"))
|
||||||
'mouse-face face)
|
|
||||||
(insert "\n")))
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue