move some code

This commit is contained in:
yuzuki999
2023-05-22 21:01:31 +08:00
parent 62d2805906
commit 2f400190ff
12 changed files with 228 additions and 228 deletions

View File

@@ -3,12 +3,17 @@ package core
import (
"context"
"fmt"
"github.com/Yuzuki616/V2bX/api/panel"
"github.com/Yuzuki616/V2bX/common/builder"
"github.com/Yuzuki616/V2bX/conf"
"github.com/xtls/xray-core/common/protocol"
"github.com/xtls/xray-core/proxy"
"github.com/xtls/xray-core/proxy/shadowsocks"
"strings"
)
func (p *Core) GetUserManager(tag string) (proxy.UserManager, error) {
handler, err := p.ihm.GetHandler(context.Background(), tag)
func (c *Core) GetUserManager(tag string) (proxy.UserManager, error) {
handler, err := c.ihm.GetHandler(context.Background(), tag)
if err != nil {
return nil, fmt.Errorf("no such inbound tag: %s", err)
}
@@ -23,26 +28,8 @@ func (p *Core) GetUserManager(tag string) (proxy.UserManager, error) {
return userManager, nil
}
func (p *Core) AddUsers(users []*protocol.User, tag string) error {
userManager, err := p.GetUserManager(tag)
if err != nil {
return fmt.Errorf("get user manager error: %s", err)
}
for _, item := range users {
mUser, err := item.ToMemoryUser()
if err != nil {
return err
}
err = userManager.AddUser(context.Background(), mUser)
if err != nil {
return err
}
}
return nil
}
func (p *Core) RemoveUsers(users []string, tag string) error {
userManager, err := p.GetUserManager(tag)
func (c *Core) RemoveUsers(users []string, tag string) error {
userManager, err := c.GetUserManager(tag)
if err != nil {
return fmt.Errorf("get user manager error: %s", err)
}
@@ -55,11 +42,11 @@ func (p *Core) RemoveUsers(users []string, tag string) error {
return nil
}
func (p *Core) GetUserTraffic(email string, reset bool) (up int64, down int64) {
func (c *Core) GetUserTraffic(email string, reset bool) (up int64, down int64) {
upName := "user>>>" + email + ">>>traffic>>>uplink"
downName := "user>>>" + email + ">>>traffic>>>downlink"
upCounter := p.shm.GetCounter(upName)
downCounter := p.shm.GetCounter(downName)
upCounter := c.shm.GetCounter(upName)
downCounter := c.shm.GetCounter(downName)
if reset {
if upCounter != nil {
up = upCounter.Set(0)
@@ -77,3 +64,61 @@ func (p *Core) GetUserTraffic(email string, reset bool) (up int64, down int64) {
}
return up, down
}
type AddUsersParams struct {
Tag string
Config *conf.ControllerConfig
UserInfo []panel.UserInfo
NodeInfo *panel.NodeInfo
}
func (c *Core) AddUsers(p *AddUsersParams) (added int, err error) {
users := make([]*protocol.User, 0, len(p.UserInfo))
switch p.NodeInfo.NodeType {
case "v2ray":
if p.Config.EnableVless {
users = builder.BuildVlessUsers(p.Tag, p.UserInfo, p.Config.EnableXtls)
} else {
users = builder.BuildVmessUsers(p.Tag, p.UserInfo)
}
case "trojan":
users = builder.BuildTrojanUsers(p.Tag, p.UserInfo)
case "shadowsocks":
users = builder.BuildSSUsers(p.Tag,
p.UserInfo,
getCipherFromString(p.NodeInfo.Cipher),
p.NodeInfo.ServerKey)
default:
return 0, fmt.Errorf("unsupported node type: %s", p.NodeInfo.NodeType)
}
man, err := c.GetUserManager(p.Tag)
if err != nil {
return 0, fmt.Errorf("get user manager error: %s", err)
}
for _, u := range users {
mUser, err := u.ToMemoryUser()
if err != nil {
return 0, err
}
err = man.AddUser(context.Background(), mUser)
if err != nil {
return 0, err
}
}
return len(users), nil
}
func getCipherFromString(c string) shadowsocks.CipherType {
switch strings.ToLower(c) {
case "aes-128-gcm", "aead_aes_128_gcm":
return shadowsocks.CipherType_AES_128_GCM
case "aes-256-gcm", "aead_aes_256_gcm":
return shadowsocks.CipherType_AES_256_GCM
case "chacha20-poly1305", "aead_chacha20_poly1305", "chacha20-ietf-poly1305":
return shadowsocks.CipherType_CHACHA20_POLY1305
case "none", "plain":
return shadowsocks.CipherType_NONE
default:
return shadowsocks.CipherType_UNKNOWN
}
}