Files
jbergner dc3abf661f
Some checks failed
release-tag / release-image (push) Failing after 1m28s
init
2025-09-24 10:32:22 +02:00

56 lines
1.1 KiB
Go

package beacon
import (
"bytes"
"encoding/json"
"log"
"net/http"
"time"
"git.send.nrw/sendnrw/decent-websrv/internal/mesh"
)
type Client struct {
URL, Token string
HTTP *http.Client
}
func (c *Client) LoopRegister(n mesh.NodeInfo) {
go func() {
for {
c.register(n)
time.Sleep(30 * time.Second)
}
}()
}
func (c *Client) register(n mesh.NodeInfo) {
b, _ := json.Marshal(RegisterReq{BaseURL: n.PublicURL, MeshURL: n.MeshURL, NodeID: n.NodeID, TTL: 45})
req, _ := http.NewRequest(http.MethodPost, c.URL+"/_beacon/register", bytes.NewReader(b))
req.Header.Set("Content-Type", "application/json")
if c.Token != "" {
req.Header.Set("X-Beacon-Token", c.Token)
}
resp, err := c.HTTP.Do(req)
if err != nil {
log.Println("beacon register:", err)
return
}
resp.Body.Close()
}
func (c *Client) PollPeers() []mesh.NodeInfo {
req, _ := http.NewRequest(http.MethodGet, c.URL+"/_beacon/peers", nil)
if c.Token != "" {
req.Header.Set("X-Beacon-Token", c.Token)
}
resp, err := c.HTTP.Do(req)
if err != nil {
return nil
}
defer resp.Body.Close()
var out PeersResp
_ = json.NewDecoder(resp.Body).Decode(&out)
return out.Peers
}