From 03ac0f18ae8bcc9c2f843841b8fe322717616a21 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 16 Mar 2015 14:46:46 -0400 Subject: [PATCH] Initial support to remove Whisper identities per #491 --- rpc/api.go | 13 ++++++++++++- whisper/whisper.go | 9 +++++++++ xeth/whisper.go | 6 +++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/rpc/api.go b/rpc/api.go index 1846e7db5a..b2d04cee64 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 13209f9a6e..c80ba3c8ec 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 76bf8012af..eb5fc789ca 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)),