mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-21 06:55:39 +00:00
Split out the attribute retrieval form auth-source-pass-get
Eliminate the need to repeatedly retrieve and parse the data for the entry. This is generally a good thing since it eliminates repetitions of the same crypto and parsing operations. It is especially valuable when protecting an entry with a yubikey with touch required for crypto operations as it eliminates the need to touch the yubikey sensor for each attribute retrieved. * lisp/auth-source-pass.el (auth-source-pass-get): Extract some code to `auth-source-pass--get-attr'. (auth-source-pass--get-attr): New function to get a field value from a parsed entry. (auth-source-pass--build-result): Make use of `auth-source-pass--get-attr` to avoid repeated parsing.
This commit is contained in:
parent
94c9eb81b8
commit
57e763a0a0
@ -79,11 +79,12 @@ See `auth-source-search' for details on SPEC."
|
||||
"Build auth-source-pass entry matching HOST, PORT and USER."
|
||||
(let ((entry (auth-source-pass--find-match host user port)))
|
||||
(when entry
|
||||
(let ((retval (list
|
||||
:host host
|
||||
:port (or (auth-source-pass-get "port" entry) port)
|
||||
:user (or (auth-source-pass-get "user" entry) user)
|
||||
:secret (lambda () (auth-source-pass-get 'secret entry)))))
|
||||
(let* ((entry-data (auth-source-pass-parse-entry entry))
|
||||
(retval (list
|
||||
:host host
|
||||
:port (or (auth-source-pass--get-attr "port" entry-data) port)
|
||||
:user (or (auth-source-pass--get-attr "user" entry-data) user)
|
||||
:secret (lambda () (auth-source-pass--get-attr 'secret entry-data)))))
|
||||
(auth-source-pass--do-debug "return %s as final result (plus hidden password)"
|
||||
(seq-subseq retval 0 -2)) ;; remove password
|
||||
retval))))
|
||||
@ -128,9 +129,18 @@ secret
|
||||
key1: value1
|
||||
key2: value2"
|
||||
(let ((data (auth-source-pass-parse-entry entry)))
|
||||
(or (cdr (assoc key data))
|
||||
(and (string= key "user")
|
||||
(cdr (assoc "username" data))))))
|
||||
(auth-source-pass--get-attr key data)))
|
||||
|
||||
(defun auth-source-pass--get-attr (key entry-data)
|
||||
"Return value associated with KEY in an ENTRY-DATA.
|
||||
|
||||
ENTRY-DATA is the data from a parsed password-store entry.
|
||||
The key used to retrieve the password is the symbol `secret'.
|
||||
|
||||
See `auth-source-pass-get'."
|
||||
(or (cdr (assoc key entry-data))
|
||||
(and (string= key "user")
|
||||
(cdr (assoc "username" entry-data)))))
|
||||
|
||||
(defun auth-source-pass--read-entry (entry)
|
||||
"Return a string with the file content of ENTRY."
|
||||
|
Loading…
Reference in New Issue
Block a user