diff --git a/bzz/api.go b/bzz/api.go index cb07560460..5d55073a83 100644 --- a/bzz/api.go +++ b/bzz/api.go @@ -172,13 +172,20 @@ func (self *Api) Upload(localpath string) (string, error) { return fmt.Sprintf("%064x", key), err2 } -func (self *Api) Register(sender, address, domain string) (err error) { +func (self *Api) Register(sender common.Address, hash common.Hash, domain string) (err error) { + domainhash := common.BytesToHash(crypto.Sha3([]byte(domain))) + + if self.Resolver != nil { + _, err = self.Resolver.RegisterContentHash(sender, domainhash, hash) + } else { + err = fmt.Errorf("no registry: %v", err) + } return } type errResolve error -func (self *Api) resolve(hostport string) (contentHash Key, errR errResolve) { +func (self *Api) Resolve(hostport string) (contentHash Key, errR errResolve) { var host, port string var err error host, port, err = net.SplitHostPort(hostport) @@ -223,7 +230,7 @@ func (self *Api) getPath(uri string) (reader SectionReader, mimeType string, sta //resolving host and port var key Key - key, err = self.resolve(hostPort) + key, err = self.Resolve(hostPort) if err != nil { return } diff --git a/bzz/httpaccess.go b/bzz/httpaccess.go index b625b23608..2f95a2db60 100644 --- a/bzz/httpaccess.go +++ b/bzz/httpaccess.go @@ -76,7 +76,7 @@ func handler(w http.ResponseWriter, r *http.Request, api *Api) { dpaLogger.Debugf("Swarm: Raw GET request '%s' received", uri) // resolving host - key, err := api.resolve(path) + key, err := api.Resolve(path) if err != nil { dpaLogger.Debugf("Swarm: %v", err) http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/bzz/js_api.go b/bzz/js_api.go index eb70904ef4..bd572ea40d 100644 --- a/bzz/js_api.go +++ b/bzz/js_api.go @@ -4,6 +4,7 @@ import ( "fmt" // "net/http" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/jsre" "github.com/robertkrimen/otto" ) @@ -17,6 +18,7 @@ func NewJSApi(vm *jsre.JSRE, api *Api) (jsapi *JSApi) { t, _ := vm.Get("bzz") o := t.Object() o.Set("register", jsapi.register) + o.Set("resolve", jsapi.resolve) o.Set("download", jsapi.download) o.Set("upload", jsapi.upload) o.Set("get", jsapi.get) @@ -31,7 +33,7 @@ type JSApi struct { } func (self *JSApi) register(call otto.FunctionCall) otto.Value { - if len(call.ArgumentList) != 2 { + if len(call.ArgumentList) != 3 { fmt.Println("requires 3 arguments: bzz.register(address, contenthash, domain)") return otto.UndefinedValue() } @@ -54,7 +56,9 @@ func (self *JSApi) register(call otto.FunctionCall) otto.Value { return otto.UndefinedValue() } - err = self.api.Register(sender, contenthash, domain) + hash := common.HexToHash(contenthash) + + err = self.api.Register(common.HexToAddress(sender), hash, domain) if err != nil { fmt.Println(err) return otto.FalseValue() @@ -62,6 +66,29 @@ func (self *JSApi) register(call otto.FunctionCall) otto.Value { return otto.TrueValue() } +func (self *JSApi) resolve(call otto.FunctionCall) otto.Value { + if len(call.ArgumentList) != 1 { + fmt.Println("requires 1 argument: bzz.resolve(domain)") + return otto.UndefinedValue() + } + var err error + var domain string + domain, err = call.Argument(0).ToString() + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + var contentHash Key + contentHash, err = self.api.Resolve(domain) + if err != nil { + fmt.Println(err) + return otto.UndefinedValue() + } + + v, _ := call.Otto.ToValue(common.ToHex(contentHash[:])) + return v +} + func (self *JSApi) get(call otto.FunctionCall) otto.Value { if len(call.ArgumentList) != 1 { fmt.Println("requires 1 argument: bzz.get(path)")