initial commit
This commit is contained in:
81
app/manager.go
Normal file
81
app/manager.go
Normal file
@@ -0,0 +1,81 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user