scripts/build.sh (documented in README) builds, manifest-patches ( MANAGE_EXTERNAL_STORAGE ), signs and installs the APK in one go. Without the permission the system 'All files access' toggle is grayed out on Android 11+. GUI fix: the event loop only checks the 'updated' channel when it is not blocked in w.Event(), and gioui only emits frames on invalidation or user input, so the initial list load was never drawn until a tap. The updater now signals non-blocking and invalidates the window itself; the animation ticker gets the same wake-up treatment.
63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# 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.
|
|
|
|
```go
|
|
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](https://gioui.org)
|
|
that works on MacOS and Android. See `cmd/passgo-gui`.
|
|
|
|
## Building the Android APK
|
|
|
|
Use `scripts/build.sh` — do not build by hand:
|
|
|
|
```sh
|
|
./scripts/build.sh phone # build + install on the phone
|
|
./scripts/build.sh phone --no-install
|
|
./scripts/build.sh emu # emulator build (amd64)
|
|
```
|
|
|
|
It outputs `cmd/passgo-gui/passgo-gui.apk` (APKs are git-ignored and
|
|
regenerated by the script). The script, in order:
|
|
|
|
1. `gogio -target android -targetsdk 34` (from `~/go/bin`; packages the
|
|
Go code plus the `*.jar` JNI classes found in `cmd/passgo-gui/`),
|
|
2. apktool decode → inject `MANAGE_EXTERNAL_STORAGE` into the manifest
|
|
(gogio's hardcoded permission table lacks it, and without it the
|
|
system "All files access" toggle is grayed out on Android 11+) →
|
|
apktool rebuild,
|
|
3. sign with the debug keystore (`~/.android/debug.keystore`),
|
|
4. `adb install -r`.
|
|
|
|
Prereqs: JDK, Go + gogio, Android SDK at `~/android-sdk`
|
|
(platform-tools + build-tools 35.0.0). apktool v3.0.3 is auto-downloaded
|
|
to `~/android-sdk/tools/apktool.jar` if missing. The script checks each
|
|
prereq and says what is missing. The phone is reached via adb over the
|
|
WireGuard address (see the global AGENTS.md).
|