nyxt icon indicating copy to clipboard operation
nyxt copied to clipboard

`save-new-password` does not connect to password interface

Open logoraz opened this issue 1 year ago • 2 comments

Describe the bug Executing save-new-password, before any other password interface command, does not connect to password interface.

  • would expect it to work similarly to copy-username or copy-password
  • only trialed with KeepassXC

Precise recipe to reproduce the issue

  • Execute save-new-password in Nyxt via M-x save-new-password, prior to executing any other password interface command:
    • Does not prompt for KeepassXC db password, only prompts for:
      • "Name for new password", "New password...", and "Username..."
      • Then fails with follwoing output:
WARN - Warning: Error on separate thread: Subprocess #<UIOP/LAUNCH-PROGRAM::PROCESS-INFO {1009C01963}>
with command ("/usr/bin/keepassxc-cli" "add" "--username" "test222"
              "--password-prompt" "/home/logoraz/Documents/moses/p.kdbx" "-k"
              "/home/logoraz/Documents/moses/pkf" "Test222")
exited with error code 1

Information

  • OS name+version: Fedora 40 (Workstation)
  • Graphics card and driver: Intel® HD Graphics 520 (SKL GT2)
  • Desktop environment / Window manager name+version: Wayland/Gnome 46
  • Installation method (Flatpak, Guix, package manager, build from source): Build from source
    • flatpak installation method currently doesn't support password interface (see: #3213)
  • Output of nyxt --system-information:
Nyxt version: 4
Renderer: GI-GTK
Operating system kernel: Linux 6.9.7-200.fc40.x86_64
Lisp implementation: SBCL 2.3.11-2.fc40 (Dynamic space size: 3221225472)
Features: (:NYXT-GI-GTK :NYXT-GTK :WEBKIT2 :WEBKIT-2.44.2 :WEBKIT-2.44 :WEBKIT-2
 :WEBKIT2-CORS-ALLOWLIST :WEBKIT2-PASTE-PLAINTEXT :WEBKIT2-TRACKING
 :WEBKIT2-MUTE :WEBKIT2-EMOJI :WEBKIT2-MEDIA :WEBKIT2-SANDBOXING :GTK-3-22
 :GTK-3-20 :GTK-3-18 :GTK-3-16 :GTK-3-14 :GTK-3-12 :GTK-3-10 :GTK-3-8 :GTK-3-6
 :GTK-3-4 :GTK :GDK-3-22 :GDK-3-20 :GDK-3-18 :GDK-3-16 :GDK-3-14 :GDK-3-12
 :GDK-3-10 :GDK-3-8 :GDK-3-6 :GDK-3-4 :CAIRO-1-10 :CAIRO-1-12 :GDK-PIXBUF
 :GLIB-2-30 :GLIB-2-32 :GLIB-2-34 :GLIB-2-36 :GLIB-2-38 :GLIB-2-40 :GLIB-2-42
 :GLIB-2-44 :GLIB-2-46 :GLIB-2-48 :GLIB-2-50 :GLIB-2-52 :GLIB-2-54 :GLIB-2-56
 :GLIB-2-58 :GLIB :NYXT-4 :CLIPBOARD-CONTENT-METHOD :SWANK :SLYNK :PLUMP-UTF-32
 :PARENSCRIPT :NSYMBOLS :FSET-EXT-STRINGS :SBCL+SAFE-STANDARD-READTABLE
 :NAMED-READTABLES :GLOBAL-VARS :LPARALLEL :21BIT-CHARS
 :CUSTOM-HASH-TABLE-NATIVE :CLOSER-MOP :CL-PPCRE-UNICODE :CL-UNICODE :CHUNGA
 :FLEXI-STREAMS :CL-PPCRE :BORDEAUX-THREADS :LPARALLEL.WITH-CLTL2
 :LPARALLEL.WITH-CAS :LPARALLEL.WITH-STEALING-SCHEDULER :SPLIT-SEQUENCE
 CFFI-FEATURES:FLAT-NAMESPACE CFFI-FEATURES:X86-64 CFFI-FEATURES:UNIX :CFFI
 CFFI-SYS::FLAT-NAMESPACE ALEXANDRIA::SEQUENCE-EMPTYP :FAST-IO-SV :FAST-IO
 :CL-JSON-CLOS :CL-JSON :SBCL-USES-SB-ROTATE-BYTE CHIPZ-SYSTEM:GRAY-STREAMS
 :THREAD-SUPPORT :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-UNIX
 :NON-BASE-CHARS-EXIST-P :ASDF-UNICODE :ARENA-ALLOCATOR :X86-64 :GENCGC :64-BIT
 :ANSI-CL :COMMON-LISP :ELF :IEEE-FLOATING-POINT :LINUX :LITTLE-ENDIAN
 :PACKAGE-LOCAL-NICKNAMES :SB-CORE-COMPRESSION :SB-LDB :SB-PACKAGE-LOCKS
 :SB-THREAD :SB-UNICODE :SBCL :UNIX)

