support for user agents
This commit is contained in:
@ -37,6 +37,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/rpc/codec"
|
||||
"github.com/ethereum/go-ethereum/rpc/comms"
|
||||
"github.com/ethereum/go-ethereum/rpc/shared"
|
||||
"github.com/ethereum/go-ethereum/rpc/useragent"
|
||||
"github.com/ethereum/go-ethereum/xeth"
|
||||
)
|
||||
|
||||
@ -71,6 +72,7 @@ var (
|
||||
"admin_httpGet": (*adminApi).HttpGet,
|
||||
"admin_sleepBlocks": (*adminApi).SleepBlocks,
|
||||
"admin_sleep": (*adminApi).Sleep,
|
||||
"admin_enableUserAgent": (*adminApi).EnableUserAgent,
|
||||
}
|
||||
)
|
||||
|
||||
@ -474,3 +476,10 @@ func (self *adminApi) HttpGet(req *shared.Request) (interface{}, error) {
|
||||
|
||||
return string(resp), nil
|
||||
}
|
||||
|
||||
func (self *adminApi) EnableUserAgent(req *shared.Request) (interface{}, error) {
|
||||
if fe, ok := self.xeth.Frontend().(*useragent.RemoteFrontend); ok {
|
||||
fe.Enable()
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ var (
|
||||
netMapping = map[string]nethandler{
|
||||
"net_peerCount": (*netApi).PeerCount,
|
||||
"net_listening": (*netApi).IsListening,
|
||||
"net_version": (*netApi).Version,
|
||||
"net_version": (*netApi).Version,
|
||||
}
|
||||
)
|
||||
|
||||
@ -97,4 +97,3 @@ func (self *netApi) IsListening(req *shared.Request) (interface{}, error) {
|
||||
func (self *netApi) Version(req *shared.Request) (interface{}, error) {
|
||||
return self.xeth.NetworkVersion(), nil
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
@ -125,18 +126,17 @@ func (self *personalApi) UnlockAccount(req *shared.Request) (interface{}, error)
|
||||
return nil, shared.NewDecodeParamError(err.Error())
|
||||
}
|
||||
|
||||
var err error
|
||||
if len(args.Passphrase) == 0 {
|
||||
fe := self.xeth.Frontend()
|
||||
if fe == nil {
|
||||
return false, fmt.Errorf("No password provided")
|
||||
}
|
||||
return fe.UnlockAccount(common.HexToAddress(args.Address).Bytes()), nil
|
||||
}
|
||||
|
||||
am := self.ethereum.AccountManager()
|
||||
addr := common.HexToAddress(args.Address)
|
||||
|
||||
if args.Duration == -1 {
|
||||
err = am.Unlock(addr, args.Passphrase)
|
||||
} else {
|
||||
err = am.TimedUnlock(addr, args.Passphrase, time.Duration(args.Duration)*time.Second)
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
return true, nil
|
||||
}
|
||||
return false, err
|
||||
err := am.TimedUnlock(addr, args.Passphrase, time.Duration(args.Duration)*time.Second)
|
||||
return err == nil, err
|
||||
}
|
||||
|
@ -86,10 +86,10 @@ func (args *UnlockAccountArgs) UnmarshalJSON(b []byte) (err error) {
|
||||
return shared.NewDecodeParamError(err.Error())
|
||||
}
|
||||
|
||||
args.Duration = -1
|
||||
args.Duration = 0
|
||||
|
||||
if len(obj) < 2 {
|
||||
return shared.NewInsufficientParamsError(len(obj), 2)
|
||||
if len(obj) < 1 {
|
||||
return shared.NewInsufficientParamsError(len(obj), 1)
|
||||
}
|
||||
|
||||
if addrstr, ok := obj[0].(string); ok {
|
||||
@ -98,10 +98,18 @@ func (args *UnlockAccountArgs) UnmarshalJSON(b []byte) (err error) {
|
||||
return shared.NewInvalidTypeError("address", "not a string")
|
||||
}
|
||||
|
||||
if passphrasestr, ok := obj[1].(string); ok {
|
||||
args.Passphrase = passphrasestr
|
||||
} else {
|
||||
return shared.NewInvalidTypeError("passphrase", "not a string")
|
||||
if len(obj) >= 2 && obj[1] != nil {
|
||||
if passphrasestr, ok := obj[1].(string); ok {
|
||||
args.Passphrase = passphrasestr
|
||||
} else {
|
||||
return shared.NewInvalidTypeError("passphrase", "not a string")
|
||||
}
|
||||
}
|
||||
|
||||
if len(obj) >= 3 && obj[2] != nil {
|
||||
if duration, ok := obj[2].(float64); ok {
|
||||
args.Duration = int(duration)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user