mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-23 05:06:43 +00:00
api: implement resolve/register with js api bindings
This commit is contained in:
parent
c031c4b925
commit
567149c511
3 changed files with 40 additions and 6 deletions
13
bzz/api.go
13
bzz/api.go
|
|
@ -172,13 +172,20 @@ func (self *Api) Upload(localpath string) (string, error) {
|
||||||
return fmt.Sprintf("%064x", key), err2
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
type errResolve error
|
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 host, port string
|
||||||
var err error
|
var err error
|
||||||
host, port, err = net.SplitHostPort(hostport)
|
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
|
//resolving host and port
|
||||||
var key Key
|
var key Key
|
||||||
key, err = self.resolve(hostPort)
|
key, err = self.Resolve(hostPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ func handler(w http.ResponseWriter, r *http.Request, api *Api) {
|
||||||
dpaLogger.Debugf("Swarm: Raw GET request '%s' received", uri)
|
dpaLogger.Debugf("Swarm: Raw GET request '%s' received", uri)
|
||||||
|
|
||||||
// resolving host
|
// resolving host
|
||||||
key, err := api.resolve(path)
|
key, err := api.Resolve(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
dpaLogger.Debugf("Swarm: %v", err)
|
dpaLogger.Debugf("Swarm: %v", err)
|
||||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
// "net/http"
|
// "net/http"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/jsre"
|
"github.com/ethereum/go-ethereum/jsre"
|
||||||
"github.com/robertkrimen/otto"
|
"github.com/robertkrimen/otto"
|
||||||
)
|
)
|
||||||
|
|
@ -17,6 +18,7 @@ func NewJSApi(vm *jsre.JSRE, api *Api) (jsapi *JSApi) {
|
||||||
t, _ := vm.Get("bzz")
|
t, _ := vm.Get("bzz")
|
||||||
o := t.Object()
|
o := t.Object()
|
||||||
o.Set("register", jsapi.register)
|
o.Set("register", jsapi.register)
|
||||||
|
o.Set("resolve", jsapi.resolve)
|
||||||
o.Set("download", jsapi.download)
|
o.Set("download", jsapi.download)
|
||||||
o.Set("upload", jsapi.upload)
|
o.Set("upload", jsapi.upload)
|
||||||
o.Set("get", jsapi.get)
|
o.Set("get", jsapi.get)
|
||||||
|
|
@ -31,7 +33,7 @@ type JSApi struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *JSApi) register(call otto.FunctionCall) otto.Value {
|
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)")
|
fmt.Println("requires 3 arguments: bzz.register(address, contenthash, domain)")
|
||||||
return otto.UndefinedValue()
|
return otto.UndefinedValue()
|
||||||
}
|
}
|
||||||
|
|
@ -54,7 +56,9 @@ func (self *JSApi) register(call otto.FunctionCall) otto.Value {
|
||||||
return otto.UndefinedValue()
|
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 {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
|
|
@ -62,6 +66,29 @@ func (self *JSApi) register(call otto.FunctionCall) otto.Value {
|
||||||
return otto.TrueValue()
|
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 {
|
func (self *JSApi) get(call otto.FunctionCall) otto.Value {
|
||||||
if len(call.ArgumentList) != 1 {
|
if len(call.ArgumentList) != 1 {
|
||||||
fmt.Println("requires 1 argument: bzz.get(path)")
|
fmt.Println("requires 1 argument: bzz.get(path)")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue