package users import ( "encoding/json" "log" "github.com/google/uuid" ) type VLESSUsers []struct { Name string `json:"name"` UUID uuid.UUID `json:"uuid"` } func (u VLESSUsers) Del(user string) VLESSUsers { var newU VLESSUsers for _, v := range u { if v.Name != user { newU = append(newU, v) } } return newU } func (u VLESSUsers) Add(user string) VLESSUsers { var userStruct struct { Name string UUID uuid.UUID } userStruct.Name = user randUUID, err := uuid.NewUUID() if err != nil { log.Println(err) } userStruct.UUID = randUUID newU := append(u, struct { Name string "json:\"name\"" UUID uuid.UUID "json:\"uuid\"" }(userStruct)) return newU } func MapToStruct(toStructMap map[string]interface{}) VLESSUsers { var vlessUsers VLESSUsers usedMap := toStructMap["inbounds"].([]interface{})[0].(map[string]interface{})["users"].([]interface{}) for _, curretMap := range usedMap { userMap := curretMap.(map[string]interface{}) vlessUsers = append(vlessUsers, struct { Name string "json:\"name\"" UUID uuid.UUID "json:\"uuid\"" }{ Name: userMap["name"].(string), UUID: uuid.MustParse(userMap["uuid"].(string)), }) } return vlessUsers } func StructToConfig(vlessUsers VLESSUsers, configMap map[string]interface{}) (map[string]interface{}, error) { var toInterface []map[string]interface{} newConfigMap := configMap structJson, err := json.Marshal(vlessUsers) if err != nil { return map[string]interface{}{}, err } err = json.Unmarshal(structJson, &toInterface) if err != nil { return map[string]interface{}{}, err } newConfigMap["inbounds"].([]interface{})[0].(map[string]interface{})["users"] = toInterface return newConfigMap, nil }