miku/users/users.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()
}