From b6866f8540ac3819fdbb7b7baac249d9c91a816e Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Sun, 4 May 2025 19:31:33 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D0=B2=D0=B5=D1=80=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20Map=20=D0=B2?= =?UTF-8?q?=20Struct=20=D0=B8=20=D0=BE=D0=B1=D1=80=D0=B0=D1=82=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++- miku/go.mod | 9 +++++++ miku/main.go | 28 +++++++++++++++++++ users/go.mod | 5 ++++ users/users.go | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 miku/go.mod create mode 100644 miku/main.go create mode 100644 users/go.mod create mode 100644 users/users.go diff --git a/.gitignore b/.gitignore index 7a69ae4..9fa1115 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,6 @@ go.work.sum # env file .env -testconfig.json \ No newline at end of file +testconfig.json +go.sum +main \ No newline at end of file diff --git a/miku/go.mod b/miku/go.mod new file mode 100644 index 0000000..3efb0e9 --- /dev/null +++ b/miku/go.mod @@ -0,0 +1,9 @@ +module main + +go 1.24.2 + +replace miku/users => ../users/ + +require miku/users v0.0.0-00010101000000-000000000000 + +require github.com/google/uuid v1.6.0 // indirect diff --git a/miku/main.go b/miku/main.go new file mode 100644 index 0000000..7257d90 --- /dev/null +++ b/miku/main.go @@ -0,0 +1,28 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "miku/users" + "os" +) + +func main() { + var confFile map[string]interface{} + file, err := os.ReadFile("../testconfig.json") + if err != nil { + fmt.Println(err) + } + err = json.Unmarshal(file, &confFile) + if err != nil { + fmt.Println(err) + } + vlessUsers := users.MapToStruct(confFile) + newUsers := vlessUsers.Add("test") + newConfFile, err := users.StructToConfig(newUsers, confFile) + if err != nil { + log.Println(err) + } + log.Println(newConfFile) +} diff --git a/users/go.mod b/users/go.mod new file mode 100644 index 0000000..f799f58 --- /dev/null +++ b/users/go.mod @@ -0,0 +1,5 @@ +module users + +go 1.24.2 + +require github.com/google/uuid v1.6.0 diff --git a/users/users.go b/users/users.go new file mode 100644 index 0000000..3256c26 --- /dev/null +++ b/users/users.go @@ -0,0 +1,73 @@ +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 +}