diff options
author | Fredrik Salomonsson <plattfot@gmail.com> | 2020-05-04 11:33:46 -0700 |
---|---|---|
committer | Fredrik Salomonsson <plattfot@gmail.com> | 2020-05-04 12:05:47 -0700 |
commit | 49a4253cf3cfb13dd5349eaa28fd8457389c43a5 (patch) | |
tree | 8b906eecb586589b79863f22aab26ee11d873482 /pinentry-rofi.scm | |
parent | 2f5e77e8549feeca3c141398c0b9822a327c5fd5 (diff) | |
download | pinentry-rofi-49a4253cf3cfb13dd5349eaa28fd8457389c43a5.tar.gz |
Added support for MESSAGE and CONFIRM --one-button (#6)
More digging in the protocol, it can also use CONFIRM with one button
aka MESSAGE, to show message to the user.
Diffstat (limited to 'pinentry-rofi.scm')
-rwxr-xr-x | pinentry-rofi.scm | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/pinentry-rofi.scm b/pinentry-rofi.scm index 932950f..630377a 100755 --- a/pinentry-rofi.scm +++ b/pinentry-rofi.scm @@ -217,9 +217,13 @@ touch-file=/run/user/1000/gnupg/S.gpg-agent" regex-match)) (define (pinentry-confirm pinentry line) - (let ((getpin-re (make-regexp "^CONFIRM$")) + (let ((confirm-re (make-regexp "^CONFIRM$")) + (confirm-one-button-re + (make-regexp "^CONFIRM[[:blank:]]+--one-button[[:blank:]]*$")) + (message-re (make-regexp "^MESSAGE$")) (regex-match #f)) - (when (set-and-return! regex-match (regexp-exec getpin-re line)) + (cond + ((set-and-return! regex-match (regexp-exec confirm-re line)) ;; Can probably do this with a pipe in both direction, but ;; manual warns about deadlocks so sticking with this for now. (let* ((pipe (open-pipe @@ -251,6 +255,23 @@ touch-file=/run/user/1000/gnupg/S.gpg-agent" (format #t "ERR 277 Operation cancelled\n") (force-output) (set-pinentry-ok! pinentry #f))))) + ((or (set-and-return! regex-match (regexp-exec confirm-one-button-re line)) + (set-and-return! regex-match (regexp-exec message-re line))) + (let ((pipe (open-pipe + (string-join + `("echo -e " + ,(format #f "'~a'" (pinentry-ok-button pinentry)) + "|" + ,(format #f "env DISPLAY=~a" (pinentry-display pinentry)) + "rofi -dmenu -disable-history -only-match -l 1 -i" + ,(format #f "-p '>'") + ,(format #f "-mesg ~s" (if (pinentry-error pinentry) + (format #f "~a\n~a" + (pinentry-error pinentry) + (pinentry-desc pinentry)) + (pinentry-desc pinentry))))) + OPEN_READ))) + (close-pipe pipe)))) regex-match)) (define (pinentry-bye pinentry line) |