summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go')
-rw-r--r--vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go228
1 files changed, 228 insertions, 0 deletions
diff --git a/vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go b/vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go
new file mode 100644
index 00000000..d7112936
--- /dev/null
+++ b/vendor/github.com/keybase/go-keybase-chat-bot/kbchat/kvstore.go
@@ -0,0 +1,228 @@
+package kbchat
+
+import (
+ "encoding/json"
+ "strings"
+
+ "github.com/keybase/go-keybase-chat-bot/kbchat/types/keybase1"
+)
+
+type kvstoreMethod string
+
+type kvstoreOptions struct {
+ Team *string `json:"team"`
+ Namespace *string `json:"namespace,omitempty"`
+ EntryKey *string `json:"entryKey,omitempty"`
+ EntryValue *string `json:"entryValue,omitempty"`
+ Revision *int `json:"revision,omitempty"`
+}
+
+type kvstoreParams struct {
+ Options kvstoreOptions `json:"options"`
+}
+
+type kvstoreAPIReq struct {
+ Method kvstoreMethod `json:"method"`
+ Params kvstoreParams `json:"params"`
+}
+
+type GetEntryRes struct {
+ Result keybase1.KVGetResult `json:"result"`
+ Error Error `json:"error,omitempty"`
+}
+
+type PutEntryRes struct {
+ Result keybase1.KVPutResult `json:"result"`
+ Error Error `json:"error,omitempty"`
+}
+
+type DeleteEntryRes struct {
+ Result keybase1.KVDeleteEntryResult `json:"result"`
+ Error Error `json:"error,omitempty"`
+}
+
+type ListNamespacesRes struct {
+ Result keybase1.KVListNamespaceResult `json:"result"`
+ Error Error `json:"error,omitempty"`
+}
+
+type ListEntryKeysRes struct {
+ Result keybase1.KVListEntryResult `json:"result"`
+ Error Error `json:"error,omitempty"`
+}
+
+type KVStoreAPI interface {
+ PutEntry(teamName *string, namespace string, entryKey string, entryValue string) (keybase1.KVPutResult, error)
+ PutEntryWithRevision(teamName *string, namespace string, entryKey string, entryValue string, revision int) (keybase1.KVPutResult, error)
+ DeleteEntry(teamName *string, namespace string, entryKey string) (keybase1.KVDeleteEntryResult, error)
+ DeleteEntryWithRevision(teamName *string, namespace string, entryKey string, revision int) (keybase1.KVDeleteEntryResult, error)
+ GetEntry(teamName *string, namespace string, entryKey string) (keybase1.KVGetResult, error)
+ ListNamespaces(teamName *string) (keybase1.KVListNamespaceResult, error)
+ ListEntryKeys(teamName *string, namespace string) (keybase1.KVListEntryResult, error)
+}
+
+func (a *API) PutEntry(teamName *string, namespace string, entryKey string, entryValue string) (result keybase1.KVPutResult, err error) {
+ return a.PutEntryWithRevision(teamName, namespace, entryKey, entryValue, 0)
+}
+
+func (a *API) PutEntryWithRevision(teamName *string, namespace string, entryKey string, entryValue string, revision int) (result keybase1.KVPutResult, err error) {
+
+ opts := kvstoreOptions{
+ Team: teamName,
+ Namespace: &namespace,
+ EntryKey: &entryKey,
+ EntryValue: &entryValue,
+ }
+ if revision != 0 {
+ opts.Revision = &revision
+ }
+ args := kvstoreAPIReq{Method: "put", Params: kvstoreParams{Options: opts}}
+ apiInput, err := json.Marshal(args)
+ if err != nil {
+ return result, err
+ }
+
+ cmd := a.runOpts.Command("kvstore", "api")
+ cmd.Stdin = strings.NewReader(string(apiInput))
+ bytes, err := cmd.Output()
+ if err != nil {
+ return result, APIError{err}
+ }
+
+ entry := PutEntryRes{}
+ err = json.Unmarshal(bytes, &entry)
+ if err != nil {
+ return result, UnmarshalError{err}
+ }
+ if entry.Error.Message != "" {
+ return result, entry.Error
+ }
+ return entry.Result, nil
+}
+
+func (a *API) DeleteEntry(teamName *string, namespace string, entryKey string) (result keybase1.KVDeleteEntryResult, err error) {
+ return a.DeleteEntryWithRevision(teamName, namespace, entryKey, 0)
+}
+
+func (a *API) DeleteEntryWithRevision(teamName *string, namespace string, entryKey string, revision int) (result keybase1.KVDeleteEntryResult, err error) {
+
+ opts := kvstoreOptions{
+ Team: teamName,
+ Namespace: &namespace,
+ EntryKey: &entryKey,
+ }
+ if revision != 0 {
+ opts.Revision = &revision
+ }
+ args := kvstoreAPIReq{Method: "del", Params: kvstoreParams{Options: opts}}
+ apiInput, err := json.Marshal(args)
+ if err != nil {
+ return result, err
+ }
+
+ cmd := a.runOpts.Command("kvstore", "api")
+ cmd.Stdin = strings.NewReader(string(apiInput))
+ bytes, err := cmd.Output()
+ if err != nil {
+ return result, APIError{err}
+ }
+
+ entry := DeleteEntryRes{}
+ err = json.Unmarshal(bytes, &entry)
+ if err != nil {
+ return result, UnmarshalError{err}
+ }
+ if entry.Error.Message != "" {
+ return result, entry.Error
+ }
+ return entry.Result, nil
+}
+
+func (a *API) GetEntry(teamName *string, namespace string, entryKey string) (result keybase1.KVGetResult, err error) {
+
+ opts := kvstoreOptions{
+ Team: teamName,
+ Namespace: &namespace,
+ EntryKey: &entryKey,
+ }
+ args := kvstoreAPIReq{Method: "get", Params: kvstoreParams{Options: opts}}
+ apiInput, err := json.Marshal(args)
+ if err != nil {
+ return result, err
+ }
+ cmd := a.runOpts.Command("kvstore", "api")
+ cmd.Stdin = strings.NewReader(string(apiInput))
+ bytes, err := cmd.Output()
+ if err != nil {
+ return result, APIError{err}
+ }
+
+ entry := GetEntryRes{}
+ err = json.Unmarshal(bytes, &entry)
+ if err != nil {
+ return result, UnmarshalError{err}
+ }
+ if entry.Error.Message != "" {
+ return result, entry.Error
+ }
+ return entry.Result, nil
+}
+
+func (a *API) ListNamespaces(teamName *string) (result keybase1.KVListNamespaceResult, err error) {
+
+ opts := kvstoreOptions{
+ Team: teamName,
+ }
+ args := kvstoreAPIReq{Method: "list", Params: kvstoreParams{Options: opts}}
+ apiInput, err := json.Marshal(args)
+ if err != nil {
+ return result, err
+ }
+
+ cmd := a.runOpts.Command("kvstore", "api")
+ cmd.Stdin = strings.NewReader(string(apiInput))
+ bytes, err := cmd.Output()
+ if err != nil {
+ return result, APIError{err}
+ }
+
+ var namespaces ListNamespacesRes
+ err = json.Unmarshal(bytes, &namespaces)
+ if err != nil {
+ return result, UnmarshalError{err}
+ }
+ if namespaces.Error.Message != "" {
+ return result, namespaces.Error
+ }
+ return namespaces.Result, nil
+}
+
+func (a *API) ListEntryKeys(teamName *string, namespace string) (result keybase1.KVListEntryResult, err error) {
+
+ opts := kvstoreOptions{
+ Team: teamName,
+ Namespace: &namespace,
+ }
+ args := kvstoreAPIReq{Method: "list", Params: kvstoreParams{Options: opts}}
+ apiInput, err := json.Marshal(args)
+ if err != nil {
+ return result, err
+ }
+
+ cmd := a.runOpts.Command("kvstore", "api")
+ cmd.Stdin = strings.NewReader(string(apiInput))
+ bytes, err := cmd.Output()
+ if err != nil {
+ return result, APIError{err}
+ }
+
+ entryKeys := ListEntryKeysRes{}
+ err = json.Unmarshal(bytes, &entryKeys)
+ if err != nil {
+ return result, UnmarshalError{err}
+ }
+ if entryKeys.Error.Message != "" {
+ return result, entryKeys.Error
+ }
+ return entryKeys.Result, nil
+}