Add PostgreSQL, user/squad management, remove private domains from docs

This commit is contained in:
tgvpn
2026-05-21 01:13:23 +03:00
parent d0dc8d5822
commit 5e3229e998
17 changed files with 1171 additions and 58 deletions
+85
View File
@@ -0,0 +1,85 @@
package remnawave
import (
"context"
"encoding/json"
"net/http"
)
type Squad struct {
UUID string
Name string
}
func (c *Client) ListInternalSquads(ctx context.Context) ([]Squad, error) {
return c.listSquads(ctx, "/api/internal-squads")
}
func (c *Client) ListExternalSquads(ctx context.Context) ([]Squad, error) {
return c.listSquads(ctx, "/api/external-squads")
}
func (c *Client) listSquads(ctx context.Context, path string) ([]Squad, error) {
resp, body, err := c.get(ctx, path)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, apiError(resp.StatusCode, body)
}
return parseSquads(body), nil
}
func parseSquads(body []byte) []Squad {
var wrap map[string]json.RawMessage
if json.Unmarshal(body, &wrap) != nil {
return nil
}
if raw, ok := wrap["response"]; ok {
if list := squadsFromRaw(raw); len(list) > 0 {
return list
}
}
return squadsFromRaw(body)
}
func squadsFromRaw(data []byte) []Squad {
var arr []map[string]json.RawMessage
if json.Unmarshal(data, &arr) == nil {
return squadsFromMaps(arr)
}
var obj map[string]json.RawMessage
if json.Unmarshal(data, &obj) != nil {
return nil
}
for _, key := range []string{"internalSquads", "externalSquads", "squads"} {
if raw, ok := obj[key]; ok {
if list := squadsFromRaw(raw); len(list) > 0 {
return list
}
}
}
for _, v := range obj {
if list := squadsFromRaw(v); len(list) > 0 {
return list
}
}
return nil
}
func squadsFromMaps(items []map[string]json.RawMessage) []Squad {
out := make([]Squad, 0, len(items))
for _, m := range items {
s := Squad{}
if raw, ok := m["uuid"]; ok {
_ = json.Unmarshal(raw, &s.UUID)
}
if raw, ok := m["name"]; ok {
_ = json.Unmarshal(raw, &s.Name)
}
if s.UUID != "" {
out = append(out, s)
}
}
return out
}