Добавил отображение всех пользователей и вывод Vless URL для пользователя
This commit is contained in:
parent
4c2f052d70
commit
a4568ba69d
2 changed files with 110 additions and 2 deletions
91
miku/main.go
91
miku/main.go
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue