mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 01:13:45 +00:00
swarm/storage: Add ENS owner check on update
This commit is contained in:
parent
0851c2d264
commit
25a1c58ed9
2 changed files with 34 additions and 6 deletions
|
|
@ -46,12 +46,29 @@ func NewENSResourceHandler(privKey *ecdsa.PrivateKey, datadir string, cloudStore
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *ENSResourceHandler) NewResource(name string, frequency uint64) (*resource, error) {
|
func (self *ENSResourceHandler) NewResource(name string, frequency uint64) (*resource, error) {
|
||||||
owneraddr, err := self.ensapi.Owner(self.RawResourceHandler.nameHashFunc(name))
|
ok, err := self.IsOwner(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("ENS error: %v", err)
|
return nil, err
|
||||||
}
|
} else if !ok {
|
||||||
if owneraddr != self.addr {
|
return nil, fmt.Errorf("Not Owner")
|
||||||
return nil, fmt.Errorf("not owner")
|
|
||||||
}
|
}
|
||||||
return self.RawResourceHandler.NewResource(name, frequency)
|
return self.RawResourceHandler.NewResource(name, frequency)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *ENSResourceHandler) Update(name string, data []byte) (Key, error) {
|
||||||
|
ok, err := self.IsOwner(name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if !ok {
|
||||||
|
return nil, fmt.Errorf("Not Owner")
|
||||||
|
}
|
||||||
|
return self.RawResourceHandler.Update(name, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ENSResourceHandler) IsOwner(name string) (bool, error) {
|
||||||
|
owneraddr, err := self.ensapi.Owner(self.RawResourceHandler.nameHashFunc(name))
|
||||||
|
if err != nil {
|
||||||
|
return false, fmt.Errorf("ENS error: %v", err)
|
||||||
|
}
|
||||||
|
return owneraddr == self.addr, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -328,7 +328,7 @@ func TestResourceHandler(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// create ENS enabled resource update, with and without valid owner
|
// create ENS enabled resource update, with and without valid owner
|
||||||
func TestResourceENSNew(t *testing.T) {
|
func TestResourceENSOwner(t *testing.T) {
|
||||||
|
|
||||||
// privkey for signing updates
|
// privkey for signing updates
|
||||||
privkey, err := crypto.GenerateKey()
|
privkey, err := crypto.GenerateKey()
|
||||||
|
|
@ -361,6 +361,12 @@ func TestResourceENSNew(t *testing.T) {
|
||||||
teardownTest(t, err)
|
teardownTest(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update resource when we are owner = ok
|
||||||
|
_, err = rh.Update(domainName, []byte("foo"))
|
||||||
|
if err != nil {
|
||||||
|
teardownTest(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
// create new resource when we are NOT owner = !ok
|
// create new resource when we are NOT owner = !ok
|
||||||
rawrh := rh.(*ENSResourceHandler)
|
rawrh := rh.(*ENSResourceHandler)
|
||||||
rawrh.privKey = privkeytwo
|
rawrh.privKey = privkeytwo
|
||||||
|
|
@ -369,6 +375,11 @@ func TestResourceENSNew(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
teardownTest(t, fmt.Errorf("Expected resource create fail due to owner mismatch"))
|
teardownTest(t, fmt.Errorf("Expected resource create fail due to owner mismatch"))
|
||||||
}
|
}
|
||||||
|
// update resource when we are owner = ok
|
||||||
|
_, err = rh.Update(domainName, []byte("foo"))
|
||||||
|
if err == nil {
|
||||||
|
teardownTest(t, fmt.Errorf("Expected resource update fail due to owner mismatch"))
|
||||||
|
}
|
||||||
|
|
||||||
teardownTest(t, nil)
|
teardownTest(t, nil)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue