71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
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()
|
|
}
|