Add a Has(name) method to the keystore
License: MIT Signed-off-by: Michael Muré <batolettre@gmail.com>
Michael Muré committed
May 4, 2017 at 17:29 UTC
6f815b15688f189e8f39d6baa3640982b6fb3f28
4 files changed
+31
keystore/keystore.go
+9
@@ -11,6 +11,7 @@ import (
11
)
12
13
type Keystore interface {
14
+ Has(string) bool
15
Put(string, ci.PrivKey) error
16
Get(string) (ci.PrivKey, error)
17
Delete(string) error
@@ -54,6 +55,14 @@ func NewFSKeystore(dir string) (*FSKeystore, error) {
55
return &FSKeystore{dir}, nil
56
}
57
58
+func (ks *FSKeystore) Has(name string) bool {
59
+ kp := filepath.Join(ks.dir, name)
60
+
61
+ _, err := os.Stat(kp)
62
+
63
+ return err == nil
64
+}
65
+
66
func (ks *FSKeystore) Put(name string, k ci.PrivKey) error {
67
if err := validateName(name); err != nil {
68
return err
keystore/keystore_test.go
+8
@@ -82,6 +82,14 @@ func TestKeystoreBasics(t *testing.T) {
82
t.Fatal(err)
83
}
84
85
+ if !ks.Has("foo") {
86
+ t.Fatal("should know it has a key named foo")
87
+ }
88
+
89
+ if ks.Has("nonexistingkey") {
90
+ t.Fatal("should know it doesn't have a key named nonexistingkey")
91
+ }
92
+
93
if err := ks.Delete("bar"); err != nil {
94
t.Fatal(err)
95
}
keystore/memkeystore.go
+5
@@ -10,6 +10,11 @@ func NewMemKeystore() *MemKeystore {
10
return &MemKeystore{make(map[string]ci.PrivKey)}
11
}
12
13
+func (mk *MemKeystore) Has(name string) bool {
14
+ _, ok := mk.keys[name]
15
+ return ok
16
+}
17
+
18
func (mk *MemKeystore) Put(name string, k ci.PrivKey) error {
19
if err := validateName(name); err != nil {
20
return err
keystore/memkeystore_test.go
+9
@@ -46,6 +46,15 @@ func TestMemKeyStoreBasics(t *testing.T) {
46
if err == nil {
47
t.Fatal("should not be able to overwrite key")
48
}
49
+
50
+ if !ks.Has("foo") {
51
+ t.Fatal("should know it has a key named foo")
52
+ }
53
+
54
+ if ks.Has("nonexistingkey") {
55
+ t.Fatal("should know it doesn't have a key named nonexistingkey")
56
+ }
57
+
58
if err := ks.Delete("bar"); err != nil {
59
t.Fatal(err)
60
}