parent
d5d910e8b6
commit
409b61fe3c
@ -358,6 +358,8 @@ func registerBzzService(ctx *cli.Context, stack *node.Node) {
|
||||
if err != nil {
|
||||
utils.Fatalf("Can't connect: %v", err)
|
||||
}
|
||||
} else {
|
||||
swapEnabled = false
|
||||
}
|
||||
return swarm.NewSwarm(ctx, client, bzzconfig, swapEnabled, syncEnabled, cors)
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@ -84,25 +83,28 @@ type ErrResolve error
|
||||
// DNS Resolver
|
||||
func (self *Api) Resolve(uri *URI) (storage.Key, error) {
|
||||
log.Trace(fmt.Sprintf("Resolving : %v", uri.Addr))
|
||||
|
||||
var err error
|
||||
if !uri.Immutable() {
|
||||
if self.dns != nil {
|
||||
resolved, err := self.dns.Resolve(uri.Addr)
|
||||
if err == nil {
|
||||
return resolved[:], nil
|
||||
}
|
||||
} else {
|
||||
err = fmt.Errorf("no DNS to resolve name")
|
||||
}
|
||||
}
|
||||
if hashMatcher.MatchString(uri.Addr) {
|
||||
log.Trace(fmt.Sprintf("addr is a hash: %q", uri.Addr))
|
||||
return storage.Key(common.Hex2Bytes(uri.Addr)), nil
|
||||
}
|
||||
if uri.Immutable() {
|
||||
return nil, errors.New("refusing to resolve immutable address")
|
||||
}
|
||||
if self.dns == nil {
|
||||
return nil, fmt.Errorf("unable to resolve addr %q, resolver not configured", uri.Addr)
|
||||
}
|
||||
hash, err := self.dns.Resolve(uri.Addr)
|
||||
if err != nil {
|
||||
log.Warn(fmt.Sprintf("DNS error resolving addr %q: %s", uri.Addr, err))
|
||||
return nil, ErrResolve(err)
|
||||
return nil, fmt.Errorf("'%s' does not resolve: %v but is not a content hash", uri.Addr, err)
|
||||
}
|
||||
log.Trace(fmt.Sprintf("addr lookup: %v -> %v", uri.Addr, hash))
|
||||
return hash[:], nil
|
||||
return nil, fmt.Errorf("'%s' is not a content hash", uri.Addr)
|
||||
}
|
||||
|
||||
|
||||
// Put provides singleton manifest creation on top of dpa store
|
||||
func (self *Api) Put(content, contentType string) (storage.Key, error) {
|
||||
r := strings.NewReader(content)
|
||||
|
@ -99,4 +99,32 @@ func TestBzzrGetPath(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
nonhashtests := []string{
|
||||
srv.URL + "/bzz:/name",
|
||||
srv.URL + "/bzzi:/nonhash",
|
||||
srv.URL + "/bzzr:/nonhash",
|
||||
}
|
||||
|
||||
nonhashresponses := []string{
|
||||
"error resolving name: 'name' does not resolve: no DNS to resolve name but is not a content hash\n",
|
||||
"error resolving nonhash: 'nonhash' is not a content hash\n",
|
||||
"error resolving nonhash: 'nonhash' does not resolve: no DNS to resolve name but is not a content hash\n",
|
||||
}
|
||||
|
||||
for i, url := range nonhashtests {
|
||||
var resp *http.Response
|
||||
var respbody []byte
|
||||
|
||||
resp, err = http.Get(url)
|
||||
|
||||
if err != nil {
|
||||
t.Fatalf("Request failed: %v", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
respbody, err = ioutil.ReadAll(resp.Body)
|
||||
if string(respbody) != nonhashresponses[i] {
|
||||
t.Fatalf("Non-Hash response body does not match, expected: %v, got: %v", nonhashresponses[i], string(respbody))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/contracts/chequebook"
|
||||
"github.com/ethereum/go-ethereum/contracts/ens"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/ethclient"
|
||||
"github.com/ethereum/go-ethereum/log"
|
||||
"github.com/ethereum/go-ethereum/node"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
@ -134,9 +135,13 @@ func NewSwarm(ctx *node.ServiceContext, backend chequebook.Backend, config *api.
|
||||
// set up high level api
|
||||
transactOpts := bind.NewKeyedTransactor(self.privateKey)
|
||||
|
||||
self.dns, err = ens.NewENS(transactOpts, config.EnsRoot, self.backend)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if backend == (*ethclient.Client)(nil) {
|
||||
log.Warn("No ENS, please specify non-empty --ethapi to use domain name resolution")
|
||||
} else {
|
||||
self.dns, err = ens.NewENS(transactOpts, config.EnsRoot, self.backend)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
log.Debug(fmt.Sprintf("-> Swarm Domain Name Registrar @ address %v", config.EnsRoot.Hex()))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user