82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type NodeManager struct {
|
|
client *http.Client
|
|
token string
|
|
url string
|
|
}
|
|
|
|
func NewNodeManager(node Node) NodeManager {
|
|
client := &http.Client{Timeout: time.Second * 15}
|
|
return NodeManager{
|
|
client, node.Token, node.URL,
|
|
}
|
|
}
|
|
func (m *NodeManager) NewRequest(method, path string, body io.Reader) (*http.Request, error) {
|
|
req, err := http.NewRequest(method, fmt.Sprintf("%s%s", m.url, path), body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Add("Authorization", m.token)
|
|
return req, nil
|
|
}
|
|
func (m *NodeManager) Do(req *http.Request) (*http.Response, error) {
|
|
return m.client.Do(req)
|
|
}
|
|
func (m *NodeManager) Request(method, path string, body io.Reader) (*http.Response, error) {
|
|
req, err := m.NewRequest(method, path, body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return m.Do(req)
|
|
}
|
|
func (m *NodeManager) LoadConfig() (NodeConfig, HysteriaConfig, error) {
|
|
var _cfg NodeConfig
|
|
var hysteriaCfg HysteriaConfig
|
|
|
|
resp, err := m.Request("GET", "/config", nil)
|
|
if err != nil {
|
|
return _cfg, hysteriaCfg, err
|
|
}
|
|
defer resp.Body.Close()
|
|
data, err := ReadResponse[NodeConfigRsp](resp.Body)
|
|
if err != nil {
|
|
return _cfg, hysteriaCfg, err
|
|
}
|
|
return data.Config, data.HysteriaConfig, nil
|
|
}
|
|
func (m *NodeManager) AddUser(username, password string) (User, error) {
|
|
body := strings.NewReader(fmt.Sprintf(`{"username":"%s","password":"%s"}`, username, password))
|
|
resp, err := m.Request("POST", "/users", body)
|
|
if err != nil {
|
|
return User{}, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return ReadResponse[User](resp.Body)
|
|
}
|
|
func (m *NodeManager) GetUser(id uint64) (User, error) {
|
|
var user User
|
|
resp, err := m.Request("GET", fmt.Sprintf("/users/%d", id), nil)
|
|
if err != nil {
|
|
return user, err
|
|
}
|
|
defer resp.Body.Close()
|
|
return ReadResponse[User](resp.Body)
|
|
}
|
|
func (m *NodeManager) GetUserKey(id uint64) (string, error) {
|
|
resp, err := m.Request("GET", fmt.Sprintf("/users/%d/key", id), nil)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
return ReadResponse[string](resp.Body)
|
|
}
|