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) {
|
||||
owneraddr, err := self.ensapi.Owner(self.RawResourceHandler.nameHashFunc(name))
|
||||
ok, err := self.IsOwner(name)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ENS error: %v", err)
|
||||
}
|
||||
if owneraddr != self.addr {
|
||||
return nil, fmt.Errorf("not owner")
|
||||
return nil, err
|
||||
} else if !ok {
|
||||
return nil, fmt.Errorf("Not Owner")
|
||||
}
|
||||
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
|
||||
func TestResourceENSNew(t *testing.T) {
|
||||
func TestResourceENSOwner(t *testing.T) {
|
||||
|
||||
// privkey for signing updates
|
||||
privkey, err := crypto.GenerateKey()
|
||||
|
|
@ -361,6 +361,12 @@ func TestResourceENSNew(t *testing.T) {
|
|||
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
|
||||
rawrh := rh.(*ENSResourceHandler)
|
||||
rawrh.privKey = privkeytwo
|
||||
|
|
@ -369,6 +375,11 @@ func TestResourceENSNew(t *testing.T) {
|
|||
if err == nil {
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue