diff options
author | gluk256 <gluk256@users.noreply.github.com> | 2018-03-03 16:40:01 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-03 16:40:01 +0800 |
commit | 66cd41af1e3827f9f834ca6ea98d6964d2388f77 (patch) | |
tree | 3474a30b89770b16335c1982ede77c00f8d0cdac | |
parent | fa375955ad52bc7936f33c8d8cec68fb9007baaa (diff) | |
parent | 6219a338225f1a4dfb7e51212ec3dde6e32785ce (diff) | |
download | dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar.gz dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar.bz2 dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar.lz dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar.xz dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.tar.zst dexon-66cd41af1e3827f9f834ca6ea98d6964d2388f77.zip |
Merge pull request #16231 from gluk256/303-reader
whisper: filereader mode introduced to wnode
-rw-r--r-- | cmd/wnode/main.go | 37 | ||||
-rw-r--r-- | whisper/whisperv6/envelope.go | 4 |
2 files changed, 41 insertions, 0 deletions
diff --git a/cmd/wnode/main.go b/cmd/wnode/main.go index ccfdd4626..76590e7f5 100644 --- a/cmd/wnode/main.go +++ b/cmd/wnode/main.go @@ -86,6 +86,7 @@ var ( asymmetricMode = flag.Bool("asym", false, "use asymmetric encryption") generateKey = flag.Bool("generatekey", false, "generate and show the private key") fileExMode = flag.Bool("fileexchange", false, "file exchange mode") + fileReader = flag.Bool("filereader", false, "load and decrypt messages saved as files, display as plain text") testMode = flag.Bool("test", false, "use of predefined parameters for diagnostics (password, etc.)") echoMode = flag.Bool("echo", false, "echo mode: prints some arguments for diagnostics") @@ -433,6 +434,8 @@ func run() { requestExpiredMessagesLoop() } else if *fileExMode { sendFilesLoop() + } else if *fileReader { + fileReaderLoop() } else { sendLoop() } @@ -483,6 +486,40 @@ func sendFilesLoop() { } } +func fileReaderLoop() { + watcher1 := shh.GetFilter(symFilterID) + watcher2 := shh.GetFilter(asymFilterID) + if watcher1 == nil && watcher2 == nil { + fmt.Println("Error: neither symmetric nor asymmetric filter is installed") + close(done) + return + } + + for { + s := scanLine("") + if s == quitCommand { + fmt.Println("Quit command received") + close(done) + return + } + raw, err := ioutil.ReadFile(s) + if err != nil { + fmt.Printf(">>> Error: %s \n", err) + } else { + env := whisper.Envelope{Data: raw} // the topic is zero + msg := env.Open(watcher1) // force-open envelope regardless of the topic + if msg == nil { + msg = env.Open(watcher2) + } + if msg == nil { + fmt.Printf(">>> Error: failed to decrypt the message \n") + } else { + printMessageInfo(msg) + } + } + } +} + func scanLine(prompt string) string { if len(prompt) > 0 { fmt.Print(prompt) diff --git a/whisper/whisperv6/envelope.go b/whisper/whisperv6/envelope.go index 2c80d47bc..2f947f1a4 100644 --- a/whisper/whisperv6/envelope.go +++ b/whisper/whisperv6/envelope.go @@ -208,6 +208,10 @@ func (e *Envelope) OpenSymmetric(key []byte) (msg *ReceivedMessage, err error) { // Open tries to decrypt an envelope, and populates the message fields in case of success. func (e *Envelope) Open(watcher *Filter) (msg *ReceivedMessage) { + if watcher == nil { + return nil + } + // The API interface forbids filters doing both symmetric and asymmetric encryption. if watcher.expectsAsymmetricEncryption() && watcher.expectsSymmetricEncryption() { return nil |