Добавил отображение всех пользователей и вывод Vless URL для пользователя

This commit is contained in:
B4D_US3R 2025-05-05 16:53:10 +05:00
parent 4c2f052d70
commit a4568ba69d
2 changed files with 110 additions and 2 deletions

View file

@ -41,7 +41,11 @@ func main() {
var confFile map[string]any
configPath, ok := c.Flags[0].Get().(string)
if !ok {
return errors.New("не удалось преобразовать тип")
return errors.New("не удалось преобразовать тип пути до конфига")
}
domain, ok := c.Flags[1].Get().(string)
if !ok {
return errors.New("не удалось преобразовать тип доменного имени")
}
fullpath, err := filepath.Abs(configPath)
if err != nil {
@ -74,7 +78,8 @@ func main() {
return nil
}
fileToWrite.Write(newJson)
fmt.Printf("Пользователь %s добавлен в конфиг %s", c.Args().First(), fullpath)
fmt.Printf("Пользователь %s добавлен в конфиг %s\n", c.Args().First(), fullpath)
fmt.Printf("Vless URL: %s\n", vlessUsers.VlessURL(c.Args().First(), domain))
return nil
},
},
@ -134,6 +139,88 @@ func main() {
return nil
},
},
{
Name: "list",
Aliases: []string{"l"},
Usage: "Выводит всех пользователей в конфиге",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "config",
Aliases: []string{"c"},
Value: "/etc/sing-box/config.json",
Usage: "Указывает местоположение конфига",
},
},
Action: func(ctx context.Context, c *cli.Command) error {
var confFile map[string]any
configPath, ok := c.Flags[0].Get().(string)
if !ok {
return errors.New("не удалось преобразовать тип")
}
fullpath, err := filepath.Abs(configPath)
if err != nil {
return nil
}
fmt.Println(fullpath)
file, err := os.ReadFile(fullpath)
if err != nil {
return err
}
json.Unmarshal(file, &confFile)
vlessUsers, err := supporter.MapToStruct(confFile)
if err != nil {
return err
}
fmt.Println(vlessUsers.List())
return nil
},
},
{
Name: "url",
Aliases: []string{"u"},
Usage: "Выводит Vless URL для определенного пользователя",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "config",
Aliases: []string{"c"},
Value: "/etc/sing-box/config.json",
Usage: "Указывает местоположение конфига",
},
&cli.StringFlag{
Name: "domain",
Aliases: []string{"d"},
Value: "vpn.catgirls.asia",
Usage: "Указывает доменное имя, по которому клиенты могут выполнять подключение",
},
},
Action: func(ctx context.Context, c *cli.Command) error {
var confFile map[string]any
configPath, ok := c.Flags[0].Get().(string)
if !ok {
return errors.New("не удалось преобразовать тип")
}
domain, ok := c.Flags[1].Get().(string)
if !ok {
return errors.New("не удалось преобразовать тип доменного имени")
}
fullpath, err := filepath.Abs(configPath)
if err != nil {
return nil
}
fmt.Println(fullpath)
file, err := os.ReadFile(fullpath)
if err != nil {
return err
}
json.Unmarshal(file, &confFile)
vlessUsers, err := supporter.MapToStruct(confFile)
if err != nil {
return err
}
fmt.Printf("Vless URL: %s\n", vlessUsers.VlessURL(c.Args().First(), domain))
return nil
},
},
},
}
if err := cmd.Run(context.Background(), os.Args); err != nil {

View file

@ -2,6 +2,8 @@ package users
import (
"errors"
"fmt"
"strings"
"github.com/google/uuid"
)
@ -48,3 +50,22 @@ func (u VLESSUsers) Add(userName string) (VLESSUsers, error) {
}
return append(u, newUser), nil
}
func (u VLESSUsers) List() string {
var b strings.Builder
for k, v := range u {
fmt.Fprintf(&b, "%d.\t%s\t%s\n", k, v.Name, v.UUID.String())
}
return b.String()
}
func (u VLESSUsers) VlessURL(username string, domain string) string {
var b strings.Builder
for _, v := range u {
if v.Name == username {
fmt.Fprintf(&b, "vless://%s@%s:53666?security=&type=tcp&encryption=none#%s", v.UUID.String(), domain, v.Name)
break
}
}
return b.String()
}