move extra to NetworkSettings

This commit is contained in:
Yuzuki616 2023-07-14 12:54:09 +08:00
parent b3a8b27c2f
commit 15efffba0d
4 changed files with 60 additions and 17 deletions

View File

@ -2,13 +2,16 @@ package panel
import ( import (
"fmt" "fmt"
"github.com/Yuzuki616/V2bX/conf"
"github.com/goccy/go-json"
"reflect" "reflect"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/Yuzuki616/V2bX/common/crypt"
"github.com/Yuzuki616/V2bX/conf"
"github.com/goccy/go-json"
) )
type CommonNodeRsp struct { type CommonNodeRsp struct {
@ -97,7 +100,6 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("decode common params error: %s", err) return nil, fmt.Errorf("decode common params error: %s", err)
} }
var extra []byte
for i := range common.Routes { // parse rules from routes for i := range common.Routes { // parse rules from routes
var matchs []string var matchs []string
if _, ok := common.Routes[i].Match.(string); ok { if _, ok := common.Routes[i].Match.(string); ok {
@ -117,10 +119,6 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
node.Rules = append(node.Rules, regexp.MustCompile(v)) node.Rules = append(node.Rules, regexp.MustCompile(v))
} }
case "dns": case "dns":
if matchs[0] != "extra" {
break
}
extra = []byte(strings.Join(matchs[1:], ""))
} }
} }
node.ServerName = common.ServerName node.ServerName = common.ServerName
@ -142,11 +140,14 @@ func (c *Client) GetNodeInfo() (node *NodeInfo, err error) {
if rsp.Tls == 1 { if rsp.Tls == 1 {
node.Tls = true node.Tls = true
} }
if len(extra) != 0 { err = json.Unmarshal(rsp.NetworkSettings, &node.ExtraConfig)
err = json.Unmarshal(extra, &node.ExtraConfig)
if err != nil { if err != nil {
return nil, fmt.Errorf("decode v2ray extra error: %s", err) return nil, fmt.Errorf("decode v2ray extra error: %s", err)
} }
if node.ExtraConfig.RealityConfig.PrivateKey != "" {
temp := crypt.GenShaHash([]byte(c.APIHost + c.Token))
temp, err = crypt.AesDecrypt(node.ExtraConfig.RealityConfig.PrivateKey, []byte(temp))
node.ExtraConfig.RealityConfig.PrivateKey = temp
} }
case "shadowsocks": case "shadowsocks":
rsp := ShadowsocksNodeRsp{} rsp := ShadowsocksNodeRsp{}

View File

@ -3,14 +3,15 @@ package panel
import ( import (
"bufio" "bufio"
"fmt" "fmt"
"github.com/Yuzuki616/V2bX/conf"
"github.com/go-resty/resty/v2"
"log" "log"
"os" "os"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/Yuzuki616/V2bX/conf"
"github.com/go-resty/resty/v2"
) )
// Panel is the interface for different panel's api. // Panel is the interface for different panel's api.
@ -18,7 +19,7 @@ import (
type Client struct { type Client struct {
client *resty.Client client *resty.Client
APIHost string APIHost string
Key string Token string
NodeType string NodeType string
NodeId int NodeId int
LocalRuleList []*regexp.Regexp LocalRuleList []*regexp.Regexp
@ -48,7 +49,7 @@ func New(c *conf.ApiConfig) (*Client, error) {
default: default:
return nil, fmt.Errorf("unsupported Node type: %s", c.NodeType) return nil, fmt.Errorf("unsupported Node type: %s", c.NodeType)
} }
// Create Key for each requests // set params
client.SetQueryParams(map[string]string{ client.SetQueryParams(map[string]string{
"node_type": c.NodeType, "node_type": c.NodeType,
"node_id": strconv.Itoa(c.NodeID), "node_id": strconv.Itoa(c.NodeID),
@ -58,7 +59,7 @@ func New(c *conf.ApiConfig) (*Client, error) {
localRuleList := readLocalRuleList(c.RuleListPath) localRuleList := readLocalRuleList(c.RuleListPath)
return &Client{ return &Client{
client: client, client: client,
Key: c.Key, Token: c.Key,
APIHost: c.APIHost, APIHost: c.APIHost,
NodeType: c.NodeType, NodeType: c.NodeType,
NodeId: c.NodeID, NodeId: c.NodeID,

30
common/crypt/aes.go Normal file
View File

@ -0,0 +1,30 @@
package crypt
import (
"crypto/aes"
"encoding/base64"
)
func AesEncrypt(data []byte, key []byte) (string, error) {
a, err := aes.NewCipher(key)
if err != nil {
return "", err
}
en := make([]byte, 0, len(data))
a.Encrypt(en, data)
return base64.StdEncoding.EncodeToString(en), nil
}
func AesDecrypt(data string, key []byte) (string, error) {
d, err := base64.StdEncoding.DecodeString(data)
if err != nil {
return "", err
}
a, err := aes.NewCipher(key)
if err != nil {
return "", err
}
de := make([]byte, 0, len(data))
a.Decrypt(de, d)
return string(de), nil
}

11
common/crypt/sha.go Normal file
View File

@ -0,0 +1,11 @@
package crypt
import (
"crypto/sha256"
"encoding/hex"
)
func GenShaHash(data []byte) string {
d := sha256.Sum256(data)
return hex.EncodeToString(d[:])
}