Command line and GUI interface to pass, the Unix password manager.
MANAGE_EXTERNAL_STORAGE (needed to read the store at /storage/emulated/0/...) cannot be requested with a runtime permission dialog; the user must toggle it in system settings. Port the mechanism from the pad app: - Permissions.java: a Fragment registered at window attach that launches Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION (per-app settings screen) when Environment.isExternalStorageManager() is false on API 30+ (runtime READ_EXTERNAL_STORAGE request on older APIs). The guard means the screen appears only until the user grants it. - The compiled classes ship in PgpConnect.jar's directory jar (Permissions.jar); gogio picks *.jar up from the package dir and dexes them. go:generate now rebuilds it. - jni_android.c/h: registerPermissionsFragment(), mirroring registerFragment() for PgpConnect. - Impl wiring: call it from the AndroidViewEvent handler right after InitPgp. Verified on the x86_64 emulator: with the appop denied the system settings screen opens automatically on launch; after granting it, launch is clean and list + OpenKeychain decryption from /sdcard/Pass work end to end. |
||
|---|---|---|
| cmd | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| impl_android.go | ||
| impl_darwin.go | ||
| impl_linux.go | ||
| impl_shared.go | ||
| jni_android.c | ||
| jni_android.go | ||
| jni_android.h | ||
| main.go | ||
| openpgp-api.jar | ||
| Permissions.jar | ||
| Permissions.java | ||
| PgpConnect.jar | ||
| PgpConnect.java | ||
| README.md | ||
passgo
This repository includes Go code to interact with pass, the Unix password
manager. Library code is provided to open a password store, list
saved passwords, and decrypt specified passwords. The library provides
a simple passphrase input function, or, if gpg-agent is running (on MacOS),
it will connect automatically to request your GPG passphrase. On Android,
passgo connects to OpenKeychain. MacOS and Android users can also ask passgo
to copy a password directly to the clipboard.
store := passgo.Store{}
// directory defaults to ~/.password-store, or set it manually here:
// store.Dir = "/home/me/.pw-store"
err := passgo.GetStore(&store)
if err != nil { ... }
passlist := store.List()
for _,x := range passlist {
if x.Pathname == "myPass" {
p, err := store.Decrypt(x.Pathname)
if err == nil {
passgo.Clip(p) // put on the clipboard
} else {
log.Fatal("Cannot decrypt ", x.Pathname)
}
}
}
/// or just do:
p, err := store.Decrypt("myPass")
...
Also included is a simple GUI front-end using Gio
that works on MacOS and Android. See cmd/passgo-gui.