Skip to content
Snippets Groups Projects
Verified Commit 78afb3d8 authored by meskio's avatar meskio :tent:
Browse files

[feat] add event support

parent 96a892f8
No related branches found
No related tags found
No related merge requests found
// +build darwin
package bitmask
import "os"
var configPath = os.Getenv("HOME") + "/Library/Preferences/leap"
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")
}
......@@ -14,21 +14,25 @@ const (
// Bitmask holds the bitmask client data
type Bitmask struct {
//eventsoc *zmq4.Socket
coresoc *zmq4.Socket
eventsoc *zmq4.Socket
statusCh chan string
}
// Init the connection to bitmask
func Init() (*Bitmask, error) {
statusCh := make(chan string)
socket, err := initCore()
coresoc, err := initCore()
if err != nil {
return nil, err
}
eventsoc, err := initEvents()
if err != nil {
return nil, err
}
b := Bitmask{socket, statusCh}
go b.fetchStatus()
b := Bitmask{coresoc, eventsoc, statusCh}
go b.eventsHandler()
return &b, nil
}
......
// +build !windows,!darwin
package bitmask
import "os"
var configPath = os.Getenv("HOME") + "/.config/leap"
package bitmask
import (
"log"
"time"
)
// StartVPN for provider
func (b *Bitmask) StartVPN(provider string) error {
_, err := b.send("vpn", "start", provider)
......
// +build windows
package bitmask
import "os"
var configPath = os.Getenv("APPDATA") + "\\leap"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment