package users import ( "errors" "fmt" "strings" "github.com/google/uuid" ) type User struct { Name string `json:"name"` UUID uuid.UUID `json:"uuid"` } type VLESSUsers []User func (u VLESSUsers) Del(user string) VLESSUsers { var newU VLESSUsers = make(VLESSUsers, 0, len(u)) for _, v := range u { if v.Name != user { newU = append(newU, v) } } return newU } func (u VLESSUsers) checkInConfig(userName string) bool { for _, v := range u { if v.Name == userName { return true } } return false } func (u VLESSUsers) Add(userName string) (VLESSUsers, error) { if u.checkInConfig(userName) { return nil, errors.New("пользователь уже добавлен в конфиг") } newUUID, err := uuid.NewRandom() if err != nil { return nil, err } newUser := User{ Name: userName, UUID: newUUID, } 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() }