.idea | ||
.gitignore | ||
.ref | ||
collection_funcs.go | ||
consts.go | ||
doc.go | ||
errs.go | ||
funcs.go | ||
go.mod | ||
go.sum | ||
item_funcs.go | ||
LICENSE | ||
multierr_funcs.go | ||
prompt_funcs.go | ||
README.adoc | ||
secret_funcs.go | ||
secretvalue_funcs.go | ||
service_funcs.go | ||
session_funcs.go | ||
sserror_funcs.go | ||
TODO | ||
types.go |
libsecret/gosecret
This project is originally forked from go-libsecret due to:
-
Lack of response from the developer
-
Complete lack of documentation
-
Poor, ineffecient, or just plain antipattern design
-
Missing functionality
and as such, hopefully this library should serve as a more effective libsecret/SecretService interface.
1. Backwards Compatability/Drop-In Replacement Support
Version series v0.X.X
of this library promises full and non-breaking backwards support of API interaction with the original project. The only changes should be internal optimizations, adding documentation, some file reorganizing, adding Golang module support, etc. — all transparent from the library API itself.
To use this library as a replacement without significantly modifying your code, you can simply use a replace
directive:
// ...
replace (
github.com/gsterjov/go-libsecret dev => r00t2.io/gosecret v0
)
and then run go mod tidy
.
2. New Developer API
Starting from v1.0.0
onwards, entirely breaking changes can be assumed from the original project.
To use the new version,
import (
`r00t2.io/gosecret/v1`
)
To reflect the absolute breaking changes, the module name changes as well from libsecret
to gosecret
.
2.1. Status
The new API is underway, and all functionality in V0 is present. However, it’s not "complete". PRs welcome, of course, but this will be an ongoing effort for a bit of time.
3. SecretService Concepts
For reference:
-
A
Service
allows one to retrieve and operate on/withSession
andCollection
objects. -
A
Session
allows one to operate on/withItem
objects (e.g. parsing/decoding/decrypting them). -
A
Collection
allows one to retrieve and operate on/withItem
objects. -
An
Item
allows one to retrieve and operate on/withSecret
objects.
(Secrets
are considered "terminating objects" in this model, and contain
actual secret value(s) and metadata).
Various interactions are handled by Prompts
.
So the object hierarchy in theory looks kind of like this:
Service ├─ Session "A" ├─ Session "B" ├─ Collection "A" │ ├─ Item "A.1" │ │ ├─ Secret "A_1_a" │ │ └─ Secret "A_1_b" │ └─ Item "A.2" │ ├─ Secret "A_2_a" │ └─ Secret "A_2_b" └─ Collection "B" ├─ Item "B.1" │ ├─ Secret "B_1_a" │ └─ Secret "B_1_b" └─ Item "B.2" ├─ Secret "B_2_a" └─ Secret "B_2_b"
And so on.
In practice, however, most users will only have two Session types:
-
a default "system" one, and
-
a temporary one that may or may not exist, running in memory for the current login session
and a single Collection, named login
(and aliased to default
, usually).
4. Usage
Full documentation can be found via inline documentation. Either via the pkg.go.dev documentation or godoc
(or go doc
) in the source root.