Initial support to remove Whisper identities per #491
This commit is contained in:
		
							
								
								
									
										13
									
								
								rpc/api.go
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								rpc/api.go
									
									
									
									
									
								
							| @@ -9,11 +9,11 @@ import ( | |||||||
| 	"sync" | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/ethereum/go-ethereum/common" | ||||||
| 	"github.com/ethereum/go-ethereum/core" | 	"github.com/ethereum/go-ethereum/core" | ||||||
| 	"github.com/ethereum/go-ethereum/core/types" | 	"github.com/ethereum/go-ethereum/core/types" | ||||||
| 	"github.com/ethereum/go-ethereum/crypto" | 	"github.com/ethereum/go-ethereum/crypto" | ||||||
| 	"github.com/ethereum/go-ethereum/ethdb" | 	"github.com/ethereum/go-ethereum/ethdb" | ||||||
| 	"github.com/ethereum/go-ethereum/common" |  | ||||||
| 	"github.com/ethereum/go-ethereum/event" | 	"github.com/ethereum/go-ethereum/event" | ||||||
| 	"github.com/ethereum/go-ethereum/event/filter" | 	"github.com/ethereum/go-ethereum/event/filter" | ||||||
| 	"github.com/ethereum/go-ethereum/state" | 	"github.com/ethereum/go-ethereum/state" | ||||||
| @@ -371,6 +371,11 @@ func (p *EthereumApi) NewWhisperIdentity(reply *interface{}) error { | |||||||
| 	return nil | 	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 { | func (p *EthereumApi) NewWhisperFilter(args *WhisperFilterArgs, reply *interface{}) error { | ||||||
| 	var id int | 	var id int | ||||||
| 	opts := new(xeth.Options) | 	opts := new(xeth.Options) | ||||||
| @@ -751,6 +756,12 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error | |||||||
| 		return p.WhisperPost(args, reply) | 		return p.WhisperPost(args, reply) | ||||||
| 	case "shh_newIdentity": | 	case "shh_newIdentity": | ||||||
| 		return p.NewWhisperIdentity(reply) | 		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": | 	case "shh_hasIdentity": | ||||||
| 		args := new(WhisperIdentityArgs) | 		args := new(WhisperIdentityArgs) | ||||||
| 		if err := json.Unmarshal(req.Params, &args); err != nil { | 		if err := json.Unmarshal(req.Params, &args); err != nil { | ||||||
|   | |||||||
| @@ -116,6 +116,15 @@ func (self *Whisper) GetIdentity(key *ecdsa.PublicKey) *ecdsa.PrivateKey { | |||||||
| 	return self.keys[string(crypto.FromECDSAPub(key))] | 	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 { | func (self *Whisper) Watch(opts Filter) int { | ||||||
| 	return self.filters.Install(filter.Generic{ | 	return self.filters.Install(filter.Generic{ | ||||||
| 		Str1: string(crypto.FromECDSAPub(opts.To)), | 		Str1: string(crypto.FromECDSAPub(opts.To)), | ||||||
|   | |||||||
| @@ -4,8 +4,8 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/ethereum/go-ethereum/crypto" |  | ||||||
| 	"github.com/ethereum/go-ethereum/common" | 	"github.com/ethereum/go-ethereum/common" | ||||||
|  | 	"github.com/ethereum/go-ethereum/crypto" | ||||||
| 	"github.com/ethereum/go-ethereum/logger" | 	"github.com/ethereum/go-ethereum/logger" | ||||||
| 	"github.com/ethereum/go-ethereum/whisper" | 	"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))) | 	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 { | func (self *Whisper) Watch(opts *Options) int { | ||||||
| 	filter := whisper.Filter{ | 	filter := whisper.Filter{ | ||||||
| 		To:     crypto.ToECDSAPub(common.FromHex(opts.To)), | 		To:     crypto.ToECDSAPub(common.FromHex(opts.To)), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user