通道的增删接口实现,数据表和目录结构调整
This commit is contained in:
126
pkg/remote/remote.go
Normal file
126
pkg/remote/remote.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package remote
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type client struct {
|
||||
gatewayUrl string
|
||||
username string
|
||||
password string
|
||||
cloudUrl string
|
||||
token string
|
||||
}
|
||||
|
||||
var Client client
|
||||
|
||||
func Init() error {
|
||||
// todo 从环境变量中获取参数
|
||||
Client = client{
|
||||
gatewayUrl: "http://110.40.82.248:9990",
|
||||
username: "api",
|
||||
password: "123456",
|
||||
cloudUrl: "http://103.139.212.110",
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type PortConfig struct {
|
||||
Port string `json:"port"`
|
||||
Edge []string `json:"edge"`
|
||||
Type string `json:"type"`
|
||||
Time int `json:"time"`
|
||||
Status bool `json:"status"`
|
||||
Rate int `json:"rate"`
|
||||
Whitelist []string `json:"whitelist"`
|
||||
Userpass string `json:"userpass"`
|
||||
AutoEdgeConfig AutoEdgeConfig `json:"auto_edge_config"`
|
||||
}
|
||||
|
||||
type AutoEdgeConfig struct {
|
||||
Province string `json:"province"`
|
||||
City string `json:"city"`
|
||||
Isp string `json:"isp"`
|
||||
Count int `json:"count"`
|
||||
PacketLoss int `json:"packet_loss"`
|
||||
}
|
||||
|
||||
func (c *client) PortConfigs(params ...PortConfig) error {
|
||||
resp, err := c.requestCloud("/port/configs", params)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func(Body io.ReadCloser) {
|
||||
_ = Body.Close()
|
||||
}(resp.Body)
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return errors.New("failed to configure port")
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var result map[string]any
|
||||
err = json.Unmarshal(body, &result)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if result["code"] != 0 {
|
||||
return errors.New("failed to configure port")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *client) requestGateway(url string, data any) (*http.Response, error) {
|
||||
jsonData, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("POST", c.gatewayUrl+url, strings.NewReader(string(jsonData)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.SetBasicAuth(c.username, c.password)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func (c *client) requestCloud(url string, data any) (*http.Response, error) {
|
||||
jsonData, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("POST", c.cloudUrl+url, strings.NewReader(string(jsonData)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("token", c.token)
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
Reference in New Issue
Block a user