summaryrefslogtreecommitdiff
path: root/bitmask/events.go
diff options
context:
space:
mode:
Diffstat (limited to 'bitmask/events.go')
-rw-r--r--bitmask/events.go48
1 files changed, 42 insertions, 6 deletions
diff --git a/bitmask/events.go b/bitmask/events.go
index 3fed26a..8645519 100644
--- a/bitmask/events.go
+++ b/bitmask/events.go
@@ -1,12 +1,17 @@
package bitmask
import (
+ "io/ioutil"
+ "log"
+ "path/filepath"
+ "strings"
+
"github.com/pebbe/zmq4"
)
const (
eventsEndpoint = "tcp://127.0.0.1:9001"
- //serverKeyPath = "/home/user/.config/leap/events/zmq_certificates/public_keys/server.key" // FIXME
+ statusEvent = "VPN_STATUS_CHANGED"
)
func initEvents() (*zmq4.Socket, error) {
@@ -16,20 +21,47 @@ func initEvents() (*zmq4.Socket, error) {
}
if zmq4.HasCurve() {
- // TODO
+ err = initCurve(socket)
+ if err != nil {
+ return nil, err
+ }
}
err = socket.Connect(eventsEndpoint)
if err != nil {
return nil, err
}
- return socket, nil
+
+ err = socket.SetSubscribe(statusEvent)
+ return socket, err
}
-func (b *Bitmask) fetchStatus() {
- // TODO: this should be a subscription to the event
+func initCurve(socket *zmq4.Socket) error {
+ serverKeyData, err := ioutil.ReadFile(getServerKeyPath())
+ if err != nil {
+ return err
+ }
+
+ pubkey, seckey, err := zmq4.NewCurveKeypair()
+ if err != nil {
+ return err
+ }
+
+ serverkey := strings.Split(string(serverKeyData), "\"")[1]
+ return socket.ClientAuthCurve(serverkey, pubkey, seckey)
+}
+
+func (b *Bitmask) eventsHandler() {
for {
- time.Sleep(time.Second)
+ msg, err := b.eventsoc.RecvMessage(0)
+ if err != nil {
+ break
+ }
+ log.Println(msg[0])
+ if msg[0][:len(statusEvent)] != statusEvent {
+ continue
+ }
+
status, err := b.GetStatus()
if err != nil {
log.Printf("Error receiving status: %v", err)
@@ -38,3 +70,7 @@ func (b *Bitmask) fetchStatus() {
b.statusCh <- status
}
}
+
+func getServerKeyPath() string {
+ return filepath.Join(configPath, "events", "zmq_certificates", "public_keys", "server.key")
+}