aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-03-17 02:46:46 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-03-17 02:46:46 +0800
commit03ac0f18ae8bcc9c2f843841b8fe322717616a21 (patch)
tree76ac005fd885feb42765d3e6d24fa1dbb99dde2f
parente5e265d024403a779297cbaf5aa0f8759e3e76e4 (diff)
downloadgo-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar.gz
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar.bz2
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar.lz
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar.xz
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.tar.zst
go-tangerine-03ac0f18ae8bcc9c2f843841b8fe322717616a21.zip
Initial support to remove Whisper identities per #491
-rw-r--r--rpc/api.go13
-rw-r--r--whisper/whisper.go9
-rw-r--r--xeth/whisper.go6
3 files changed, 26 insertions, 2 deletions
diff --git a/rpc/api.go b/rpc/api.go
index 1846e7db5..b2d04cee6 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -9,11 +9,11 @@ import (
"sync"
"time"
+ "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
- "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/event/filter"
"github.com/ethereum/go-ethereum/state"
@@ -371,6 +371,11 @@ func (p *EthereumApi) NewWhisperIdentity(reply *interface{}) error {
return nil
}
+func (p *EthereumApi) RemoveWhisperIdentity(args *WhisperIdentityArgs, reply *interface{}) error {
+ *reply = p.xeth().Whisper().RemoveIdentity(args.Identity)
+ return nil
+}
+
func (p *EthereumApi) NewWhisperFilter(args *WhisperFilterArgs, reply *interface{}) error {
var id int
opts := new(xeth.Options)
@@ -751,6 +756,12 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return p.WhisperPost(args, reply)
case "shh_newIdentity":
return p.NewWhisperIdentity(reply)
+ case "shh_removeIdentity":
+ args := new(WhisperIdentityArgs)
+ if err := json.Unmarshal(req.Params, &args); err != nil {
+ return err
+ }
+ return p.RemoveWhisperIdentity(args, reply)
case "shh_hasIdentity":
args := new(WhisperIdentityArgs)
if err := json.Unmarshal(req.Params, &args); err != nil {
diff --git a/whisper/whisper.go b/whisper/whisper.go
index 13209f9a6..c80ba3c8e 100644
--- a/whisper/whisper.go
+++ b/whisper/whisper.go
@@ -116,6 +116,15 @@ func (self *Whisper) GetIdentity(key *ecdsa.PublicKey) *ecdsa.PrivateKey {
return self.keys[string(crypto.FromECDSAPub(key))]
}
+func (self *Whisper) RemoveIdentity(key *ecdsa.PublicKey) bool {
+ k := string(crypto.FromECDSAPub(key))
+ if _, ok := self.keys[k]; ok {
+ delete(self.keys, k)
+ return true
+ }
+ return false
+}
+
func (self *Whisper) Watch(opts Filter) int {
return self.filters.Install(filter.Generic{
Str1: string(crypto.FromECDSAPub(opts.To)),
diff --git a/xeth/whisper.go b/xeth/whisper.go
index 76bf8012a..eb5fc789c 100644
--- a/xeth/whisper.go
+++ b/xeth/whisper.go
@@ -4,8 +4,8 @@ import (
"errors"
"time"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/whisper"
)
@@ -63,6 +63,10 @@ func (self *Whisper) HasIdentity(key string) bool {
return self.Whisper.HasIdentity(crypto.ToECDSAPub(common.FromHex(key)))
}
+func (self *Whisper) RemoveIdentity(key string) bool {
+ return self.Whisper.RemoveIdentity(crypto.ToECDSAPub(common.FromHex(key)))
+}
+
func (self *Whisper) Watch(opts *Options) int {
filter := whisper.Filter{
To: crypto.ToECDSAPub(common.FromHex(opts.To)),