diff options
author | Keith Amidon <camalot@picnicpark.org> | 2019-04-30 07:52:14 -0700 |
---|---|---|
committer | Damien Cassou <damien@cassou.me> | 2019-06-24 09:15:40 +0200 |
commit | 57e763a0a057621daac2761084556df38f7f2373 (patch) | |
tree | 78b40640685c7144cf96fa3505c5fdd45fdfd025 /lisp/auth-source-pass.el | |
parent | 94c9eb81b8b265380345c36c0a481d9022435d89 (diff) | |
download | emacs-57e763a0a057621daac2761084556df38f7f2373.tar.gz |
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.
Diffstat (limited to 'lisp/auth-source-pass.el')
-rw-r--r-- | lisp/auth-source-pass.el | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/lisp/auth-source-pass.el b/lisp/auth-source-pass.el index 4aa0853be94..a0b0841e1f6 100644 --- a/lisp/auth-source-pass.el +++ b/lisp/auth-source-pass.el @@ -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." |