[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/autocrypt cb40022cba 23/94: refactored message specific
From: |
ELPA Syncer |
Subject: |
[elpa] externals/autocrypt cb40022cba 23/94: refactored message specific code into autocrypt-compose-* functions |
Date: |
Sun, 26 Mar 2023 07:57:57 -0400 (EDT) |
branch: externals/autocrypt
commit cb40022cba2a9a9f677ba8fd36ffde4d2477f91b
Author: Philip K <philip@warpmail.net>
Commit: Philip K <philip@warpmail.net>
refactored message specific code into autocrypt-compose-* functions
---
autocrypt-message.el | 98 ++++++++++++++--------------------------------------
autocrypt.el | 72 +++++++++++++++++++++++++++++++++++++-
2 files changed, 96 insertions(+), 74 deletions(-)
diff --git a/autocrypt-message.el b/autocrypt-message.el
index 41926caa8d..012d9d1f12 100644
--- a/autocrypt-message.el
+++ b/autocrypt-message.el
@@ -28,82 +28,34 @@
;;;###autoload
(defun autocrypt-message-install ()
"Install autocrypt hooks for message mode."
- (add-hook 'message-setup-hook #'autocrypt-message-setup)
- (add-hook 'message-send-hook #'autocrypt-message-pre-send)
- (define-key message-mode-map (kbd "C-c RET C-a") #'autocrypt-message-setup))
+ (add-hook 'message-setup-hook #'autocrypt-compose-setup)
+ (add-hook 'message-send-hook #'autocrypt-compose-pre-send)
+ (unless (lookup-key message-mode-map (kbd "C-c RET C-a"))
+ (define-key message-mode-map (kbd "C-c RET C-a")
#'autocrypt-message-setup)))
(defun autocrypt-message-uninstall ()
"Remove autocrypt hooks for message mode."
- (remove-hook 'message-setup-hook #'autocrypt-message-setup)
- (remove-hook 'message-send-hook #'autocrypt-message-pre-send)
- (define-key message-mode-map (kbd "C-c RET C-a") nil))
-
-;; https://autocrypt.org/level1.html#key-gossip-injection-in-outbound-messages
-(defun autocrypt-message-gossip-p (recipients)
- "Find out if the current message should have gossip headers.
-Argument RECIPIENTS is a list of addresses this message is
-addressed to."
- (and (mml-secure-is-encrypted-p)
- (< 1 (length recipients))
- (cl-every
- (lambda (rec)
- (let ((peer (cdr (assoc rec autocrypt-peers))))
- (and peer (not (autocrypt-peer-deactivated peer)))))
- recipients)))
-
-(defun autocrypt-message-setup ()
- "Check if Autocrypt is possible, and add pseudo headers."
- (interactive)
- (let ((recs (autocrypt-list-recipients))
- (from (autocrypt-canonicalise (message-field-value "from"))))
- ;; encrypt message if applicable
- (save-excursion
- (cl-case (autocrypt-recommendation from recs)
- (encrypt
- (mml-secure-message-sign-encrypt "pgpmime"))
- (available
- (message-add-header "Do-Autocrypt: no"))
- (discourage
- (message-add-header "Do-Discouraged-Autocrypt: no"))))))
-
-(defun autocrypt-message-pre-send ()
- "Insert Autocrypt headers before sending a message.
-
-Will handle and remove \"Do-(Discourage-)Autocrypt\" if found."
- (let* ((recs (autocrypt-list-recipients))
- (from (autocrypt-canonicalise (message-field-value "from"))))
- ;; encrypt message if applicable
- (when (eq (autocrypt-recommendation from recs) 'encrypt)
- (mml-secure-message-sign-encrypt "pgpmime"))
- ;; check for manual autocrypt confirmations
- (let ((do-autocrypt (message-fetch-field "Do-Autocrypt"))
- (ddo-autocrypt (message-fetch-field "Do-Discouraged-Autocrypt"))
- (query "Are you sure you want to use Autocrypt, even though it is
discouraged?"))
- (when (and (not (mml-secure-is-encrypted-p))
- (or (and do-autocrypt
- (string= (downcase do-autocrypt) "yes"))
- (and ddo-autocrypt
- (string= (downcase ddo-autocrypt) "yes")
- (yes-or-no-p query))))
- (mml-secure-message-sign-encrypt "pgpmime")))
- (message-remove-header "Do-Autocrypt")
- (message-remove-header "Do-Discouraged-Autocrypt")
- ;; insert gossip data
- (when (autocrypt-message-gossip-p recs)
- (let ((buf (generate-new-buffer " *autocrypt gossip*")))
- (with-current-buffer buf
- (dolist (addr (autocrypt-list-recipients))
- (let ((header (autocrypt-generate-header addr t)))
- (insert "Autocrypt-Gossip: " header "\n"))))
- (mml-attach-buffer buf)
- (mml-secure-part "pgpmime")
- (add-hook 'message-send-hook
- (lambda () (kill-buffer buf))
- nil t)))
- ;; insert autocrypt header
- (let ((header (and from (autocrypt-generate-header from))))
- (when header
- (message-add-header (concat "Autocrypt: " header))))))
+ (remove-hook 'message-setup-hook #'autocrypt-compose-setup)
+ (remove-hook 'message-send-hook #'autocrypt-compose-pre-send)
+ (when (eq (lookup-key message-mode-map (kbd "C-c RET C-a"))
+ #'autocrypt-message-setup)
+ (define-key message-mode-map (kbd "C-c RET C-a") nil)))
+
+(defun autocrypt-message-add-header (key val)
+ "Insert header with key KEY and value VAL into message head."
+ (message-add-header (concat key ": " val)))
+
+(defun autocrypt-message-sign-encrypt ()
+ "Sign and encrypt message."
+ (mml-secure-message-sign-encrypt "pgpmime"))
+
+(defun autocrypt-message-secure-attach (payload)
+ "Attach and encrypt buffer PAYLOAD."
+ (mml-attach-buffer payload)
+ (mml-secure-part "pgpmime")
+ (add-hook 'message-send-hook
+ (lambda () (kill-buffer payload))
+ nil t))
(provide 'autocrypt-message)
diff --git a/autocrypt.el b/autocrypt.el
index 713e27264f..112e4e1f6d 100644
--- a/autocrypt.el
+++ b/autocrypt.el
@@ -121,7 +121,12 @@ Every member of this list has to be an instance of the
(message
:install autocrypt-message-install
:uninstall autocrypt-message-uninstall
- :header message-fetch-field))
+ :header message-fetch-field
+ :add-header autocrypt-message-add-header
+ :remove-header message-remove-header
+ :sign-encrypt autocrypt-message-sign-encrypt
+ :secure-attach autocrypt-message-secure-attach
+ :encrypted-p mml-secure-is-encrypted-p))
"Alist for all MUA specific functions.
The value of each record is a plist. The value of each property
@@ -409,6 +414,71 @@ preference (\"prefer-encrypt\")."
(and (< (buffer-size) (* 10 1024))
(buffer-string))))))
+(defun autocrypt-gossip-p (recipients)
+ "Find out if the current message should have gossip headers.
+Argument RECIPIENTS is a list of addresses this message is
+addressed to."
+ (and (autocrypt-mua-call :encrypted-p)
+ (< 1 (length recipients))
+ (cl-every
+ (lambda (rec)
+ (let ((peer (cdr (assoc rec autocrypt-peers))))
+ (and peer (not (autocrypt-peer-deactivated peer)))))
+ recipients)))
+
+(defun autocrypt-compose-setup ()
+ "Check if Autocrypt is possible, and add pseudo headers."
+ (interactive)
+ (let ((recs (autocrypt-list-recipients))
+ (can-remove (autocrypt-mua-func :remove-header))
+ (from (autocrypt-canonicalise (autocrypt-mua-call :header "From"))))
+ ;; encrypt message if applicable
+ (save-excursion
+ (cl-case (autocrypt-recommendation from recs)
+ (encrypt
+ (autocrypt-mua-call :sign-encrypt))
+ (available
+ (when can-remove
+ (autocrypt-mua-call :add-header "Do-Autocrypt" "no")))
+ (discourage
+ (when can-remove
+ (autocrypt-mua-call :add-header "Do-Discouraged-Autocrypt"
"no")))))))
+
+(defun autocrypt-compose-pre-send ()
+ "Insert Autocrypt headers before sending a message.
+
+Will handle and remove \"Do-(Discourage-)Autocrypt\" if found."
+ (let* ((recs (autocrypt-list-recipients))
+ (from (autocrypt-canonicalise (autocrypt-mua-call :header "From"))))
+ ;; encrypt message if applicable
+ (when (eq (autocrypt-recommendation from recs) 'encrypt)
+ (autocrypt-mua-call :sign-encrypt))
+ ;; check for manual autocrypt confirmations
+ (let ((do-autocrypt (autocrypt-mua-call :header "Do-Autocrypt"))
+ (ddo-autocrypt (autocrypt-mua-call :header
"Do-Discouraged-Autocrypt"))
+ (query "Are you sure you want to use Autocrypt, even though it is
discouraged?"))
+ (when (and (not (autocrypt-mua-call :encrypted-p))
+ (or (and do-autocrypt
+ (string= (downcase do-autocrypt) "yes"))
+ (and ddo-autocrypt
+ (string= (downcase ddo-autocrypt) "yes")
+ (yes-or-no-p query))))
+ (autocrypt-mua-call :sign-encrypt)))
+ (autocrypt-mua-call :remove-header "Do-Autocrypt")
+ (autocrypt-mua-call :remove-header "Do-Discouraged-Autocrypt")
+ ;; insert gossip data
+ (when (autocrypt-gossip-p recs)
+ (let ((payload (generate-new-buffer " *autocrypt gossip*")))
+ (with-current-buffer payload
+ (dolist (addr (autocrypt-list-recipients))
+ (let ((header (autocrypt-generate-header addr t)))
+ (insert "Autocrypt-Gossip: " header "\n"))))
+ (autocrypt-mua-call :secure-attach payload)))
+ ;; insert autocrypt header
+ (let ((header (and from (autocrypt-generate-header from))))
+ (when header
+ (autocrypt-mua-call :add-header "Autocrypt" header)))))
+
(defun autocrypt-create-account ()
"Create a GPG key for Autocrypt."
(interactive)
- [elpa] externals/autocrypt 73764377c5 43/94: Fix autocrypt-message, (continued)
- [elpa] externals/autocrypt 73764377c5 43/94: Fix autocrypt-message, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 82b9a9eaa2 44/94: Fix autocrypt-mu4e, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt c1ce4d7446 53/94: Use eql specializers instead of derived-mode specializers, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 5c7f4cfabf 58/94: Update headers, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 75a0b62adb 64/94: Rename autocrypt-message--encrypted-p, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 1444f1861f 83/94: Remember to remove hook as modified in dd400cb, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt cf63019b3f 89/94: Add a 'get-part' implementation for Gnus, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt a90aa6b644 94/94: Bump version to 0.4.1 for GNU ELPA, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt a3e77512f1 04/94: added .dir-locals.el, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 6071d0a971 11/94: added missing require statements, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt cb40022cba 23/94: refactored message specific code into autocrypt-compose-* functions,
ELPA Syncer <=
- [elpa] externals/autocrypt d771406544 28/94: Recognize mu4e modes in `autocrypt-get-mua', ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 926b88e371 33/94: Use setup in README instead of use-package, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 56b7eea585 34/94: Use cl-generic to implement MUA specific code, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt c9d7c13f0d 36/94: Translate mu4e implementation to methods, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 9add1cc9b1 38/94: Autoload autocrypt-install for mu4e, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 211cb302dc 41/94: Add autocrypt-load-system, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 94bfdd049f 42/94: Fix autocrypt-gnus, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt ca711395c7 47/94: Add note explaining eql-specializiers for rmail-mode, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 37e14c3b92 60/94: Handle autocrypt-do-gossip as advertised, ELPA Syncer, 2023/03/26
- [elpa] externals/autocrypt 49f4a1a09e 62/94: Update README section on extending autocrypt.el, ELPA Syncer, 2023/03/26