ASDF version: 3.3.1
ASDF registries: (NYXT-SOURCE-REGISTRY ENVIRONMENT-SOURCE-REGISTRY USER-SOURCE-REGISTRY
                      USER-SOURCE-REGISTRY-DIRECTORY
                      DEFAULT-USER-SOURCE-REGISTRY SYSTEM-SOURCE-REGISTRY
                      SYSTEM-SOURCE-REGISTRY-DIRECTORY
                      DEFAULT-SYSTEM-SOURCE-REGISTRY)
Critical dependencies: (/home/logoraz/common-lisp/nyxt/_build/cl-cffi-gtk/gtk/cl-cffi-gtk.asd
 /home/logoraz/common-lisp/nyxt/_build/cl-gobject-introspection/cl-gobject-introspection.asd
 /home/logoraz/common-lisp/nyxt/_build/cl-webkit/webkit2/cl-webkit2.asd)

Output when started from a shell

Nyxt version 4
<INFO> [19:50:54] Source location: #P"/home/logoraz/common-lisp/nyxt/"
<INFO> [19:50:55] Loading Lisp file #P"/home/logoraz/.config/nyxt/config.lisp".
; compiling file "/home/logoraz/.config/nyxt/theme.lisp" (written 07 JUL 2024 09:56:55 PM):

; wrote /home/logoraz/.cache/common-lisp/sbcl-2.3.11-2.fc40-linux-x64/home/logoraz/.config/nyxt/theme-tmp9L7RCIOO.fasl
; compilation finished in 0:00:00.032
; compiling file "/home/logoraz/.config/nyxt/passwords.lisp" (written 08 JUL 2024 07:03:39 PM):

; wrote /home/logoraz/.cache/common-lisp/sbcl-2.3.11-2.fc40-linux-x64/home/logoraz/.config/nyxt/passwords-tmpE19DJRZJ.fasl
; compilation finished in 0:00:00.010
; compiling file "/home/logoraz/.config/nyxt/utilities.lisp" (written 07 JUL 2024 09:56:55 PM):

; wrote /home/logoraz/.cache/common-lisp/sbcl-2.3.11-2.fc40-linux-x64/home/logoraz/.config/nyxt/utilities-tmp6J73PGHY.fasl
; compilation finished in 0:00:00.001
<INFO> [19:50:55] Listening to socket: #P"/run/user/1000/nyxt/nyxt.socket"

(nyxt:32035): Gtk-CRITICAL **: 19:50:55.513: gtk_box_pack: assertion '_gtk_widget_get_parent (child) == NULL' failed
<INFO> [19:50:56] Not restoring session.
<INFO> [19:50:56] Loading #P"/home/logoraz/.local/share/nyxt/history/default.lisp".
<WARN> [19:50:56] History major version 3 differs from current major version 4
<INFO> [19:50:56] Loading #P"/home/logoraz/.local/share/nyxt/auto-rules.lisp".

Possible Solution

  • add (with-password (password-interface buffer) ... to save-new-password command:
    • Trialed and seemed to resolve issue
(define-command save-new-password (&optional (buffer (current-buffer)))
  "Save password to password interface."
  (password-debug-info)
  (cond
    ((and (password-interface buffer)
          (nyxt:has-method-p (password-interface (find-submode 'password-mode buffer))
                             #'password:save-password))
     ;; add `with-password` macro to invoke password-interface, similar to `copy-username` and `copy-password`
     (with-password (password-interface buffer)
       (let* ((password-name (prompt1
                              :prompt "Name for new password"
                              :input (or (quri:uri-domain (url (current-buffer))) "")
                              :sources 'prompter:raw-source))
              (new-password (prompt1
                             :prompt "New password (leave empty to generate)"
                             :invisible-input-p t
                             :sources 'prompter:raw-source))
              (username (prompt1
                         :prompt "Username (can be empty)"
                         :sources 'prompter:raw-source)))
         (password:save-password (password-interface buffer)
                                 :username username
                                 :password-name password-name
                                 :password new-password))))
    ((null (password-interface buffer))
     (echo-warning "No password manager found."))
    (t (echo-warning "Password manager ~s does not support saving passwords."
                     (string-downcase
                      (class-name (class-of (password-interface buffer))))))))

logoraz avatar Jul 09 '24 03:07 logoraz

@jmercouris do you use keepassxc? Can you reproduce?

aadcg avatar Jul 10 '24 07:07 aadcg

I do not use keepassxc, nor can I reproduce.

jmercouris avatar Jul 15 '24 16:07 jmercouris