gopass-jsonapi icon indicating copy to clipboard operation
gopass-jsonapi copied to clipboard

Fails to create new entries

Open innovate-invent opened this issue 7 months ago • 2 comments

Summary

gopass-jsonapi fails to create new entries. This is caused by no recipients being selected: https://github.com/gopasspw/gopass/blob/77cc13955e85a70b9f9a3dd50e066703cd761695/internal/store/leaf/write.go#L28C2-L34

--recipients is not being appended when calling /usr/bin/gpg --quiet --yes --compress-algo=none --no-encrypt-to --no-auto-check-trustdb --encrypt. I assume because the list is empty here: https://github.com/gopasspw/gopass/blob/master/internal/backend/crypto/gpg/cli/encrypt.go#L37

I am lost in the code past this point.

Steps To Reproduce

$ echo -ne '\x70\x00\x00\x00{"type":"create","entry_name":"test","login":"foo","password":"","length":24,"generate":true,"use_symbols":true}' | GPG_TTY=/dev/pts/0 GOPASS_DEBUG=1 gopass-jsonapi listen; stty echo
You did not specify a user ID. (you may use "-r")

Current recipients:

Enter the user ID.  End with an empty line: 

Expected behavior

Should successfully create an entry with the owner as a recipient.

Environment

  • OS: Linux Mint
  • OS version: 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • gopass-jsonapi Version: gopass-jsonapi version 1.15.11
  • Installation method: apt get install gopass-jsonapi

Git based GPG store.

Additional context

I can create / manage passwords with the gopass cli without issue.

$ cat .config/gopass/config 
[mounts]
	path = /home/nolan/.local/share/gopass/stores/root
[recipients]
	hash = 6c99eaa0ef0baee84c02c63cbce57a4764235be7be4cf6b5913499daeac4d1ab
	check = false

$ cat /home/nolan/.local/share/gopass/stores/root/.gpg-id 
0x6B26A21B58632C38

$ /usr/bin/gpg --with-colons --with-fingerprint --fixed-list-mode --list-public-keys 0x6B26A21B58632C38
tru::1:1690753575:0:3:1:5
pub:-:4096:1:6B26A21B58632C38:1690751449:::-:::scESCA::::::23:1690753800:5 http\x3a//keyserver.ubuntu.com/pks/lookup?op=get&search=0x421d842cba8ffd18152321b66b26a21b58632c38:
fpr:::::::::421D842CBA8FFD18152321B66B26A21B58632C38:
uid:-::::1690751449::080083D9CCD9124D20233109B719F98D15AAC5A7::Nolan Woods <[email protected]>:::::::::1690753800:5:
sub:-:4096:1:D6B842FAF9035B0C:1690751666::::::a::::::23:
fpr:::::::::D6CE130A97ED72307853003AD6B842FAF9035B0C:
sub:-:4096:1:F7A39355C1D08046:1690751449::::::e::::::23:
fpr:::::::::F92D3B3F6221A8BEE54606EBF7A39355C1D08046:

