aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgluk256 <gluk256@users.noreply.github.com>2018-03-03 16:40:01 +0800
committerGitHub <noreply@github.com>2018-03-03 16:40:01 +0800
commit66cd41af1e3827f9f834ca6ea98d6964d2388f77 (patch)
tree3474a30b89770b16335c1982ede77c00f8d0cdac
parentfa375955ad52bc7936f33c8d8cec68fb9007baaa (diff)
parent6219a338225f1a4dfb7e51212ec3dde6e32785ce (diff)
downloaddexon-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.go37
-rw-r--r--whisper/whisperv6/envelope.go4
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