提交 7e91da20 作者: Michael Muré

Future-proof keystore.Has by returning an error as well

License: MIT
Signed-off-by: 's avatarMichael Muré <batolettre@gmail.com>
上级 c0a04a06
...@@ -260,7 +260,14 @@ var keyRenameCmd = &cmds.Command{ ...@@ -260,7 +260,14 @@ var keyRenameCmd = &cmds.Command{
overwrite := false overwrite := false
force, _, _ := res.Request().Option("f").Bool() force, _, _ := res.Request().Option("f").Bool()
if force && ks.Has(newName) { if force {
exist, err := ks.Has(newName)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
if exist {
overwrite = true overwrite = true
err := ks.Delete(newName) err := ks.Delete(newName)
if err != nil { if err != nil {
...@@ -268,6 +275,7 @@ var keyRenameCmd = &cmds.Command{ ...@@ -268,6 +275,7 @@ var keyRenameCmd = &cmds.Command{
return return
} }
} }
}
err = ks.Put(newName, oldKey) err = ks.Put(newName, oldKey)
if err != nil { if err != nil {
......
...@@ -11,7 +11,7 @@ import ( ...@@ -11,7 +11,7 @@ import (
) )
type Keystore interface { type Keystore interface {
Has(string) bool Has(string) (bool, error)
Put(string, ci.PrivKey) error Put(string, ci.PrivKey) error
Get(string) (ci.PrivKey, error) Get(string) (ci.PrivKey, error)
Delete(string) error Delete(string) error
...@@ -55,12 +55,20 @@ func NewFSKeystore(dir string) (*FSKeystore, error) { ...@@ -55,12 +55,20 @@ func NewFSKeystore(dir string) (*FSKeystore, error) {
return &FSKeystore{dir}, nil return &FSKeystore{dir}, nil
} }
func (ks *FSKeystore) Has(name string) bool { func (ks *FSKeystore) Has(name string) (bool, error) {
kp := filepath.Join(ks.dir, name) kp := filepath.Join(ks.dir, name)
_, err := os.Stat(kp) _, err := os.Stat(kp)
return err == nil if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, err
}
return true, nil
} }
func (ks *FSKeystore) Put(name string, k ci.PrivKey) error { func (ks *FSKeystore) Put(name string, k ci.PrivKey) error {
......
...@@ -82,13 +82,21 @@ func TestKeystoreBasics(t *testing.T) { ...@@ -82,13 +82,21 @@ func TestKeystoreBasics(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if !ks.Has("foo") { exist, err := ks.Has("foo")
if !exist {
t.Fatal("should know it has a key named foo") t.Fatal("should know it has a key named foo")
} }
if err != nil {
t.Fatal(err)
}
if ks.Has("nonexistingkey") { exist, err = ks.Has("nonexistingkey")
if exist {
t.Fatal("should know it doesn't have a key named nonexistingkey") t.Fatal("should know it doesn't have a key named nonexistingkey")
} }
if err != nil {
t.Fatal(err)
}
if err := ks.Delete("bar"); err != nil { if err := ks.Delete("bar"); err != nil {
t.Fatal(err) t.Fatal(err)
......
...@@ -10,9 +10,9 @@ func NewMemKeystore() *MemKeystore { ...@@ -10,9 +10,9 @@ func NewMemKeystore() *MemKeystore {
return &MemKeystore{make(map[string]ci.PrivKey)} return &MemKeystore{make(map[string]ci.PrivKey)}
} }
func (mk *MemKeystore) Has(name string) bool { func (mk *MemKeystore) Has(name string) (bool, error) {
_, ok := mk.keys[name] _, ok := mk.keys[name]
return ok return ok, nil
} }
func (mk *MemKeystore) Put(name string, k ci.PrivKey) error { func (mk *MemKeystore) Put(name string, k ci.PrivKey) error {
......
...@@ -47,13 +47,21 @@ func TestMemKeyStoreBasics(t *testing.T) { ...@@ -47,13 +47,21 @@ func TestMemKeyStoreBasics(t *testing.T) {
t.Fatal("should not be able to overwrite key") t.Fatal("should not be able to overwrite key")
} }
if !ks.Has("foo") { exist, err := ks.Has("foo")
if !exist {
t.Fatal("should know it has a key named foo") t.Fatal("should know it has a key named foo")
} }
if err != nil {
t.Fatal(err)
}
if ks.Has("nonexistingkey") { exist, err = ks.Has("nonexistingkey")
if exist {
t.Fatal("should know it doesn't have a key named nonexistingkey") t.Fatal("should know it doesn't have a key named nonexistingkey")
} }
if err != nil {
t.Fatal(err)
}
if err := ks.Delete("bar"); err != nil { if err := ks.Delete("bar"); err != nil {
t.Fatal(err) t.Fatal(err)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论