Log (click to expand)
2023/12/20 22:43:42.259840 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config]
2023/12/20 22:43:42.259885 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.259892 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir:  - Env: GOPASS_CONFIG - System: /etc/gopass/config - Global:  - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.259899 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load system config: open /etc/gopass/config: no such file or directory
2023/12/20 22:43:42.259902 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config]
2023/12/20 22:43:42.259909 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.259912 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir: /home/nolan/.local/share/gopass/stores/root - Env: GOPASS_CONFIG - System: /etc/gopass/config - Global:  - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.259916 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load system config: open /etc/gopass/config: no such file or directory
2023/12/20 22:43:42.259919 gitconfig/configs.go:151	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] reloading existing global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.259929 gitconfig/configs.go:99	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load local config from /home/nolan/.local/share/gopass/stores/root/config: open /home/nolan/.local/share/gopass/stores/root/config: no such file or directory
2023/12/20 22:43:42.259933 gitconfig/configs.go:114	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load worktree config from /home/nolan/.local/share/gopass/stores/root/config.worktree: open /home/nolan/.local/share/gopass/stores/root/config.worktree: no such file or directory
2023/12/20 22:43:42.259941 config/config.go:320	config.(*Config).migrateOptions	migrateOptions running
2023/12/20 22:43:42.259944 gitconfig/configs.go:256	gitconfig.(*Configs).GetGlobal	[GOPASS_CONFIG] no value for core.showsafecontent found
2023/12/20 22:43:42.259946 gitconfig/configs.go:271	gitconfig.(*Configs).GetLocal	[GOPASS_CONFIG] no value for core.showsafecontent found
2023/12/20 22:43:42.259955 gitconfig/configs.go:256	gitconfig.(*Configs).GetGlobal	[GOPASS_CONFIG] no value for core.autoclip found
2023/12/20 22:43:42.259962 gitconfig/configs.go:271	gitconfig.(*Configs).GetLocal	[GOPASS_CONFIG] no value for core.autoclip found
2023/12/20 22:43:42.259965 gitconfig/configs.go:256	gitconfig.(*Configs).GetGlobal	[GOPASS_CONFIG] no value for core.showautoclip found
2023/12/20 22:43:42.259968 gitconfig/configs.go:271	gitconfig.(*Configs).GetLocal	[GOPASS_CONFIG] no value for core.showautoclip found
2023/12/20 22:43:42.259976 root/store.go:35	root.New	created store Store(Path: , Mounts: )
2023/12/20 22:43:42.259982 root/init.go:18	root.(*Store).IsInitialized	initializing store and possible sub-stores
2023/12/20 22:43:42.259985 root/init.go:80	root.(*Store).initialize	initialize - /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.259989 leaf/store.go:52	leaf.New	Instantiating "" at "/home/nolan/.local/share/gopass/stores/root"
2023/12/20 22:43:42.260001 backend/storage.go:80	backend.DetectStorage	Trying gitfs for /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.260007 fsutil/fsutil.go:36	fsutil.ExpandHomedir	No tilde found in /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.260015 backend/storage.go:86	backend.DetectStorage	Using detected gitfs for /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.260018 fsutil/fsutil.go:36	fsutil.ExpandHomedir	No tilde found in /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.260026 fsutil/fsutil.go:36	fsutil.ExpandHomedir	No tilde found in /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.260028 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir: /home/nolan/.local/share/gopass/stores/root/.git - Env: GIT_CONFIG - System: /etc/gitconfig - Global: .gitconfig - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.260032 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GIT_CONFIG] failed to load system config: open /etc/gitconfig: no such file or directory
2023/12/20 22:43:42.260035 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GIT_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config /home/nolan/.gitconfig]
2023/12/20 22:43:42.260042 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GIT_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.260055 gitconfig/configs.go:103	gitconfig.(*Configs).LoadAll	[GIT_CONFIG] loaded local config from /home/nolan/.local/share/gopass/stores/root/.git/config
2023/12/20 22:43:42.260060 gitconfig/configs.go:114	gitconfig.(*Configs).LoadAll	[GIT_CONFIG] failed to load worktree config from /home/nolan/.local/share/gopass/stores/root/.git/config.worktree: open /home/nolan/.local/share/gopass/stores/root/.git/config.worktree: no such file or directory
2023/12/20 22:43:42.260063 leaf/store.go:64	leaf.New	Storage for  => /home/nolan/.local/share/gopass/stores/root initialized as gitfs(2.34.1,path:/home/nolan/.local/share/gopass/stores/root)
2023/12/20 22:43:42.260845 backend/crypto.go:80	backend.DetectCrypto	Trying gpgcli for gitfs(2.34.1,path:/home/nolan/.local/share/gopass/stores/root)
2023/12/20 22:43:42.261589 fs/store.go:154	fs.(*Store).Exists	Checking if '.gpg-id' exists at /home/nolan/.local/share/gopass/stores/root/.gpg-id: true
2023/12/20 22:43:42.261595 backend/crypto.go:86	backend.DetectCrypto	Using gpgcli for gitfs(2.34.1,path:/home/nolan/.local/share/gopass/stores/root)
2023/12/20 22:43:42.262191 cli/loader.go:26	cli.loader.New	Using Crypto Backend: gpgcli
2023/12/20 22:43:42.262200 cli/gpg.go:62	cli.New	failed to read GPG config: open /home/nolan/.gnupg/gpg.conf: no such file or directory
2023/12/20 22:43:42.262717 gpgconf/binary_others.go:29	gpgconf.detectBinary	gpgconf returned "/usr/bin/gpg" for gpg
2023/12/20 22:43:42.262725 cli/gpg.go:84	cli.New	binary detected as /usr/bin/gpg
2023/12/20 22:43:42.262731 leaf/store.go:71	leaf.New	Crypto for  => /home/nolan/.local/share/gopass/stores/root initialized as &{/usr/bin/gpg [--quiet --yes --compress-algo=none --no-encrypt-to --no-auto-check-trustdb] [] [] 0xc000302360 false}
2023/12/20 22:43:42.262741 root/init.go:87	root.(*Store).initialize	Root Store initialized at /home/nolan/.local/share/gopass/stores/root
2023/12/20 22:43:42.262747 root/init.go:25	root.(*Store).IsInitialized	root store is initialized
2023/12/20 22:43:42.262752 fs/store.go:154	fs.(*Store).Exists	Checking if '.gpg-id' exists at /home/nolan/.local/share/gopass/stores/root/.gpg-id: true
2023/12/20 22:43:42.262756 leaf/init.go:20	leaf.(*Store).IsInitialized	store "/home/nolan/.local/share/gopass/stores/root" is initialized: true
2023/12/20 22:43:42.262822 fs/store.go:44	fs.(*Store).Get	Reading test.gpg from /home/nolan/.local/share/gopass/stores/root/test.gpg
2023/12/20 22:43:42.262828 leaf/read.go:21	leaf.(*Store).Get	File test.gpg not found: open /home/nolan/.local/share/gopass/stores/root/test.gpg: no such file or directory
2023/12/20 22:43:42.262850 secrets/akv.go:333	secrets.newScanner	Using buffer of len 0 and max 0
2023/12/20 22:43:42.262855 config/context.go:36	config.FromContext	no config in context, loading anew
2023/12/20 22:43:42.262859 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir:  - Env: GOPASS_CONFIG - System: /etc/gopass/config - Global:  - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.262864 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load system config: open /etc/gopass/config: no such file or directory
2023/12/20 22:43:42.262867 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config]
2023/12/20 22:43:42.262880 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.262884 gitconfig/configs.go:217	gitconfig.(*Configs).Get	[GOPASS_CONFIG] no value for core.readonly found
2023/12/20 22:43:42.262889 fs/store.go:154	fs.(*Store).Exists	Checking if 'test/.gpg-id' exists at /home/nolan/.local/share/gopass/stores/root/test/.gpg-id: false
2023/12/20 22:43:42.262892 fs/store.go:154	fs.(*Store).Exists	Checking if '.gpg-id' exists at /home/nolan/.local/share/gopass/stores/root/.gpg-id: true
2023/12/20 22:43:42.262895 fs/store.go:44	fs.(*Store).Get	Reading .gpg-id from /home/nolan/.local/share/gopass/stores/root/.gpg-id
2023/12/20 22:43:42.262904 config/context.go:36	config.FromContext	no config in context, loading anew
2023/12/20 22:43:42.262907 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir:  - Env: GOPASS_CONFIG - System: /etc/gopass/config - Global:  - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.262910 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load system config: open /etc/gopass/config: no such file or directory
2023/12/20 22:43:42.262913 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config]
2023/12/20 22:43:42.262920 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.262924 fs/store.go:44	fs.(*Store).Get	Reading .gpg-id from /home/nolan/.local/share/gopass/stores/root/.gpg-id
2023/12/20 22:43:42.262929 config/context.go:36	config.FromContext	no config in context, loading anew
2023/12/20 22:43:42.262932 gitconfig/configs.go:72	gitconfig.(*Configs).LoadAll	Loading gitconfigs for GitConfigs{Workdir:  - Env: GOPASS_CONFIG - System: /etc/gopass/config - Global:  - Local: config - Worktree: config.worktree}
2023/12/20 22:43:42.262935 gitconfig/configs.go:78	gitconfig.(*Configs).LoadAll	[GOPASS_CONFIG] failed to load system config: open /etc/gopass/config: no such file or directory
2023/12/20 22:43:42.262938 gitconfig/configs.go:163	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] trying to find global configs in [/home/nolan/.config/gopass/config]
2023/12/20 22:43:42.262944 gitconfig/configs.go:177	gitconfig.(*Configs).loadGlobalConfigs	[GOPASS_CONFIG] loaded global config from /home/nolan/.config/gopass/config
2023/12/20 22:43:42.262957 cli/keyring.go:35	cli.(*GPG).listKeys	/usr/bin/gpg [/usr/bin/gpg --with-colons --with-fingerprint --fixed-list-mode --list-secret-keys 0x6B26A21B58632C38]
2023/12/20 22:43:42.264500 cli/keyring.go:35	cli.(*GPG).listKeys	/usr/bin/gpg [/usr/bin/gpg --with-colons --with-fingerprint --fixed-list-mode --list-public-keys 0x6B26A21B58632C38]
2023/12/20 22:43:42.265546 cli/encrypt.go:48	cli.(*GPG).Encrypt	/usr/bin/gpg [/usr/bin/gpg --quiet --yes --compress-algo=none --no-encrypt-to --no-auto-check-trustdb --encrypt]
2023/12/20 22:43:43.683843 leaf/write.go:38	leaf.(*Store).Set	Failed encrypt secret: signal: interrupt

innovate-invent avatar Dec 21 '23 06:12 innovate-invent

There is a potential pitfall: key trust.

For historical reasons the gopass CLI defaults to always trust while the integrations do not. This should only matter during encryption and I don't think many users are actually using the jsonapi to create secrets. So you might be the first one to hit this issue.

See https://github.com/gopasspw/gopass/blob/master/main.go#L299

I'll add some more logging into so this becomes clearer from the logs, but to fix the issue you should make sure you properly trust your own keys.

dominikschulz avatar Dec 21 '23 18:12 dominikschulz

(bash) One-liner fix for anyone having this issue:

gpg --command-fd 0 --edit-key "$(<$(gopass config mounts.path)/.gpg-id)"  <<<$'trust\n5\ny\nq\n'

innovate-invent avatar Dec 21 '23 19:12 innovate-invent