Добавил отображение всех пользователей и вывод 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
|
var confFile map[string]any
|
||||||
configPath, ok := c.Flags[0].Get().(string)
|
configPath, ok := c.Flags[0].Get().(string)
|
||||||
if !ok {
|
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)
|
fullpath, err := filepath.Abs(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -74,7 +78,8 @@ func main() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
fileToWrite.Write(newJson)
|
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
|
return nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -134,6 +139,88 @@ func main() {
|
||||||
return nil
|
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 {
|
if err := cmd.Run(context.Background(), os.Args); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ package users
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
|
|
@ -48,3 +50,22 @@ func (u VLESSUsers) Add(userName string) (VLESSUsers, error) {
|
||||||
}
|
}
|
||||||
return append(u, newUser), nil
|
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