From 57c9df6cfd38ccc1d3ce5ec8a152096646711430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20D=C3=ADez=20de=20la=20Fuente?= <buker@stuker.es> Date: Thu, 7 Jul 2022 00:23:36 +0200 Subject: [PATCH] restapi second release --- relaycfg/cfg.go | 21 +++++++++++++++++++-- relaylib/relaystatus.go | 4 ++-- restapi/restapi.go | 33 +++++++++++++++++++++++++++------ sub/startcmd/startcmd.go | 12 +++++------- 4 files changed, 53 insertions(+), 17 deletions(-) diff --git a/relaycfg/cfg.go b/relaycfg/cfg.go index e92a77b..7af7c81 100644 --- a/relaycfg/cfg.go +++ b/relaycfg/cfg.go @@ -7,6 +7,7 @@ package relaycfg import ( "errors" "fmt" + "os" "time" "github.com/wireleap/common/api/duration" @@ -34,6 +35,8 @@ type C struct { // NetUsage is the allocated bandwith per time period. // NetUsage is disabled if UsageCap.Duration is 0. NetUsage NetUsage `json:"network_usage,omitempty"` + // RestApi configures the API REST services + RestApi RestApi `json:"rest_api,omitempty"` // Contracts is the map of service contracts used by this wireleap-relay. Contracts map[texturl.URL]*relayentry.T `json:"contracts,omitempty"` // AutoUpgrade sets whether this relay should attempt auto-upgrades. @@ -42,6 +45,16 @@ type C struct { DangerZone DangerZone `json:"danger_zone,omitempty"` } +// RestApi +type RestApi struct { + // Socket enabling + Socket bool `json:"socket_enabled"` + // Socket Umask + Umask os.FileMode `json:"socket_umask"` + // Address:Port + Address string `json:"tcp_addr"` +} + // Network usage soft-cap // Soft-cap per contract defined in relayentry.T type NetUsage struct { @@ -65,8 +78,12 @@ func Defaults() C { AutoSubmitInterval: duration.T(time.Minute * 5), Timeout: duration.T(time.Second * 5), BufSize: 4096, - Contracts: map[texturl.URL]*relayentry.T{}, - AutoUpgrade: true, + RestApi: RestApi{ + Socket: true, + Umask: 0600, + }, + Contracts: map[texturl.URL]*relayentry.T{}, + AutoUpgrade: true, } } diff --git a/relaylib/relaystatus.go b/relaylib/relaystatus.go index e9119bf..9a06047 100644 --- a/relaylib/relaystatus.go +++ b/relaylib/relaystatus.go @@ -52,8 +52,8 @@ type RelayStatus struct { } type RelayFlags struct { - Enrolled bool - NetCapReached bool + Enrolled bool `json:"enrolled"` + NetCapReached bool `json:"network_cap_reached"` /** ToDo: More flags to define the current status - Failed heartbeats diff --git a/restapi/restapi.go b/restapi/restapi.go index 524bb99..918bd8f 100644 --- a/restapi/restapi.go +++ b/restapi/restapi.go @@ -12,6 +12,7 @@ import ( "github.com/wireleap/common/api/provide" "github.com/wireleap/common/api/status" "github.com/wireleap/relay/contractmanager" + "github.com/wireleap/relay/relaycfg" ) type T struct { @@ -44,18 +45,18 @@ func New(manager *contractmanager.Manager) (t *T) { return } -func UnixServer(p string, fm os.FileMode, t *T) error { - if err := os.RemoveAll(p); err != nil { +func UnixServer(path string, fm os.FileMode, t *T) error { + if err := os.RemoveAll(path); err != nil { return err } - l, err := net.Listen("unix", p) + l, err := net.Listen("unix", path) if err != nil { return err } defer l.Close() - if err := os.Chmod(p, fm); err != nil { + if err := os.Chmod(path, fm); err != nil { return err } @@ -63,8 +64,8 @@ func UnixServer(p string, fm os.FileMode, t *T) error { return h.Serve(l) } -func TCPServer(port string, t *T) error { - l, err := net.Listen("tcp", ":"+port) +func TCPServer(addr string, t *T) error { + l, err := net.Listen("tcp", addr) if err != nil { return err } @@ -72,3 +73,23 @@ func TCPServer(port string, t *T) error { h := &http.Server{Handler: t.mux} return h.Serve(l) } + +func Run(cfg relaycfg.C, path string, t *T) { + if len(cfg.RestApi.Address) > 0 { + go func() { + log.Println("Launching TCP Server") + if err := TCPServer(cfg.RestApi.Address, t); err != nil { + log.Print(err) + } + }() + } + + if cfg.RestApi.Socket { + go func() { + log.Println("Launching UnixSocket Server") + if err := UnixServer(path, cfg.RestApi.Umask, t); err != nil { + log.Print(err) + } + }() + } +} diff --git a/sub/startcmd/startcmd.go b/sub/startcmd/startcmd.go index 3b0ef5b..8b07f96 100644 --- a/sub/startcmd/startcmd.go +++ b/sub/startcmd/startcmd.go @@ -212,7 +212,10 @@ func serverun(fm fsdir.T) { r.Manager.Stop() fm.Del(filenames.Pid) - fm.Del(filenames.Socket) + + if c.RestApi.Socket { + fm.Del(filenames.Socket) + } return true } @@ -220,12 +223,7 @@ func serverun(fm fsdir.T) { // Launch API REST goroutine api := restapi.New(r.Manager) - go func() { - log.Println("Launching UnixSocket Server") - if err := restapi.UnixServer(fm.Path(filenames.Socket), 0660, api); err != nil { - log.Print(err) - } - }() + restapi.Run(c, fm.Path(filenames.Socket), api) // Launches go routines // check limit on open files (includes tcp connections) var rlim syscall.Rlimit