ipbl/src/ws/reqrep.go
Paul Lecuq fbf9382ca4
All checks were successful
continuous-integration/drone/push Build is passing
updated ipbl
2023-09-10 20:37:45 +02:00

117 lines
2.3 KiB
Go

package ws
import (
"encoding/json"
"log"
"git.paulbsd.com/paulbsd/ipbl/src/config"
"git.paulbsd.com/paulbsd/ipbl/src/models"
"github.com/labstack/echo/v4"
"golang.org/x/net/websocket"
)
// HandleWSRR handle req rep flows
func HandleWSRR(c echo.Context, cfg *config.Config) error {
websocket.Handler(func(ws *websocket.Conn) {
defer ws.Close()
var welcome = wsWelcome{}
var msg []byte
err := websocket.Message.Receive(ws, &msg)
if err != nil {
log.Println(err)
}
err = json.Unmarshal(msg, &welcome)
if err == nil {
welcomeAgents(ws, welcome, "rr")
}
var lastip string
for {
var apievent = models.APIEvent{}
var event = models.Event{}
var msg []byte
err := websocket.Message.Receive(ws, &msg)
if err != nil {
log.Println(err)
return
}
err = json.Unmarshal(msg, &apievent)
if err != nil {
log.Println(err)
}
if lastip != "" && apievent.IPData.IP == lastip {
continue
}
switch apievent.MsgType {
case "bootstrap":
log.Printf("bootstrap: %s\n", apievent.Hostname)
for index, value := range listeners {
if index != apievent.Hostname && value.ConnectionPS != nil {
err = websocket.Message.Send(value.ConnectionPS, msg)
if err != nil {
log.Println(err)
gcConnOnError(ws)
}
}
}
case "add":
session := cfg.Db.NewSession()
event.APIParse(session, apievent)
session.Close()
err := event.Insert(cfg)
if err != nil {
log.Println(err)
}
for _, value := range listeners {
if value.ConnectionPS != nil {
err = websocket.Message.Send(value.ConnectionPS, msg)
if err != nil {
log.Println(err)
gcConnOnError(ws)
}
}
}
log.Printf("ws: Inserted event")
case "init":
for _, value := range listeners {
if value.ConnectionPS != nil {
err = websocket.Message.Send(value.ConnectionPS, msg)
if err != nil {
log.Println(err)
gcConnOnError(ws)
}
}
}
default:
}
err = websocket.Message.Send(ws, "OK")
if err != nil {
log.Println(err)
}
/*
WebSocketChannel <- apievent
err = websocket.Message.Send(ws, "OK")
if err != nil {
//gcConn(ws, "rr")
log.Println(listeners)
return
}
*/
}
}).ServeHTTP(c.Response(), c.Request())
return nil
}