+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..bf4e156
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/README.adoc b/README.adoc
index c21e9ce..919e4f4 100644
--- a/README.adoc
+++ b/README.adoc
@@ -1,6 +1,5 @@
= libsecret/gosecret
Brent Saner
-Last updated {localdatetime}
:doctype: book
:docinfo: shared
:data-uri:
@@ -26,6 +25,7 @@ This project is originally forked from https://github.com/gsterjov/go-libsecret[
and as such, hopefully this library should serve as a more effective libsecret/SecretService interface.
== 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:
@@ -36,13 +36,14 @@ To use this library as a replacement without significantly modifying your code,
----
// ...
replace (
- github.com/gsterjov/go-libsecret dev => r00t2.io/gosecret v0
+ github.com/gsterjov/go-libsecret dev => r00t2.io/gosecret v0
)
----
and then run `go mod tidy`.
== New Developer API
+
Starting from `v1.0.0` onwards, entirely breaking changes can be assumed from the original project.
To use the new version,
@@ -56,7 +57,70 @@ import (
To reflect the absolute breaking changes, the module name changes as well from `libsecret` to `gosecret`.
+=== Status
+
+The new API is underway, and all functionality in V0 is present. However, It's not "complete". https://github.com/johnnybubonic/gosecret/pulls[PRs^] welcome, of course, but this will be an ongoing effort for a bit of time.
+
+== SecretService Concepts
+
+For reference:
+
+* A *`Service`* allows one to operate on/with *`Session`* objects.
+* A *`Session`* allows one to operate on/with `*Collection*` objects.
+* A `*Collection*` allows one to operate on/with `*Item*` objects.
+* An `*Item*` allows one to operate on/with `*Secrets*`.
+(`*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"
+│ ├─ Collection "A.1"
+│ │ ├─ Item "A.1.a"
+│ │ │ ├─ Secret "A_1_a_I"
+│ │ │ └─ Secret "A_1_a_II"
+│ │ └─ Item "A.1.b"
+│ │ ├─ Secret "A_1_b_I"
+│ │ └─ Secret "A_1_b_II"
+│ └─ Collection "A.2"
+│ ├─ Item "A.2.a"
+│ │ ├─ Secret "A_2_a_I"
+│ │ └─ Secret "A_2_a_II"
+│ └─ Item "A.2.b"
+│ ├─ Secret "A_2_b_I"
+│ └─ Secret "A_2_b_II"
+└─ Session "B"
+ ├─ Collection "B.1"
+ │ ├─ Item "B.1.a"
+ │ │ ├─ Secret "B_1_a_I"
+ │ │ └─ Secret "B_1_a_II"
+ │ └─ Item "B.1.b"
+ │ ├─ Secret "B_1_b_I"
+ │ └─ Secret "B_1_b_II"
+ └─ Collection "B.2"#
+ ├─ Item "B.2.a"
+ │ ├─ Secret "B_2_a_I"
+ │ └─ Secret "B_2_a_II"
+ └─ Item "B.2.b"
+ ├─ Secret "B_2_b_I"
+ └─ Secret "B_2_b_II"
+----
+
+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).
+
== Usage
+
Full documentation can be found via inline documentation. Either via the https://pkg.go.dev/r00t2.io/gosecret[pkg.go.dev documentation^] or https://pkg.go.dev/golang.org/x/tools/cmd/godoc[`godoc`^] (or `go doc`) in the source root.
////
diff --git a/doc.go b/doc.go
index a554e04..857a129 100644
--- a/doc.go
+++ b/doc.go
@@ -1,7 +1,7 @@
// See LICENSE in source root directory for copyright and licensing information.
/*
-Package libsecret is(/was originally) a fork of go-libsecret (see https://github.com/gsterjov/go-libsecret
+Package gosecret is(/was originally) a fork of go-libsecret (see https://github.com/gsterjov/go-libsecret
and https://pkg.go.dev/github.com/gsterjov/go-libsecret).
It was forked in order to present bugfixes, actually document the library, conform to more Go-like patterns, and
@@ -10,11 +10,13 @@ As such, hopefully this library should serve as a more effective libsecret/Secre
Backwards Compatibility
-Version series `v0.X.X` of this library promises full and non-breaking backwards compatibility/drop-in support of API interaction with the original project.
+Version series `v0.X.X` of this library promises full and non-breaking backwards compatibility/drop-in
+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 in your go.mod file:
+To use this library as a replacement without significantly modifying your code,
+you can simply use a `replace` directive in your go.mod file:
// ...
replace (
@@ -37,6 +39,61 @@ To use the new version,
To reflect the absolute breaking changes, the module name changes as well from `libsecret` to `gosecret`.
+SecretService Concepts
+
+For reference:
+
+- A Service allows one to operate on/with Session objects.
+
+- A Session allows one to operate on/with Collection objects.
+
+- A Collection allows one to operate on/with Item objects.
+
+- An Item allows one to operate on/with Secrets.
+
+(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"
+ │ ├─ Collection "A.1"
+ │ │ ├─ Item "A.1.a"
+ │ │ │ ├─ Secret "A_1_a_I"
+ │ │ │ └─ Secret "A_1_a_II"
+ │ │ └─ Item "A.1.b"
+ │ │ ├─ Secret "A_1_b_I"
+ │ │ └─ Secret "A_1_b_II"
+ │ └─ Collection "A.2"
+ │ ├─ Item "A.2.a"
+ │ │ ├─ Secret "A_2_a_I"
+ │ │ └─ Secret "A_2_a_II"
+ │ └─ Item "A.2.b"
+ │ ├─ Secret "A_2_b_I"
+ │ └─ Secret "A_2_b_II"
+ └─ Session "B"
+ ├─ Collection "B.1"
+ │ ├─ Item "B.1.a"
+ │ │ ├─ Secret "B_1_a_I"
+ │ │ └─ Secret "B_1_a_II"
+ │ └─ Item "B.1.b"
+ │ ├─ Secret "B_1_b_I"
+ │ └─ Secret "B_1_b_II"
+ └─ Collection "B.2"#
+ ├─ Item "B.2.a"
+ │ ├─ Secret "B_2_a_I"
+ │ └─ Secret "B_2_a_II"
+ └─ Item "B.2.b"
+ ├─ Secret "B_2_b_I"
+ └─ Secret "B_2_b_II"
+
+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).
+
Usage
Full documentation can be found via inline documentation.