aboutsummaryrefslogtreecommitdiff
path: root/util.go
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2020-02-26 20:21:32 +0100
committerAlex Auvolat <alex@adnab.me>2020-02-26 20:21:32 +0100
commitf675ba57e400d378088d29c08bd5d0bd9126c74b (patch)
treec5d54b55b9f8a1bbb5e12cafb3da846124a2f821 /util.go
parentd1b66d30883c9e5fda0c4cace494dec74d7df024 (diff)
downloadeasybridge-f675ba57e400d378088d29c08bd5d0bd9126c74b.tar.gz
easybridge-f675ba57e400d378088d29c08bd5d0bd9126c74b.zip
Implement account configuration save/load from db
Diffstat (limited to 'util.go')
-rw-r--r--util.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/util.go b/util.go
index c1da665..323f99d 100644
--- a/util.go
+++ b/util.go
@@ -1,10 +1,14 @@
package main
import (
+ "crypto/rand"
+ "encoding/base64"
+ "encoding/json"
"fmt"
"unicode"
log "github.com/sirupsen/logrus"
+ "golang.org/x/crypto/nacl/secretbox"
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
)
@@ -56,3 +60,41 @@ func safeStringForId(in string) string {
}
return id2
}
+
+// ---- Encoding and encryption of account config
+
+func encryptAccountConfig(config map[string]string, key *[32]byte) string {
+ bytes, err := json.Marshal(config)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ var nonce [24]byte
+ _, err = rand.Read(nonce[:])
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ crypto := secretbox.Seal([]byte{}, bytes, &nonce, key)
+ all := append(nonce[:], crypto...)
+ return base64.StdEncoding.EncodeToString(all)
+}
+
+func decryptAccountConfig(data string, key *[32]byte) (map[string]string, error) {
+ bytes, err := base64.StdEncoding.DecodeString(data)
+ if err != nil {
+ return nil, err
+ }
+
+ var nonce [24]byte
+ copy(nonce[:], bytes[:24])
+
+ decoded, ok := secretbox.Open([]byte{}, bytes[24:], &nonce, key)
+ if !ok {
+ return nil, fmt.Errorf("Invalid key")
+ }
+
+ var config map[string]string
+ err = json.Unmarshal(decoded, &config)
+ return config, err
+}