From 85cb445213f6227e19c9be7f96a155c5360e625d Mon Sep 17 00:00:00 2001 From: yoneyan Date: Tue, 6 Apr 2021 04:56:13 +0900 Subject: [PATCH] [fix] #15, #16 --- .gitignore | 2 +- pkg/api/api.go | 6 +- pkg/api/core/auth/interface.go | 9 +- pkg/api/core/auth/v0/admin.go | 3 +- pkg/api/core/auth/v0/auth.go | 76 ++++--- pkg/api/core/common/interface.go | 9 + pkg/api/core/controller/interface.go | 11 +- pkg/api/core/controller/v0/admin.go | 22 +- pkg/api/core/controller/v0/node.go | 38 ---- pkg/api/core/controller/v0/user.go | 12 +- pkg/api/core/group/interface.go | 34 +-- pkg/api/core/group/v0/admin.go | 51 ++--- pkg/api/core/group/v0/check.go | 4 +- pkg/api/core/group/v0/group.go | 62 +++--- pkg/api/core/group/v0/update.go | 6 +- pkg/api/core/interface.go | 149 +++++++++++++ pkg/api/core/node/interface.go | 31 +-- pkg/api/core/node/nic/interface.go | 33 +-- pkg/api/core/node/nic/v0/admin.go | 56 ++--- pkg/api/core/node/nic/v0/check.go | 4 +- pkg/api/core/node/nic/v0/update.go | 4 +- pkg/api/core/node/pci/v0/pci.go | 12 +- pkg/api/core/node/storage/interface.go | 29 +-- pkg/api/core/node/storage/v0/admin.go | 58 ++--- pkg/api/core/node/storage/v0/check.go | 4 +- pkg/api/core/node/storage/v0/update.go | 4 +- pkg/api/core/node/usb/v0/pci.go | 12 +- pkg/api/core/node/v0/admin.go | 66 +++--- pkg/api/core/node/v0/check.go | 4 +- pkg/api/core/node/v0/update.go | 4 +- pkg/api/core/notice/interface.go | 26 +-- pkg/api/core/notice/v0/admin.go | 55 ++--- pkg/api/core/notice/v0/check.go | 4 +- pkg/api/core/notice/v0/notice.go | 18 +- pkg/api/core/notice/v0/update.go | 4 +- pkg/api/core/region/interface.go | 25 +-- pkg/api/core/region/v0/admin.go | 56 ++--- pkg/api/core/region/v0/check.go | 4 +- pkg/api/core/region/v0/update.go | 4 +- pkg/api/core/region/zone/interface.go | 30 +-- pkg/api/core/region/zone/v0/admin.go | 58 ++--- pkg/api/core/region/zone/v0/check.go | 4 +- pkg/api/core/region/zone/v0/update.go | 4 +- pkg/api/core/support/chat/interface.go | 16 +- pkg/api/core/support/chat/v0/chat.go | 47 +++-- pkg/api/core/support/interface.go | 20 +- pkg/api/core/support/ticket/interface.go | 57 +++-- pkg/api/core/support/ticket/v0/admin.go | 176 ++++++++++------ pkg/api/core/support/ticket/v0/ticket.go | 246 ++++++++++++++++------ pkg/api/core/support/ticket/v0/update.go | 4 +- pkg/api/core/token/interface.go | 26 +-- pkg/api/core/token/v0/admin.go | 71 ++++--- pkg/api/core/token/v0/remove.go | 5 +- pkg/api/core/token/v0/token.go | 53 ++--- pkg/api/core/tool/config/config.go | 5 + pkg/api/core/user/interface.go | 29 +-- pkg/api/core/user/v0/admin.go | 92 ++++---- pkg/api/core/user/v0/check.go | 4 +- pkg/api/core/user/v0/update.go | 29 +-- pkg/api/core/user/v0/user.go | 128 ++++++----- pkg/api/core/vm/interface.go | 60 +++--- pkg/api/core/vm/v0/admin.go | 194 ++++++++++++----- pkg/api/core/vm/v0/check.go | 4 +- pkg/api/core/vm/v0/power_admin.go | 7 +- pkg/api/core/vm/v0/template.go | 67 ++++-- pkg/api/core/vm/v0/update.go | 6 +- pkg/api/core/vm/v0/vm.go | 39 ++-- pkg/api/core/vm/v0/vm_test.go | 148 +++++++------ pkg/api/core/vm/v0/websocket.go | 6 +- pkg/api/core/wsvnc/v0/wsvnc.go | 9 +- pkg/api/store/group/v0/group.go | 27 +-- pkg/api/store/node/nic/v0/nic.go | 15 +- pkg/api/store/node/storage/v0/storage.go | 15 +- pkg/api/store/node/v0/node.go | 15 +- pkg/api/store/notice/v0/notice.go | 15 +- pkg/api/store/region/v0/region.go | 15 +- pkg/api/store/region/zone/v0/zone.go | 15 +- pkg/api/store/support/chat/v0/chat.go | 17 +- pkg/api/store/support/ticket/v0/ticket.go | 51 +++-- pkg/api/store/token/v0/token.go | 29 ++- pkg/api/store/user/v0/user.go | 36 ++-- pkg/api/store/vm/nic/v0/nic.go | 194 ++++++++--------- pkg/api/store/vm/storage/v0/storage.go | 188 ++++++++--------- pkg/api/store/vm/v0/vm.go | 23 +- pkg/backend/cmd/init.go | 29 ++- 85 files changed, 1888 insertions(+), 1451 deletions(-) create mode 100644 pkg/api/core/common/interface.go delete mode 100644 pkg/api/core/controller/v0/node.go create mode 100644 pkg/api/core/interface.go diff --git a/.gitignore b/.gitignore index 2486a34..5f97ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/cmd/backend/con.conf +/cmd/backend/con.json /cmd/backend/template.conf diff --git a/pkg/api/api.go b/pkg/api/api.go index 29fdec8..9eee8b9 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -36,7 +36,7 @@ func AdminRestAPI() error { // Controller // v1.POST("/controller/chat", controller.ReceiveChatAdmin) - v1.POST("/controller/node", controller.ReceiveNode) + //v1.POST("/controller/node", controller.ReceiveNode) // Notice // @@ -194,7 +194,7 @@ func UserRestAPI() { // Controller // v1.POST("/controller/chat", controller.ReceiveChatUser) - v1.POST("/controller/node", controller.ReceiveNode) + //v1.POST("/controller/node", controller.ReceiveNode) // // User @@ -233,7 +233,7 @@ func UserRestAPI() { // Support // v1.POST("/support", ticket.Create) - v1.GET("/support", ticket.GetTitle) + //v1.GET("/support", ticket.GetTitle) v1.GET("/support/:id", ticket.Get) // diff --git a/pkg/api/core/auth/interface.go b/pkg/api/core/auth/interface.go index 0837593..1c2332a 100644 --- a/pkg/api/core/auth/interface.go +++ b/pkg/api/core/auth/interface.go @@ -1,18 +1,17 @@ package auth import ( - "github.com/vmmgr/controller/pkg/api/core/group" - "github.com/vmmgr/controller/pkg/api/core/user" + "github.com/vmmgr/controller/pkg/api/core" ) type UserResult struct { - User user.User + User core.User Err error } type GroupResult struct { - Group group.Group - User user.User + Group core.Group + User core.User Err error } diff --git a/pkg/api/core/auth/v0/admin.go b/pkg/api/core/auth/v0/admin.go index bd45465..6181ace 100644 --- a/pkg/api/core/auth/v0/admin.go +++ b/pkg/api/core/auth/v0/admin.go @@ -2,6 +2,7 @@ package v0 import ( "fmt" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/auth" "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/core/tool/config" @@ -18,7 +19,7 @@ func AdminRadiusAuthentication(data auth.AdminStruct) auth.AdminResult { } func AdminAuthentication(accessToken string) auth.AdminResult { - tokenResult := dbToken.Get(token.AdminToken, &token.Token{AccessToken: accessToken}) + tokenResult := dbToken.Get(token.AdminToken, &core.Token{AccessToken: accessToken}) if tokenResult.Err != nil { return auth.AdminResult{Err: tokenResult.Err} } diff --git a/pkg/api/core/auth/v0/auth.go b/pkg/api/core/auth/v0/auth.go index 88b5163..9193474 100644 --- a/pkg/api/core/auth/v0/auth.go +++ b/pkg/api/core/auth/v0/auth.go @@ -3,16 +3,15 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/auth" - "github.com/vmmgr/controller/pkg/api/core/group" "github.com/vmmgr/controller/pkg/api/core/token" - "github.com/vmmgr/controller/pkg/api/core/user" - dbGroup "github.com/vmmgr/controller/pkg/api/store/group/v0" dbToken "github.com/vmmgr/controller/pkg/api/store/token/v0" - dbUser "github.com/vmmgr/controller/pkg/api/store/user/v0" + "log" + "time" ) -func UserAuthentication(data token.Token) auth.UserResult { +func UserAuthentication(data core.Token) auth.UserResult { resultToken := dbToken.Get(token.UserTokenAndAccessToken, &data) if len(resultToken.Token) == 0 { return auth.UserResult{Err: fmt.Errorf("auth failed")} @@ -20,40 +19,63 @@ func UserAuthentication(data token.Token) auth.UserResult { if resultToken.Err != nil { return auth.UserResult{Err: fmt.Errorf("db error")} } - resultUser := dbUser.Get(user.ID, &user.User{Model: gorm.Model{ID: resultToken.Token[0].UserID}}) - if resultUser.Err != nil { - return auth.UserResult{Err: fmt.Errorf("db error")} - } - if 100 <= resultUser.User[0].Status { + + if 0 < *resultToken.Token[0].User.ExpiredStatus { return auth.UserResult{Err: fmt.Errorf("deleted this user")} } - return auth.UserResult{User: resultUser.User[0], Err: nil} + + go renewProcess(resultToken.Token[0]) + + return auth.UserResult{User: resultToken.Token[0].User, Err: nil} } -func GroupAuthentication(data token.Token) auth.GroupResult { +// errorType 0: 未審査の場合でもエラーを返す 1: 未審査の場合エラーを返さない +func GroupAuthentication(errorType uint, data core.Token) auth.GroupResult { resultToken := dbToken.Get(token.UserTokenAndAccessToken, &data) if len(resultToken.Token) == 0 { return auth.GroupResult{Err: fmt.Errorf("auth failed")} } if resultToken.Err != nil { - return auth.GroupResult{Err: fmt.Errorf("db error")} - } - resultUser := dbUser.Get(user.ID, &user.User{Model: gorm.Model{ID: resultToken.Token[0].UserID}}) - if resultUser.Err != nil { - return auth.GroupResult{Err: fmt.Errorf("db error")} + return auth.GroupResult{Err: fmt.Errorf("error: no token")} } - if resultUser.User[0].Status == 0 || 100 <= resultUser.User[0].Status { - return auth.GroupResult{Err: fmt.Errorf("user status error")} + + if 0 < *resultToken.Token[0].User.ExpiredStatus { + return auth.GroupResult{Err: fmt.Errorf("deleted this user")} } - if resultUser.User[0].GroupID == 0 { + + if resultToken.Token[0].User.GroupID == 0 { return auth.GroupResult{Err: fmt.Errorf("no group")} } - resultGroup := dbGroup.Get(group.ID, &group.Group{Model: gorm.Model{ID: resultUser.User[0].GroupID}}) - if resultGroup.Err != nil { - return auth.GroupResult{Err: fmt.Errorf("db error")} - } - if resultGroup.Group[0].Status < 2 || 1000 <= resultGroup.Group[0].Status { - return auth.GroupResult{Err: fmt.Errorf("error: group status")} + + //// 未審査+errorType = 0の場合 + //if !*resultcore.Token[0].User.Group.Pass && errorType == 0 { + // return auth.GroupResult{Err: fmt.Errorf("error: unexamined")} + //} + //// アカウント失効時の動作 + //if *resultcore.Token[0].User.Group.ExpiredStatus == 1 { + // return auth.GroupResult{Err: fmt.Errorf("error: discontinued by Master Account")} + //} + //if *resultcore.Token[0].User.Group.ExpiredStatus == 2 { + // return auth.GroupResult{Err: fmt.Errorf("error: discontinuation by the steering committee")} + //} + //if *resultcore.Token[0].User.Group.ExpiredStatus == 3 { + // return auth.GroupResult{Err: fmt.Errorf("error: discontinuation due to failed review")} + //} + + go renewProcess(resultToken.Token[0]) + + return auth.GroupResult{User: resultToken.Token[0].User, Err: nil} +} + +func renewProcess(t core.Token) { + if t.ExpiredAt.UTC().Unix() < time.Now().Add(10*time.Minute).UTC().Unix() { + if err := dbToken.Update(token.UpdateToken, &core.Token{ + Model: gorm.Model{ID: t.ID}, + ExpiredAt: t.ExpiredAt.Add(10 * time.Minute), + }); err != nil { + log.Println(err) + } else { + log.Println("Success!!") + } } - return auth.GroupResult{User: resultUser.User[0], Group: resultGroup.Group[0], Err: nil} } diff --git a/pkg/api/core/common/interface.go b/pkg/api/core/common/interface.go new file mode 100644 index 0000000..55b2469 --- /dev/null +++ b/pkg/api/core/common/interface.go @@ -0,0 +1,9 @@ +package common + +type Error struct { + Error string `json:"error"` +} + +type Result struct { + Result string `json:"result"` +} diff --git a/pkg/api/core/controller/interface.go b/pkg/api/core/controller/interface.go index 3fb66b6..504f80c 100644 --- a/pkg/api/core/controller/interface.go +++ b/pkg/api/core/controller/interface.go @@ -12,17 +12,8 @@ type Chat struct { Err string `json:"error"` CreatedAt time.Time `json:"created_at"` UserID uint `json:"user_id"` + UserName string `json:"user_name"` GroupID uint `json:"group_id"` Admin bool `json:"admin"` Message string `json:"message"` } - -type Node struct { - GroupID uint `json:"group_id"` - UUID string `json:"uuid"` - FilePath string `json:"file_path"` - Code uint `json:"code"` //1: Image Copy 2:VM Create - Progress uint `json:"progress"` - Status bool `json:"status ,string"` - Comment string `json:"comment"` -} diff --git a/pkg/api/core/controller/v0/admin.go b/pkg/api/core/controller/v0/admin.go index 767b9f1..76269d9 100644 --- a/pkg/api/core/controller/v0/admin.go +++ b/pkg/api/core/controller/v0/admin.go @@ -20,8 +20,15 @@ func SendChatAdmin(data controller.Chat) { client := &http.Client{} client.Timeout = time.Second * 5 - body, _ := json.Marshal(controller.Chat{Err: data.Err, CreatedAt: data.CreatedAt, UserID: data.UserID, - GroupID: data.GroupID, Admin: data.Admin, Message: data.Message}) + body, _ := json.Marshal(controller.Chat{ + Err: data.Err, + CreatedAt: data.CreatedAt, + UserID: data.UserID, + UserName: data.UserName, + GroupID: data.GroupID, + Admin: data.Admin, + Message: data.Message, + }) //Header部分 header := http.Header{} @@ -62,8 +69,13 @@ func ReceiveChatAdmin(c *gin.Context) { } var input controller.Chat - c.BindJSON(&input) + log.Println(c.BindJSON(&input)) - support.Broadcast <- support.WebSocketResult{CreatedAt: input.CreatedAt, - UserID: input.UserID, GroupID: input.GroupID, Admin: input.Admin, Message: input.Message} + support.Broadcast <- support.WebSocketResult{ + CreatedAt: time.Now(), + UserID: input.UserID, + GroupID: input.GroupID, + Admin: input.Admin, + Message: input.Message, + } } diff --git a/pkg/api/core/controller/v0/node.go b/pkg/api/core/controller/v0/node.go deleted file mode 100644 index 43c2c08..0000000 --- a/pkg/api/core/controller/v0/node.go +++ /dev/null @@ -1,38 +0,0 @@ -package v0 - -import ( - "github.com/gin-gonic/gin" - "github.com/vmmgr/controller/pkg/api/core/controller" - request "github.com/vmmgr/controller/pkg/api/core/request/v0" - "github.com/vmmgr/controller/pkg/api/core/vm" - "log" - "time" -) - -func ReceiveNode(c *gin.Context) { - var input controller.Node - err := c.BindJSON(&input) - if err != nil { - log.Println(err) - } - log.Println(input) - - vm.ClientBroadcast <- vm.WebSocketResult{ - CreatedAt: time.Now(), - Progress: input.Progress, - GroupID: input.GroupID, - Status: input.Status, - UUID: input.UUID, - FilePath: input.FilePath, - Message: input.Comment, - } - - if input.Code == 2 && input.Progress == 100 && input.Status { - request.Delete(input.UUID) - } - - if !input.Status { - log.Println(input.Comment) - request.Delete(input.UUID) - } -} diff --git a/pkg/api/core/controller/v0/user.go b/pkg/api/core/controller/v0/user.go index fe20fd6..43a6247 100644 --- a/pkg/api/core/controller/v0/user.go +++ b/pkg/api/core/controller/v0/user.go @@ -68,9 +68,13 @@ func ReceiveChatUser(c *gin.Context) { } var input controller.Chat - c.BindJSON(&input) - - support.Broadcast <- support.WebSocketResult{CreatedAt: input.CreatedAt, - UserID: input.UserID, GroupID: input.GroupID, Admin: input.Admin, Message: input.Message} + log.Println(c.BindJSON(&input)) + support.Broadcast <- support.WebSocketResult{ + CreatedAt: time.Now(), + UserID: input.UserID, + GroupID: input.GroupID, + Admin: input.Admin, + Message: input.Message, + } } diff --git a/pkg/api/core/group/interface.go b/pkg/api/core/group/interface.go index cb7c4f5..6ee5c5a 100644 --- a/pkg/api/core/group/interface.go +++ b/pkg/api/core/group/interface.go @@ -1,7 +1,7 @@ package group import ( - "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" ) const ( @@ -16,37 +16,25 @@ const ( UpdateAll = 110 ) -type Group struct { - gorm.Model - Org string `json:"org"` - Status uint `json:"status"` - Comment string `json:"comment"` - Vlan uint `json:"vlan"` - Lock bool `json:"lock"` - MaxVM uint `json:"max_VM"` - MaxCPU uint `json:"max_cpu"` - MaxMemory uint `json:"max_memory"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Group []Group `json:"group"` + Status bool `json:"status"` + Error string `json:"error"` + Group []core.Group `json:"group"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - Group Group `json:"group"` + Status bool `json:"status"` + Error string `json:"error"` + Group core.Group `json:"group"` } type ResultAll struct { - Status bool `json:"status"` - Error string `json:"error"` - Group Group `json:"group"` + Status bool `json:"status"` + Error string `json:"error"` + Group core.Group `json:"group"` } type ResultDatabase struct { Err error - Group []Group + Group []core.Group } diff --git a/pkg/api/core/group/v0/admin.go b/pkg/api/core/group/v0/admin.go index 41d35cc..658c74d 100644 --- a/pkg/api/core/group/v0/admin.go +++ b/pkg/api/core/group/v0/admin.go @@ -3,110 +3,111 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/group" - "github.com/vmmgr/controller/pkg/api/core/token" dbGroup "github.com/vmmgr/controller/pkg/api/store/group/v0" "net/http" "strconv" ) func AddAdmin(c *gin.Context) { - var input group.Group + var input core.Group resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) if _, err := dbGroup.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, group.Result{Status: true}) + c.JSON(http.StatusOK, group.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - if err := dbGroup.Delete(&group.Group{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + if err := dbGroup.Delete(&core.Group{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, group.Result{Status: true}) + c.JSON(http.StatusOK, group.Result{}) } func UpdateAdmin(c *gin.Context) { - var input group.Group + var input core.Group resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) - tmp := dbGroup.Get(group.ID, &group.Group{Model: gorm.Model{ID: input.ID}}) + tmp := dbGroup.Get(group.ID, &core.Group{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Group[0]) if err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } if err := dbGroup.Update(group.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, group.Result{Status: true}) + c.JSON(http.StatusOK, group.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - result := dbGroup.Get(group.ID, &group.Group{Model: gorm.Model{ID: uint(id)}}) + result := dbGroup.Get(group.ID, &core.Group{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, group.Result{Status: true, Group: result.Group}) + c.JSON(http.StatusOK, group.Result{Group: result.Group}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbGroup.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, group.Result{Status: true, Group: result.Group}) + c.JSON(http.StatusOK, group.Result{Group: result.Group}) } } diff --git a/pkg/api/core/group/v0/check.go b/pkg/api/core/group/v0/check.go index cd823a9..9e43276 100644 --- a/pkg/api/core/group/v0/check.go +++ b/pkg/api/core/group/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/group" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input group.Group) error { +func check(input core.Group) error { // check if input.Org == "" { return fmt.Errorf("no data: org") diff --git a/pkg/api/core/group/v0/group.go b/pkg/api/core/group/v0/group.go index 0e020fe..8c06941 100644 --- a/pkg/api/core/group/v0/group.go +++ b/pkg/api/core/group/v0/group.go @@ -3,9 +3,10 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/group" - "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/core/user" dbGroup "github.com/vmmgr/controller/pkg/api/store/group/v0" dbUser "github.com/vmmgr/controller/pkg/api/store/user/v0" @@ -14,67 +15,70 @@ import ( //参照関連のエラーが出る可能性あるかもしれない func Add(c *gin.Context) { - var input group.Group + var input core.Group userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") c.BindJSON(&input) - userResult := auth.UserAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + userResult := auth.UserAuthentication(core.Token{UserToken: userToken, AccessToken: accessToken}) if userResult.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: userResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: userResult.Err.Error()}) return } // check authority if userResult.User.Level > 1 { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: "You don't have authority this operation"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "You don't have authority this operation"}) return } if userResult.User.GroupID != 0 { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: "error: You can't create new group", Group: nil}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: You can't create new group"}) return } if err := check(input); err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - result, err := dbGroup.Create(&group.Group{Org: input.Org, Status: 0, Comment: input.Comment}) + result, err := dbGroup.Create(&core.Group{Org: input.Org, Status: 0, Comment: input.Comment}) if err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error(), Group: nil}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - if err := dbUser.Update(user.UpdateGroupID, &user.User{Model: gorm.Model{ID: userResult.User.ID}, GroupID: result.Model.ID}); err != nil { - dbGroup.Delete(&group.Group{Model: gorm.Model{ID: result.ID}}) - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: err.Error()}) + if err = dbUser.Update(user.UpdateGroupID, &core.User{ + Model: gorm.Model{ID: userResult.User.ID}, + GroupID: result.Model.ID, + }); err != nil { + dbGroup.Delete(&core.Group{Model: gorm.Model{ID: result.ID}}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { - c.JSON(http.StatusOK, group.Result{Status: true}) + c.JSON(http.StatusOK, group.Result{}) } } func Update(c *gin.Context) { - var input group.Group + var input core.Group userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") c.BindJSON(&input) - authResult := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + authResult := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if authResult.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: authResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: authResult.Err.Error()}) return } if authResult.User.Level > 1 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "error: failed user level"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: failed user level"}) return } if authResult.Group.Lock { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "error: This group is locked"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: This group is locked"}) return } @@ -85,10 +89,10 @@ func Update(c *gin.Context) { } if err := dbGroup.Update(group.UpdateInfo, data); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: authResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: authResult.Err.Error()}) return } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } @@ -96,41 +100,41 @@ func Get(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } if result.User.Level >= 10 { if result.User.Level > 1 { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: "You don't have authority this operation"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "You don't have authority this operation"}) return } } - resultGroup := dbGroup.Get(group.ID, &group.Group{Model: gorm.Model{ID: result.Group.ID}}) + resultGroup := dbGroup.Get(group.ID, &core.Group{Model: gorm.Model{ID: result.Group.ID}}) if resultGroup.Err != nil { - c.JSON(http.StatusInternalServerError, group.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, group.ResultOne{Status: true, Group: resultGroup.Group[0]}) + c.JSON(http.StatusOK, group.ResultOne{Group: resultGroup.Group[0]}) } func GetAll(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, group.ResultAll{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } if result.User.Level >= 10 { if result.User.Level > 1 { - c.JSON(http.StatusInternalServerError, group.ResultAll{Status: false, Error: "You don't have authority this operation"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "You don't have authority this operation"}) return } } diff --git a/pkg/api/core/group/v0/update.go b/pkg/api/core/group/v0/update.go index 62a2b36..9a8b4d4 100644 --- a/pkg/api/core/group/v0/update.go +++ b/pkg/api/core/group/v0/update.go @@ -1,8 +1,10 @@ package v0 -import "github.com/vmmgr/controller/pkg/api/core/group" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) -func updateAdminUser(input, replace group.Group) (group.Group, error) { +func updateAdminUser(input, replace core.Group) (core.Group, error) { // uint boolean //Lock diff --git a/pkg/api/core/interface.go b/pkg/api/core/interface.go new file mode 100644 index 0000000..3a83032 --- /dev/null +++ b/pkg/api/core/interface.go @@ -0,0 +1,149 @@ +package core + +import ( + "github.com/jinzhu/gorm" + "time" +) + +type User struct { + gorm.Model + Tokens []*Token `json:"tokens"` + Group *Group `json:"group"` + GroupID uint `json:"group_id"` + Name string `json:"name"` + NameEn string `json:"name_en"` + Email string `json:"email"` + Pass string `json:"pass"` + ExpiredStatus *uint `json:"expired_status"` + Level uint `json:"level"` + MailVerify *bool `json:"mail_verify"` + MailToken string `json:"mail_token"` +} + +type Group struct { + gorm.Model + Users []User `json:"users"` + Org string `json:"org"` + Status uint `json:"status"` + Comment string `json:"comment"` + Vlan uint `json:"vlan"` + Lock bool `json:"lock"` + MaxVM uint `json:"max_VM"` + MaxCPU uint `json:"max_cpu"` + MaxMemory uint `json:"max_memory"` +} + +type Token struct { + gorm.Model + ExpiredAt time.Time `json:"expired_at"` + UserID uint `json:"user_id"` + User User `json:"user"` + Status uint `json:"status"` //0: initToken(30m) 1: 30m 2:6h 3: 12h 10: 30d 11:180d + Admin *bool `json:"admin"` + UserToken string `json:"user_token"` + TmpToken string `json:"tmp_token"` + AccessToken string `json:"access_token"` + Debug string `json:"debug"` +} + +type Notice struct { + gorm.Model + UserID uint `json:"user_id"` + GroupID uint `json:"group_id"` + Everyone *bool `json:"everyone"` + StartTime uint `json:"start_time"` + EndingTime uint `json:"ending_time"` + Important *bool `json:"important"` + Fault *bool `json:"fault"` + Info *bool `json:"info"` + Title string `json:"title"` + Data string `json:"data"` +} + +type Ticket struct { + gorm.Model + GroupID uint `json:"group_id"` + UserID uint `json:"user_id"` + Chat []Chat `json:"chat"` + Solved *bool `json:"solved"` + Title string `json:"title"` + Group Group `json:"group"` + User User `json:"user"` +} + +type Chat struct { + gorm.Model + TicketID uint `json:"ticket_id"` + UserID uint `json:"user_id"` + Admin bool `json:"admin"` + Data string `json:"data" gorm:"size:65535"` + User User `json:"user"` +} + +type Region struct { + gorm.Model + Name string `json:"name"` + Comment string `json:"comment"` + Lock *bool `json:"lock"` +} + +type Zone struct { + gorm.Model + RegionID uint `json:"region_id"` + Name string `json:"name"` + Postcode string `json:"postcode"` + Address string `json:"address"` + Tel string `json:"tel"` + Mail string `json:"mail"` + Comment string `json:"comment"` + Lock *bool `json:"lock"` +} + +type Node struct { + gorm.Model + ZoneID uint `json:"zone_id"` + GroupID uint `json:"group_id"` + AdminOnly *bool `json:"admin_only"` + Name string `json:"name"` + IP string `json:"ip"` + Port uint `json:"port"` + WsPort uint `json:"ws_port"` + ManageNet string `json:"manage_net"` + Comment string `json:"comment"` +} + +type Storage struct { + gorm.Model + NodeID uint `json:"node_id"` + AdminOnly *bool `json:"admin"` + Name string `json:"name"` + Type uint `json:"type"` + Path string `json:"path"` + MaxCapacity uint `json:"max_capacity"` + Comment string `json:"comment"` +} + +type NIC struct { + gorm.Model + NodeID uint `json:"node_id"` + GroupID uint `json:"group_id"` + AdminOnly *bool `json:"admin"` + Name string `json:"name"` + Enable *bool `json:"enable"` + Virtual *bool `json:"virtual"` + Type uint `json:"type"` + Vlan uint `json:"vlan"` + Speed uint `json:"speed"` + MAC string `json:"mac"` + Comment string `json:"comment"` +} + +type VM struct { + gorm.Model + NodeID uint `json:"node_id"` + GroupID uint `json:"group_id"` + Name string `json:"name"` + UUID string `json:"uuid"` + VNCPort uint `json:"vnc_port"` + Lock *bool `json:"lock"` +} diff --git a/pkg/api/core/node/interface.go b/pkg/api/core/node/interface.go index 546120f..2100890 100644 --- a/pkg/api/core/node/interface.go +++ b/pkg/api/core/node/interface.go @@ -1,6 +1,8 @@ package node -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 @@ -11,32 +13,19 @@ const ( UpdateAll = 110 ) -type Node struct { - gorm.Model - ZoneID uint `json:"zone_id"` - GroupID uint `json:"group_id"` - AdminOnly *bool `json:"admin_only"` - Name string `json:"name"` - IP string `json:"ip"` - Port uint `json:"port"` - WsPort uint `json:"ws_port"` - ManageNet string `json:"manage_net"` - Comment string `json:"comment"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Node []Node `json:"node"` + Status bool `json:"status"` + Error string `json:"error"` + Node []core.Node `json:"node"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - Node Node `json:"node"` + Status bool `json:"status"` + Error string `json:"error"` + Node core.Node `json:"node"` } type ResultDatabase struct { Err error - Node []Node + Node []core.Node } diff --git a/pkg/api/core/node/nic/interface.go b/pkg/api/core/node/nic/interface.go index 38642ea..a5e5677 100644 --- a/pkg/api/core/node/nic/interface.go +++ b/pkg/api/core/node/nic/interface.go @@ -1,6 +1,8 @@ package nic -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 @@ -13,34 +15,19 @@ const ( UpdateAll = 110 ) -type NIC struct { - gorm.Model - NodeID uint `json:"node_id"` - GroupID uint `json:"group_id"` - AdminOnly *bool `json:"admin"` - Name string `json:"name"` - Enable *bool `json:"enable"` - Virtual *bool `json:"virtual"` - Type uint `json:"type"` - Vlan uint `json:"vlan"` - Speed uint `json:"speed"` - MAC string `json:"mac"` - Comment string `json:"comment"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - NIC []NIC `json:"nic"` + Status bool `json:"status"` + Error string `json:"error"` + NIC []core.NIC `json:"nic"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - NIC NIC `json:"nic"` + Status bool `json:"status"` + Error string `json:"error"` + NIC core.NIC `json:"nic"` } type ResultDatabase struct { Err error - NIC []NIC + NIC []core.NIC } diff --git a/pkg/api/core/node/nic/v0/admin.go b/pkg/api/core/node/nic/v0/admin.go index 3ac35e7..0f3ca30 100644 --- a/pkg/api/core/node/nic/v0/admin.go +++ b/pkg/api/core/node/nic/v0/admin.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node/nic" "github.com/vmmgr/controller/pkg/api/core/region" dbNIC "github.com/vmmgr/controller/pkg/api/store/node/nic/v0" @@ -13,108 +15,108 @@ import ( ) func AddAdmin(c *gin.Context) { - var input nic.NIC + var input core.NIC resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, nic.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, nic.Result{Status: false, Error: err.Error()}) + if err = check(input); err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if _, err := dbNIC.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: err.Error()}) + if _, err = dbNIC.Create(&input); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, nic.Result{Status: true}) + c.JSON(http.StatusOK, nic.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, nic.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbNIC.Delete(&nic.NIC{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: err.Error()}) + if err := dbNIC.Delete(&core.NIC{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, nic.Result{Status: true}) + c.JSON(http.StatusOK, nic.Result{}) } func UpdateAdmin(c *gin.Context) { - var input nic.NIC + var input core.NIC resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, nic.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbNIC.Get(region.ID, &nic.NIC{Model: gorm.Model{ID: input.ID}}) + tmp := dbNIC.Get(region.ID, &core.NIC{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.NIC[0]) if err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } if err := dbNIC.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, nic.Result{Status: true}) + c.JSON(http.StatusOK, nic.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, nic.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, nic.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbNIC.Get(region.ID, &nic.NIC{Model: gorm.Model{ID: uint(id)}}) + result := dbNIC.Get(region.ID, &core.NIC{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, nic.Result{Status: true, NIC: result.NIC}) + c.JSON(http.StatusOK, nic.Result{NIC: result.NIC}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, nic.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbNIC.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, nic.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, nic.Result{Status: true, NIC: result.NIC}) + c.JSON(http.StatusOK, nic.Result{NIC: result.NIC}) } } diff --git a/pkg/api/core/node/nic/v0/check.go b/pkg/api/core/node/nic/v0/check.go index 87f80f9..5bb204c 100644 --- a/pkg/api/core/node/nic/v0/check.go +++ b/pkg/api/core/node/nic/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/node/nic" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input nic.NIC) error { +func check(input core.NIC) error { // check if input.Name == "" { return fmt.Errorf("no data: name") diff --git a/pkg/api/core/node/nic/v0/update.go b/pkg/api/core/node/nic/v0/update.go index 8dedb8b..2ec6581 100644 --- a/pkg/api/core/node/nic/v0/update.go +++ b/pkg/api/core/node/nic/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/node/nic" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace nic.NIC) (nic.NIC, error) { +func updateAdminUser(input, replace core.NIC) (core.NIC, error) { //Name if input.Name != "" { diff --git a/pkg/api/core/node/pci/v0/pci.go b/pkg/api/core/node/pci/v0/pci.go index f8874ab..709e9fa 100644 --- a/pkg/api/core/node/pci/v0/pci.go +++ b/pkg/api/core/node/pci/v0/pci.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/node/pci" dbNode "github.com/vmmgr/controller/pkg/api/store/node/v0" @@ -17,22 +19,22 @@ func Get(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, pci.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } - resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(id)}}) + resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(id)}}) if resultNode.Err != nil { log.Println(resultNode.Err) - c.JSON(http.StatusInternalServerError, pci.Result{Status: false, Error: resultNode.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultNode.Err.Error()}) return } response, err := httpRequest(resultNode.Node[0].IP, resultNode.Node[0].Port) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, pci.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, pci.Result{Status: true, PCI: response}) + c.JSON(http.StatusOK, pci.Result{PCI: response}) } diff --git a/pkg/api/core/node/storage/interface.go b/pkg/api/core/node/storage/interface.go index 15727c8..07c5dd1 100644 --- a/pkg/api/core/node/storage/interface.go +++ b/pkg/api/core/node/storage/interface.go @@ -1,6 +1,8 @@ package storage -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 @@ -10,30 +12,19 @@ const ( UpdateAll = 110 ) -type Storage struct { - gorm.Model - NodeID uint `json:"node_id"` - AdminOnly *bool `json:"admin"` - Name string `json:"name"` - Type uint `json:"type"` - Path string `json:"path"` - MaxCapacity uint `json:"max_capacity"` - Comment string `json:"comment"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Storage []Storage `json:"storage"` + Status bool `json:"status"` + Error string `json:"error"` + Storage []core.Storage `json:"storage"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - Storage Storage `json:"storage"` + Status bool `json:"status"` + Error string `json:"error"` + Storage core.Storage `json:"storage"` } type ResultDatabase struct { Err error - Storage []Storage + Storage []core.Storage } diff --git a/pkg/api/core/node/storage/v0/admin.go b/pkg/api/core/node/storage/v0/admin.go index 3911b70..d0c70ae 100644 --- a/pkg/api/core/node/storage/v0/admin.go +++ b/pkg/api/core/node/storage/v0/admin.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node/storage" "github.com/vmmgr/controller/pkg/api/core/region" dbStorage "github.com/vmmgr/controller/pkg/api/store/node/storage/v0" @@ -13,108 +15,108 @@ import ( ) func AddAdmin(c *gin.Context) { - var input storage.Storage + var input core.Storage resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, storage.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, storage.Result{Status: false, Error: err.Error()}) + if err = check(input); err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if _, err := dbStorage.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: err.Error()}) + if _, err = dbStorage.Create(&input); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, storage.Result{Status: true}) + c.JSON(http.StatusOK, storage.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, storage.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbStorage.Delete(&storage.Storage{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: err.Error()}) + if err := dbStorage.Delete(&core.Storage{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, storage.Result{Status: true}) + c.JSON(http.StatusOK, storage.Result{}) } func UpdateAdmin(c *gin.Context) { - var input storage.Storage + var input core.Storage resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, storage.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbStorage.Get(region.ID, &storage.Storage{Model: gorm.Model{ID: input.ID}}) + tmp := dbStorage.Get(region.ID, &core.Storage{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Storage[0]) if err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } - if err := dbStorage.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: err.Error()}) + if err = dbStorage.Update(region.UpdateAll, replace); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, storage.Result{Status: true}) + c.JSON(http.StatusOK, storage.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, storage.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, storage.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbStorage.Get(region.ID, &storage.Storage{Model: gorm.Model{ID: uint(id)}}) + result := dbStorage.Get(region.ID, &core.Storage{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, storage.Result{Status: true, Storage: result.Storage}) + c.JSON(http.StatusOK, storage.Result{Storage: result.Storage}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, storage.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbStorage.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, storage.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, storage.Result{Status: true, Storage: result.Storage}) + c.JSON(http.StatusOK, storage.Result{Storage: result.Storage}) } } diff --git a/pkg/api/core/node/storage/v0/check.go b/pkg/api/core/node/storage/v0/check.go index ecbc77c..bde32be 100644 --- a/pkg/api/core/node/storage/v0/check.go +++ b/pkg/api/core/node/storage/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/node/storage" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input storage.Storage) error { +func check(input core.Storage) error { // check if input.Name == "" { return fmt.Errorf("no data: name") diff --git a/pkg/api/core/node/storage/v0/update.go b/pkg/api/core/node/storage/v0/update.go index 97a9b9b..19f951a 100644 --- a/pkg/api/core/node/storage/v0/update.go +++ b/pkg/api/core/node/storage/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/node/storage" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace storage.Storage) (storage.Storage, error) { +func updateAdminUser(input, replace core.Storage) (core.Storage, error) { //Name if input.Name != "" { diff --git a/pkg/api/core/node/usb/v0/pci.go b/pkg/api/core/node/usb/v0/pci.go index 024cb48..93d5387 100644 --- a/pkg/api/core/node/usb/v0/pci.go +++ b/pkg/api/core/node/usb/v0/pci.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/node/usb" dbNode "github.com/vmmgr/controller/pkg/api/store/node/v0" @@ -17,20 +19,20 @@ func Get(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, usb.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } - resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(id)}}) + resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(id)}}) if resultNode.Err != nil { - c.JSON(http.StatusInternalServerError, usb.Result{Status: false, Error: resultNode.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultNode.Err.Error()}) return } response, err := httpRequest(resultNode.Node[0].IP, resultNode.Node[0].Port) if err != nil { - c.JSON(http.StatusInternalServerError, usb.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, usb.Result{Status: true, USB: response}) + c.JSON(http.StatusOK, usb.Result{USB: response}) } diff --git a/pkg/api/core/node/v0/admin.go b/pkg/api/core/node/v0/admin.go index 9e90eeb..78bd12c 100644 --- a/pkg/api/core/node/v0/admin.go +++ b/pkg/api/core/node/v0/admin.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/group" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/region" @@ -17,119 +19,119 @@ import ( ) func AddAdmin(c *gin.Context) { - var input node.Node + var input core.Node resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, node.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, node.Result{Status: false, Error: err.Error()}) + if err = check(input); err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if resultZone := dbZone.Get(zone.ID, &zone.Zone{Model: gorm.Model{ID: input.ZoneID}}); resultZone.Err != nil { - c.JSON(http.StatusBadRequest, node.Result{Status: false, Error: "This zone is not found..."}) + if resultZone := dbZone.Get(zone.ID, &core.Zone{Model: gorm.Model{ID: input.ZoneID}}); resultZone.Err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: "This zone is not found..."}) return } if input.GroupID != 0 { - if resultGroup := dbGroup.Get(group.ID, &group.Group{Model: gorm.Model{ID: input.GroupID}}); resultGroup.Err != nil { - c.JSON(http.StatusBadRequest, node.Result{Status: false, Error: "This group is not found..."}) + if resultGroup := dbGroup.Get(group.ID, &core.Group{Model: gorm.Model{ID: input.GroupID}}); resultGroup.Err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: "This group is not found..."}) return } } - if _, err := dbNode.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: err.Error()}) + if _, err = dbNode.Create(&input); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, node.Result{Status: true}) + c.JSON(http.StatusOK, node.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, node.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbNode.Delete(&node.Node{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: err.Error()}) + if err = dbNode.Delete(&core.Node{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, node.Result{Status: true}) + c.JSON(http.StatusOK, node.Result{}) } func UpdateAdmin(c *gin.Context) { - var input node.Node + var input core.Node resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, node.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbNode.Get(region.ID, &node.Node{Model: gorm.Model{ID: input.ID}}) + tmp := dbNode.Get(region.ID, &core.Node{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Node[0]) if err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } - if err := dbNode.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: err.Error()}) + if err = dbNode.Update(region.UpdateAll, replace); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, node.Result{Status: true}) + c.JSON(http.StatusOK, node.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, node.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, node.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbNode.Get(region.ID, &node.Node{Model: gorm.Model{ID: uint(id)}}) + result := dbNode.Get(region.ID, &core.Node{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, node.Result{Status: true, Node: result.Node}) + c.JSON(http.StatusOK, node.Result{Node: result.Node}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, node.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbNode.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, node.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, node.Result{Status: true, Node: result.Node}) + c.JSON(http.StatusOK, node.Result{Node: result.Node}) } } diff --git a/pkg/api/core/node/v0/check.go b/pkg/api/core/node/v0/check.go index b8f1f72..d2e70ba 100644 --- a/pkg/api/core/node/v0/check.go +++ b/pkg/api/core/node/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/node" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input node.Node) error { +func check(input core.Node) error { // check if input.ZoneID == 0 { return fmt.Errorf("no data: zoneID") diff --git a/pkg/api/core/node/v0/update.go b/pkg/api/core/node/v0/update.go index 12224ad..87a8e8a 100644 --- a/pkg/api/core/node/v0/update.go +++ b/pkg/api/core/node/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/node" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace node.Node) (node.Node, error) { +func updateAdminUser(input, replace core.Node) (core.Node, error) { //Name if input.Name != "" { diff --git a/pkg/api/core/notice/interface.go b/pkg/api/core/notice/interface.go index 03bf9f5..643dbcc 100644 --- a/pkg/api/core/notice/interface.go +++ b/pkg/api/core/notice/interface.go @@ -1,8 +1,6 @@ package notice -import ( - "github.com/jinzhu/gorm" -) +import "github.com/vmmgr/controller/pkg/api/core" const ( ID = 0 @@ -17,27 +15,13 @@ const ( UpdateAll = 110 ) -type Notice struct { - gorm.Model - UserID uint `json:"user_id"` - GroupID uint `json:"group_id"` - Everyone *bool `json:"everyone"` - StartTime uint `json:"start_time"` - EndingTime uint `json:"ending_time"` - Important *bool `json:"important"` - Fault *bool `json:"fault"` - Info *bool `json:"info"` - Title string `json:"title"` - Data string `json:"data"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Notice []Notice `json:"notice"` + Status bool `json:"status"` + Error string `json:"error"` + Notice []core.Notice `json:"notice"` } type ResultDatabase struct { Err error - Notice []Notice + Notice []core.Notice } diff --git a/pkg/api/core/notice/v0/admin.go b/pkg/api/core/notice/v0/admin.go index 4baf797..8c395a1 100644 --- a/pkg/api/core/notice/v0/admin.go +++ b/pkg/api/core/notice/v0/admin.go @@ -3,9 +3,10 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/notice" - "github.com/vmmgr/controller/pkg/api/core/token" dbNotice "github.com/vmmgr/controller/pkg/api/store/notice/v0" "log" "net/http" @@ -13,11 +14,11 @@ import ( ) func AddAdmin(c *gin.Context) { - var input notice.Notice + var input core.Notice resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) @@ -26,97 +27,97 @@ func AddAdmin(c *gin.Context) { log.Println(input.StartTime) if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } if _, err := dbNotice.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, notice.Result{Status: true}) + c.JSON(http.StatusOK, notice.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, notice.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbNotice.Delete(¬ice.Notice{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: err.Error()}) + if err = dbNotice.Delete(&core.Notice{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, notice.Result{Status: true}) + c.JSON(http.StatusOK, notice.Result{}) } func UpdateAdmin(c *gin.Context) { - var input notice.Notice + var input core.Notice resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbNotice.Get(notice.ID, ¬ice.Notice{Model: gorm.Model{ID: input.ID}}) + tmp := dbNotice.Get(notice.ID, &core.Notice{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Notice[0]) if err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } - if err := dbNotice.Update(notice.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: err.Error()}) + if err = dbNotice.Update(notice.UpdateAll, replace); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, notice.Result{Status: true}) + c.JSON(http.StatusOK, notice.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, notice.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbNotice.Get(notice.ID, ¬ice.Notice{Model: gorm.Model{ID: uint(id)}}) + result := dbNotice.Get(notice.ID, &core.Notice{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, notice.Result{Status: true, Notice: result.Notice}) + c.JSON(http.StatusOK, notice.Result{Notice: result.Notice}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbNotice.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, notice.Result{Status: true, Notice: result.Notice}) + c.JSON(http.StatusOK, notice.Result{Notice: result.Notice}) } } diff --git a/pkg/api/core/notice/v0/check.go b/pkg/api/core/notice/v0/check.go index 6e9c559..f739d3d 100644 --- a/pkg/api/core/notice/v0/check.go +++ b/pkg/api/core/notice/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/notice" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input notice.Notice) error { +func check(input core.Notice) error { // check if input.Title == "" { return fmt.Errorf("no data: title") diff --git a/pkg/api/core/notice/v0/notice.go b/pkg/api/core/notice/v0/notice.go index ab396da..0d631b4 100644 --- a/pkg/api/core/notice/v0/notice.go +++ b/pkg/api/core/notice/v0/notice.go @@ -2,9 +2,10 @@ package v0 import ( "github.com/gin-gonic/gin" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/notice" - "github.com/vmmgr/controller/pkg/api/core/token" dbNotice "github.com/vmmgr/controller/pkg/api/store/notice/v0" "net/http" ) @@ -14,18 +15,21 @@ func Get(c *gin.Context) { accessToken := c.Request.Header.Get("ACCESS_TOKEN") // Group authentication - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(1, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - noticeResult := dbNotice.Get(notice.Data, ¬ice.Notice{UserID: result.User.ID, GroupID: result.Group.ID, - Everyone: &[]bool{true}[0]}) + noticeResult := dbNotice.Get(notice.Data, &core.Notice{ + UserID: result.User.ID, + GroupID: result.Group.ID, + Everyone: &[]bool{true}[0], + }) if noticeResult.Err != nil { - c.JSON(http.StatusInternalServerError, notice.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, notice.Result{Status: true, Notice: noticeResult.Notice}) + c.JSON(http.StatusOK, notice.Result{Notice: noticeResult.Notice}) } diff --git a/pkg/api/core/notice/v0/update.go b/pkg/api/core/notice/v0/update.go index 9f3063b..17d0202 100644 --- a/pkg/api/core/notice/v0/update.go +++ b/pkg/api/core/notice/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/notice" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace notice.Notice) (notice.Notice, error) { +func updateAdminUser(input, replace core.Notice) (core.Notice, error) { //Title if input.Title != "" { diff --git a/pkg/api/core/region/interface.go b/pkg/api/core/region/interface.go index 8b4a026..3a4c4c7 100644 --- a/pkg/api/core/region/interface.go +++ b/pkg/api/core/region/interface.go @@ -1,6 +1,8 @@ package region -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 @@ -8,26 +10,19 @@ const ( UpdateAll = 110 ) -type Region struct { - gorm.Model - Name string `json:"name"` - Comment string `json:"comment"` - Lock *bool `json:"lock"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Region []Region `json:"region"` + Status bool `json:"status"` + Error string `json:"error"` + Region []core.Region `json:"region"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - Region Region `json:"region"` + Status bool `json:"status"` + Error string `json:"error"` + Region core.Region `json:"region"` } type ResultDatabase struct { Err error - Region []Region + Region []core.Region } diff --git a/pkg/api/core/region/v0/admin.go b/pkg/api/core/region/v0/admin.go index a720977..dac0f23 100644 --- a/pkg/api/core/region/v0/admin.go +++ b/pkg/api/core/region/v0/admin.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/region" dbRegion "github.com/vmmgr/controller/pkg/api/store/region/v0" "log" @@ -12,108 +14,108 @@ import ( ) func AddAdmin(c *gin.Context) { - var input region.Region + var input core.Region resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, region.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, region.Result{Status: false, Error: err.Error()}) + if err = check(input); err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if _, err := dbRegion.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: err.Error()}) + if _, err = dbRegion.Create(&input); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, region.Result{Status: true}) + c.JSON(http.StatusOK, region.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, region.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbRegion.Delete(®ion.Region{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: err.Error()}) + if err := dbRegion.Delete(&core.Region{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, region.Result{Status: true}) + c.JSON(http.StatusOK, region.Result{}) } func UpdateAdmin(c *gin.Context) { - var input region.Region + var input core.Region resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, region.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbRegion.Get(region.ID, ®ion.Region{Model: gorm.Model{ID: input.ID}}) + tmp := dbRegion.Get(region.ID, &core.Region{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Region[0]) if err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } if err := dbRegion.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, region.Result{Status: true}) + c.JSON(http.StatusOK, region.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, region.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, region.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbRegion.Get(region.ID, ®ion.Region{Model: gorm.Model{ID: uint(id)}}) + result := dbRegion.Get(region.ID, &core.Region{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, region.Result{Status: true, Region: result.Region}) + c.JSON(http.StatusOK, region.Result{Region: result.Region}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, region.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbRegion.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, region.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, region.Result{Status: true, Region: result.Region}) + c.JSON(http.StatusOK, region.Result{Region: result.Region}) } } diff --git a/pkg/api/core/region/v0/check.go b/pkg/api/core/region/v0/check.go index c689ba0..974345f 100644 --- a/pkg/api/core/region/v0/check.go +++ b/pkg/api/core/region/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/region" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input region.Region) error { +func check(input core.Region) error { // check if input.Name == "" { return fmt.Errorf("no data: name") diff --git a/pkg/api/core/region/v0/update.go b/pkg/api/core/region/v0/update.go index 98f06b9..8509acf 100644 --- a/pkg/api/core/region/v0/update.go +++ b/pkg/api/core/region/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/region" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace region.Region) (region.Region, error) { +func updateAdminUser(input, replace core.Region) (core.Region, error) { //Title if input.Name != "" { diff --git a/pkg/api/core/region/zone/interface.go b/pkg/api/core/region/zone/interface.go index 988dd08..e98d30c 100644 --- a/pkg/api/core/region/zone/interface.go +++ b/pkg/api/core/region/zone/interface.go @@ -1,6 +1,8 @@ package zone -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 @@ -9,31 +11,19 @@ const ( UpdateAll = 110 ) -type Zone struct { - gorm.Model - RegionID uint `json:"region_id"` - Name string `json:"name"` - Postcode string `json:"postcode"` - Address string `json:"address"` - Tel string `json:"tel"` - Mail string `json:"mail"` - Comment string `json:"comment"` - Lock *bool `json:"lock"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Zone []Zone `json:"zone"` + Status bool `json:"status"` + Error string `json:"error"` + Zone []core.Zone `json:"zone"` } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - Zone Zone `json:"zone"` + Status bool `json:"status"` + Error string `json:"error"` + Zone core.Zone `json:"zone"` } type ResultDatabase struct { Err error - Zone []Zone + Zone []core.Zone } diff --git a/pkg/api/core/region/zone/v0/admin.go b/pkg/api/core/region/zone/v0/admin.go index 23bfffa..9e89a54 100644 --- a/pkg/api/core/region/zone/v0/admin.go +++ b/pkg/api/core/region/zone/v0/admin.go @@ -3,7 +3,9 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/region" "github.com/vmmgr/controller/pkg/api/core/region/zone" dbRegion "github.com/vmmgr/controller/pkg/api/store/region/v0" @@ -14,118 +16,118 @@ import ( ) func AddAdmin(c *gin.Context) { - var input zone.Zone + var input core.Zone resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, zone.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - resultRegion := dbRegion.Get(region.ID, ®ion.Region{Model: gorm.Model{ID: input.ID}}) + resultRegion := dbRegion.Get(region.ID, &core.Region{Model: gorm.Model{ID: input.ID}}) if resultRegion.Err != nil { - c.JSON(http.StatusBadRequest, zone.Result{Status: false, Error: resultRegion.Err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: resultRegion.Err.Error()}) return } if len(resultRegion.Region) != 0 { - c.JSON(http.StatusBadRequest, zone.Result{Status: false, Error: "same id !!"}) + c.JSON(http.StatusBadRequest, common.Error{Error: "same id !!"}) return } if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, zone.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } if _, err := dbZone.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, zone.Result{Status: true}) + c.JSON(http.StatusOK, zone.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, zone.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - if err := dbZone.Delete(&zone.Zone{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: err.Error()}) + if err := dbZone.Delete(&core.Zone{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, zone.Result{Status: true}) + c.JSON(http.StatusOK, zone.Result{}) } func UpdateAdmin(c *gin.Context) { - var input zone.Zone + var input core.Zone resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, zone.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbZone.Get(region.ID, &zone.Zone{Model: gorm.Model{ID: input.ID}}) + tmp := dbZone.Get(region.ID, &core.Zone{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.Zone[0]) if err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } if err := dbZone.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, zone.Result{Status: true}) + c.JSON(http.StatusOK, zone.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, zone.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, zone.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := dbZone.Get(region.ID, &zone.Zone{Model: gorm.Model{ID: uint(id)}}) + result := dbZone.Get(region.ID, &core.Zone{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - c.JSON(http.StatusOK, zone.Result{Status: true, Zone: result.Zone}) + c.JSON(http.StatusOK, zone.Result{Zone: result.Zone}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, zone.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbZone.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, zone.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, zone.Result{Status: true, Zone: result.Zone}) + c.JSON(http.StatusOK, zone.Result{Zone: result.Zone}) } } diff --git a/pkg/api/core/region/zone/v0/check.go b/pkg/api/core/region/zone/v0/check.go index 729a1c5..046a9f6 100644 --- a/pkg/api/core/region/zone/v0/check.go +++ b/pkg/api/core/region/zone/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/region/zone" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input zone.Zone) error { +func check(input core.Zone) error { // check if input.RegionID == 0 { return fmt.Errorf("no data: regionID") diff --git a/pkg/api/core/region/zone/v0/update.go b/pkg/api/core/region/zone/v0/update.go index 143288b..7854616 100644 --- a/pkg/api/core/region/zone/v0/update.go +++ b/pkg/api/core/region/zone/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/region/zone" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminUser(input, replace zone.Zone) (zone.Zone, error) { +func updateAdminUser(input, replace core.Zone) (core.Zone, error) { //Name if input.Name != "" { diff --git a/pkg/api/core/support/chat/interface.go b/pkg/api/core/support/chat/interface.go index 1ecf6ba..011a487 100644 --- a/pkg/api/core/support/chat/interface.go +++ b/pkg/api/core/support/chat/interface.go @@ -1,23 +1,17 @@ package chat -import "github.com/jinzhu/gorm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) const ( ID = 0 TicketID = 1 UpdateUserID = 2 - UpdateAll = 110 + UpdateAll = 150 ) -type Chat struct { - gorm.Model - TicketID uint `json:"ticket_id"` - UserID uint `json:"user_id"` - Admin bool `json:"admin"` - Data string `json:"data"` -} - type ResultDatabase struct { Err error - Chat []Chat + Chat []core.Chat } diff --git a/pkg/api/core/support/chat/v0/chat.go b/pkg/api/core/support/chat/v0/chat.go index afead14..0b64091 100644 --- a/pkg/api/core/support/chat/v0/chat.go +++ b/pkg/api/core/support/chat/v0/chat.go @@ -4,13 +4,14 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/support" - "github.com/vmmgr/controller/pkg/api/core/support/chat" "github.com/vmmgr/controller/pkg/api/core/support/ticket" - "github.com/vmmgr/controller/pkg/api/core/token" dbChat "github.com/vmmgr/controller/pkg/api/store/support/chat/v0" dbTicket "github.com/vmmgr/controller/pkg/api/store/support/ticket/v0" + "log" "net/http" "strconv" ) @@ -20,52 +21,62 @@ func Add(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - c.BindJSON(&input) + err := c.BindJSON(&input) + if err != nil { + log.Println(err) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) + return + } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, support.Result{Status: false, Error: fmt.Sprintf("id error")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("id error")}) return } // Group authentication - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: result.Err.Error()}) return } // input check - if err := check(input); err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + if err = check(input); err != nil { + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } if uint(id) == 0 { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: "valid id"}) + c.JSON(http.StatusBadRequest, common.Error{Error: "valid id"}) return } // IDからDBからチケットを検索 - resultTicket := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + resultTicket := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if resultTicket.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultTicket.Err.Error()}) return } // 問題解決時はここでエラーを返す - if *resultTicket.Ticket[0].Solved { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: "This problem is closed..."}) + if *resultTicket.Tickets[0].Solved { + c.JSON(http.StatusInternalServerError, common.Error{Error: "This problem is closed..."}) return } // GroupIDが一致しない場合はここでエラーを返す - if resultTicket.Ticket[0].GroupID != result.Group.ID { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: "Auth Error: group id failed..."}) + if resultTicket.Tickets[0].GroupID != result.User.GroupID { + c.JSON(http.StatusInternalServerError, common.Error{Error: "Auth Error: group id failed..."}) return } // Chat DBに登録 - resultChat, err := dbChat.Create(&chat.Chat{TicketID: resultTicket.Ticket[0].ID, UserID: result.User.ID, Admin: false, Data: input.Data}) + resultChat, err := dbChat.Create(&core.Chat{ + TicketID: resultTicket.Tickets[0].ID, + UserID: result.User.ID, + Admin: false, + Data: input.Data, + }) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } @@ -75,5 +86,5 @@ func Add(c *gin.Context) { UserID: resultChat.UserID, Message: resultChat.Data, } - c.JSON(http.StatusOK, support.Result{Status: true}) + c.JSON(http.StatusOK, support.Result{}) } diff --git a/pkg/api/core/support/interface.go b/pkg/api/core/support/interface.go index 00cab95..342bb3f 100644 --- a/pkg/api/core/support/interface.go +++ b/pkg/api/core/support/interface.go @@ -3,8 +3,7 @@ package support import ( "github.com/gorilla/websocket" "github.com/jinzhu/gorm" - "github.com/vmmgr/controller/pkg/api/core/support/chat" - "github.com/vmmgr/controller/pkg/api/core/support/ticket" + "github.com/vmmgr/controller/pkg/api/core" "time" ) @@ -20,15 +19,26 @@ type WebSocketResult struct { UserToken string `json:"user_token"` AccessToken string `json:"access_token"` UserID uint `json:"user_id"` + UserName string `json:"user_name"` GroupID uint `json:"group_id"` Admin bool `json:"admin"` Message string `json:"message"` } +type WebSocketChatResponse struct { + Time string `json:"time"` + UserID uint `json:"user_id"` + UserName string `json:"username"` + GroupID uint `json:"group_id"` + Admin bool `json:"admin"` + Message string `json:"message"` +} + type WebSocket struct { TicketID uint GroupID uint UserID uint + UserName string Admin bool Socket *websocket.Conn } @@ -42,8 +52,6 @@ type FirstInput struct { } type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Ticket []ticket.Ticket `json:"support_ticket"` - Chat []chat.Chat `json:"support_chat"` + Ticket []core.Ticket `json:"ticket"` + Chat []core.Chat `json:"chat"` } diff --git a/pkg/api/core/support/ticket/interface.go b/pkg/api/core/support/ticket/interface.go index 487a6b5..7be7ccd 100644 --- a/pkg/api/core/support/ticket/interface.go +++ b/pkg/api/core/support/ticket/interface.go @@ -2,33 +2,58 @@ package ticket import ( "github.com/gorilla/websocket" - "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "net/http" ) const ( - ID = 0 - GroupID = 1 - UserID = 2 - ChatIDStart = 3 - ChatIDEnd = 4 - UpdateAll = 110 + ID = 0 + GID = 1 + UID = 2 + UpdateAll = 150 ) //#4 Issue(解決済み) + type Ticket struct { - gorm.Model - GroupID uint `json:"group_id"` - UserID uint `json:"user_id"` - ChatIDStart uint `json:"chat_id_start"` - ChatIDEnd uint `json:"chat_id_end"` - Solved *bool `json:"solved"` - Title string `json:"title"` + ID uint `json:"id"` + Time string `json:"time"` + GroupID uint `json:"group_id"` + UserID uint `json:"user_id"` + Chat []Chat `json:"chat"` + Solved *bool `json:"solved"` + Title string `json:"title"` + UserName string `json:"username"` +} + +type Chat struct { + Time string `json:"time"` + TicketID uint `json:"ticket_id"` + UserID uint `json:"user_id"` + UserName string `json:"username"` + Admin bool `json:"admin"` + Data string `json:"data"` +} + +type Result struct { + Ticket Ticket `json:"tickets"` +} + +type ResultAll struct { + Tickets []Ticket `json:"tickets"` +} + +type ResultTicketAll struct { + Tickets []Ticket `json:"tickets"` +} + +type ResultAdminAll struct { + Tickets []core.Ticket `json:"tickets"` } type ResultDatabase struct { - Err error - Ticket []Ticket + Err error + Tickets []core.Ticket } var WsUpgrader = websocket.Upgrader{ diff --git a/pkg/api/core/support/ticket/v0/admin.go b/pkg/api/core/support/ticket/v0/admin.go index 2dab91f..eac2f01 100644 --- a/pkg/api/core/support/ticket/v0/admin.go +++ b/pkg/api/core/support/ticket/v0/admin.go @@ -5,18 +5,19 @@ import ( "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" controllerInterface "github.com/vmmgr/controller/pkg/api/core/controller" controller "github.com/vmmgr/controller/pkg/api/core/controller/v0" "github.com/vmmgr/controller/pkg/api/core/support" - "github.com/vmmgr/controller/pkg/api/core/support/chat" "github.com/vmmgr/controller/pkg/api/core/support/ticket" - "github.com/vmmgr/controller/pkg/api/core/token" dbChat "github.com/vmmgr/controller/pkg/api/store/support/chat/v0" dbTicket "github.com/vmmgr/controller/pkg/api/store/support/ticket/v0" "log" "net/http" "strconv" + "time" ) func CreateAdmin(c *gin.Context) { @@ -25,132 +26,137 @@ func CreateAdmin(c *gin.Context) { // Admin authentication resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } - c.BindJSON(&input) - - // input check - if err := checkAdmin(input); err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + err := c.BindJSON(&input) + if err != nil { + log.Println(err) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - // Chat DBに登録 - chatResult, err := dbChat.Create(&chat.Chat{UserID: 0, Admin: true, Data: input.Data}) - if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + // input check + if err = checkAdmin(input); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - // Ticket DBに登録 - ticketResult, err := dbTicket.Create(&ticket.Ticket{GroupID: input.GroupID, UserID: 0, - ChatIDStart: chatResult.ID, ChatIDEnd: chatResult.ID, Solved: &[]bool{false}[0], Title: input.Title}) + // Tickets DBに登録 + ticketResult, err := dbTicket.Create(&core.Ticket{ + GroupID: input.GroupID, + UserID: 0, + Solved: &[]bool{false}[0], + Title: input.Title, + }) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - // Chat DBにTicketIDを登録 - err = dbChat.Update(chat.UpdateAll, chat.Chat{Admin: true, Data: chatResult.Data, TicketID: ticketResult.ID}) + // Chat DBに登録 + chatResult, err := dbChat.Create(&core.Chat{ + UserID: 0, + Admin: true, + Data: input.Data, + TicketID: ticketResult.ID, + }) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: []ticket.Ticket{*ticketResult}, - Chat: []chat.Chat{*chatResult}}) + + c.JSON(http.StatusOK, support.Result{ + Ticket: []core.Ticket{*ticketResult}, + Chat: []core.Chat{*chatResult}, + }) } func UpdateAdmin(c *gin.Context) { - var input ticket.Ticket + var input core.Ticket // Admin authentication resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, support.Result{Status: false, Error: fmt.Sprintf("id error")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("id error")}) return } - c.BindJSON(&input) + err = c.BindJSON(&input) + if err != nil { + log.Println(err) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) + return + } - // Ticket DBからデータを取得 - ticketResult := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + // Tickets DBからデータを取得 + ticketResult := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if ticketResult.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: ticketResult.Err.Error()}) return } // input check - replace, err := updateAdminTicket(input, ticketResult.Ticket[0]) + replace, err := updateAdminTicket(input, ticketResult.Tickets[0]) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } // Ticketのアップデート err = dbTicket.Update(ticket.UpdateAll, replace) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, support.Result{Status: true}) + c.JSON(http.StatusOK, support.Result{}) } func GetAdmin(c *gin.Context) { // Admin authentication resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, support.Result{Status: false, Error: fmt.Sprintf("id error")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("id error")}) return } // IDからDBからチケットを検索 - resultTicket := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + resultTicket := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if resultTicket.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) - return - } - - // Ticket DBからTicket IDのTicketデータを抽出 - // このとき、データはIDの昇順で出力 - resultChat := dbChat.Get(chat.TicketID, &chat.Chat{TicketID: resultTicket.Ticket[0].ID}) - if resultChat.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultTicket.Err.Error()}) return } - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: resultTicket.Ticket, Chat: resultChat.Chat}) + c.JSON(http.StatusOK, support.Result{Ticket: resultTicket.Tickets}) } func GetAllAdmin(c *gin.Context) { // Admin authentication resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } - // Ticket DBからGroup IDのTicketデータを抽出 + // Tickets DBからGroup IDのTicketデータを抽出 resultTicket := dbTicket.GetAll() if resultTicket.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultTicket.Err.Error()}) return } - log.Println(resultTicket) - - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: resultTicket.Ticket}) + c.JSON(http.StatusOK, ticket.ResultAdminAll{Tickets: resultTicket.Tickets}) } func GetAdminWebSocket(c *gin.Context) { @@ -177,11 +183,11 @@ func GetAdminWebSocket(c *gin.Context) { // Admin authentication resultAdmin := auth.AdminAuthentication(accessToken) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } - ticketResult := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + ticketResult := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if ticketResult.Err != nil { log.Println("ws:// support error: db error") conn.WriteMessage(websocket.TextMessage, []byte("error: db error")) @@ -189,35 +195,70 @@ func GetAdminWebSocket(c *gin.Context) { } // WebSocket送信 - support.Clients[&support.WebSocket{TicketID: uint(id), UserID: resultAdmin.AdminID, - GroupID: ticketResult.Ticket[0].GroupID, Socket: conn}] = true + support.Clients[&support.WebSocket{ + TicketID: uint(id), + UserID: resultAdmin.AdminID, + UserName: "HomeNOC", + GroupID: ticketResult.Tickets[0].GroupID, + Socket: conn, + }] = true //WebSocket受信 for { var msg support.WebSocketResult - err := conn.ReadJSON(&msg) + err = conn.ReadJSON(&msg) if err != nil { log.Printf("error: %v", err) - delete(support.Clients, &support.WebSocket{TicketID: uint(id), UserID: resultAdmin.AdminID, - GroupID: ticketResult.Ticket[0].GroupID, Socket: conn}) + delete(support.Clients, &support.WebSocket{ + TicketID: uint(id), + UserID: resultAdmin.AdminID, + UserName: "HomeNOC(運営)", + GroupID: ticketResult.Tickets[0].GroupID, + Socket: conn, + }) break } - _, err = dbChat.Create(&chat.Chat{TicketID: ticketResult.Ticket[0].ID, UserID: resultAdmin.AdminID, Admin: true, - Data: msg.Message}) + _, err = dbChat.Create(&core.Chat{ + TicketID: ticketResult.Tickets[0].ID, + UserID: resultAdmin.AdminID, + Admin: true, + Data: msg.Message, + }) if err != nil { conn.WriteJSON(&support.WebSocketResult{Err: "db write error"}) } else { msg.UserID = resultAdmin.AdminID - msg.GroupID = ticketResult.Ticket[0].GroupID + msg.GroupID = ticketResult.Tickets[0].GroupID + msg.UserName = "HomeNOC(運営)" msg.Admin = true // Token関連の初期化 msg.AccessToken = "" msg.UserToken = "" //Admin側に送信 - controller.SendChatAdmin(controllerInterface.Chat{CreatedAt: msg.CreatedAt, Admin: msg.Admin, - UserID: resultAdmin.AdminID, GroupID: ticketResult.Ticket[0].GroupID, Message: msg.Message}) + controller.SendChatAdmin(controllerInterface.Chat{ + CreatedAt: msg.CreatedAt, + Admin: msg.Admin, + UserID: resultAdmin.AdminID, + UserName: msg.UserName, + GroupID: ticketResult.Tickets[0].GroupID, + Message: msg.Message, + }) + + resultTicket := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: ticketResult.Tickets[0].ID}}) + if resultTicket.Err != nil { + log.Println(resultTicket.Err) + } + //if len(resultTicket.Tickets) != 0 { + // resultUser := dbUser.Get(user.GIDAndLevel, &core.User{ + // GroupID: resultTicket.Tickets[0].GroupID, + // Level: 1, + // }) + // if resultUser.Err != nil { + // log.Println(resultUser.Err) + // } + //} support.Broadcast <- msg } @@ -233,7 +274,14 @@ func HandleMessagesAdmin() { if client.GroupID == 0 { return } else if client.GroupID == msg.GroupID { - err := client.Socket.WriteJSON(msg) + err := client.Socket.WriteJSON(support.WebSocketChatResponse{ + Time: time.Now().UTC().Add(9 * time.Hour).Format(timeLayout), + UserID: msg.UserID, + UserName: msg.UserName, + GroupID: msg.GroupID, + Admin: msg.Admin, + Message: msg.Message, + }) if err != nil { log.Printf("error: %v", err) client.Socket.Close() diff --git a/pkg/api/core/support/ticket/v0/ticket.go b/pkg/api/core/support/ticket/v0/ticket.go index b904e4b..94ed4b2 100644 --- a/pkg/api/core/support/ticket/v0/ticket.go +++ b/pkg/api/core/support/ticket/v0/ticket.go @@ -2,66 +2,87 @@ package v0 import ( "fmt" + "github.com/ashwanthkumar/slack-go-webhook" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" + "github.com/homenoc/dsbd-backend/pkg/api/core/tool/notification" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" controllerInterface "github.com/vmmgr/controller/pkg/api/core/controller" controller "github.com/vmmgr/controller/pkg/api/core/controller/v0" "github.com/vmmgr/controller/pkg/api/core/support" - "github.com/vmmgr/controller/pkg/api/core/support/chat" "github.com/vmmgr/controller/pkg/api/core/support/ticket" - "github.com/vmmgr/controller/pkg/api/core/token" dbChat "github.com/vmmgr/controller/pkg/api/store/support/chat/v0" dbTicket "github.com/vmmgr/controller/pkg/api/store/support/ticket/v0" "log" "net/http" "strconv" + "time" ) +const timeLayout = "2006-01-02 15:04:05 JST" + func Create(c *gin.Context) { var input support.FirstInput userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - c.BindJSON(&input) + err := c.BindJSON(&input) + if err != nil { + log.Println(err) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) + return + } // Group authentication - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: result.Err.Error()}) return } // input check if err := check(input); err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - // Chat DBに登録 - chatResult, err := dbChat.Create(&chat.Chat{UserID: result.User.ID, Admin: false, Data: input.Data}) + // Tickets DBに登録 + ticketResult, err := dbTicket.Create(&core.Ticket{ + GroupID: result.User.GroupID, + UserID: result.User.ID, + Solved: &[]bool{false}[0], + Title: input.Title, + }) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - // Ticket DBに登録 - ticketResult, err := dbTicket.Create(&ticket.Ticket{GroupID: result.Group.ID, UserID: result.User.ID, - ChatIDStart: chatResult.ID, ChatIDEnd: chatResult.ID, Solved: &[]bool{false}[0], Title: input.Title}) + // Chat DBに登録 + _, err = dbChat.Create(&core.Chat{ + UserID: result.User.ID, + Admin: false, + Data: input.Data, + TicketID: ticketResult.ID, + }) if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - // Chat DBにTicketIDを登録 - err = dbChat.Update(chat.UpdateAll, chat.Chat{Admin: false, Data: chatResult.Data, TicketID: ticketResult.ID}) - if err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: err.Error()}) - return - } - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: []ticket.Ticket{*ticketResult}, - Chat: []chat.Chat{*chatResult}}) + //HomeNOC Slackに送信 + attachment := slack.Attachment{} + attachment.AddField(slack.Field{Title: "Title", Value: "新規チケット作成"}). + AddField(slack.Field{Title: "発行者", Value: strconv.Itoa(int(result.User.ID))}). + AddField(slack.Field{Title: "Group", Value: strconv.Itoa(int(result.User.GroupID)) + "-" + result.User.Group.Org}). + AddField(slack.Field{Title: "Title", Value: input.Title}). + AddField(slack.Field{Title: "Message", Value: input.Data}) + notification.SendSlack(notification.Slack{Attachment: attachment, ID: "main", Status: true}) + + c.JSON(http.StatusOK, common.Result{}) } func Get(c *gin.Context) { @@ -70,60 +91,101 @@ func Get(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, support.Result{Status: false, Error: fmt.Sprintf("id error")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("id error")}) return } // Group authentication - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: result.Err.Error()}) return } // IDからDBからチケットを検索 - resultTicket := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + resultTicket := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if resultTicket.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultTicket.Err.Error()}) return } // GroupIDが一致しない場合はここでエラーを返す - if resultTicket.Ticket[0].GroupID != result.Group.ID { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: "Auth Error: group id failed..."}) + if resultTicket.Tickets[0].GroupID != result.User.GroupID { + c.JSON(http.StatusForbidden, common.Error{Error: "Auth Error: group id failed..."}) return } - // Ticket DBからTicket IDのTicketデータを抽出 - // このとき、データはIDの昇順で出力 - resultChat := dbChat.Get(chat.TicketID, &chat.Chat{TicketID: resultTicket.Ticket[0].ID}) - if resultChat.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) - return + var response ticket.Ticket + + var resultChat []ticket.Chat + for _, tmpChat := range resultTicket.Tickets[0].Chat { + resultChat = append(resultChat, ticket.Chat{ + Time: tmpChat.CreatedAt.Add(9 * time.Hour).Format(timeLayout), + UserID: tmpChat.UserID, + UserName: tmpChat.User.Name, + Admin: tmpChat.Admin, + Data: tmpChat.Data, + }) } - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: resultTicket.Ticket, Chat: resultChat.Chat}) + + response = ticket.Ticket{ + ID: resultTicket.Tickets[0].ID, + Time: resultTicket.Tickets[0].CreatedAt.Add(9 * time.Hour).Format(timeLayout), + GroupID: resultTicket.Tickets[0].GroupID, + UserID: resultTicket.Tickets[0].UserID, + Solved: resultTicket.Tickets[0].Solved, + Chat: resultChat, + Title: resultTicket.Tickets[0].Title, + UserName: resultTicket.Tickets[0].User.Name, + } + + c.JSON(http.StatusOK, ticket.Result{Ticket: response}) } -func GetTitle(c *gin.Context) { +func GetAll(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: result.Err.Error()}) return } - // Ticket DBからGroup IDのTicketデータを抽出 - resultTicket := dbTicket.Get(ticket.GroupID, &ticket.Ticket{GroupID: result.Group.ID}) + // Tickets DBからGroup IDのTicketデータを抽出 + resultTicket := dbTicket.Get(ticket.GID, &core.Ticket{GroupID: result.User.GroupID}) if resultTicket.Err != nil { - c.JSON(http.StatusInternalServerError, support.Result{Status: false, Error: resultTicket.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultTicket.Err.Error()}) return } - log.Println(resultTicket) + var response []ticket.Ticket + + for _, tmp := range resultTicket.Tickets { + var resultChat []ticket.Chat + for _, tmpChat := range tmp.Chat { + resultChat = append(resultChat, ticket.Chat{ + Time: tmpChat.CreatedAt.Add(9 * time.Hour).Format(timeLayout), + UserID: tmpChat.UserID, + UserName: tmpChat.User.Name, + Admin: tmpChat.Admin, + Data: tmpChat.Data, + }) + } + + response = append(response, ticket.Ticket{ + ID: tmp.ID, + Time: tmp.CreatedAt.Add(9 * time.Hour).Format(timeLayout), + GroupID: tmp.GroupID, + UserID: tmp.UserID, + Solved: tmp.Solved, + Chat: resultChat, + Title: tmp.Title, + UserName: tmp.User.Name, + }) + } - c.JSON(http.StatusOK, support.Result{Status: true, Ticket: resultTicket.Ticket}) + c.JSON(http.StatusOK, ticket.ResultAll{Tickets: response}) } func GetWebSocket(c *gin.Context) { @@ -148,61 +210,100 @@ func GetWebSocket(c *gin.Context) { defer conn.Close() - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { log.Println("ws:// support error:Auth error") conn.WriteMessage(websocket.TextMessage, []byte("error: auth error")) return } - ticketResult := dbTicket.Get(ticket.ID, &ticket.Ticket{Model: gorm.Model{ID: uint(id)}}) + ticketResult := dbTicket.Get(ticket.ID, &core.Ticket{Model: gorm.Model{ID: uint(id)}}) if ticketResult.Err != nil { log.Println("ws:// support error: db error") conn.WriteMessage(websocket.TextMessage, []byte("error: db error")) return } - if ticketResult.Ticket[0].ID != uint(id) { + if ticketResult.Tickets[0].ID != uint(id) { log.Println("ticketID not match.") } // WebSocket送信 - support.Clients[&support.WebSocket{TicketID: uint(id), Admin: false, - UserID: result.User.ID, GroupID: result.Group.ID, Socket: conn}] = true + support.Clients[&support.WebSocket{ + TicketID: uint(id), + Admin: false, + UserID: result.User.ID, + UserName: result.User.Name, + GroupID: result.User.GroupID, + Socket: conn, + }] = true //WebSocket受信 for { var msg support.WebSocketResult - err := conn.ReadJSON(&msg) + err = conn.ReadJSON(&msg) if err != nil { log.Printf("error: %v", err) - delete(support.Clients, &support.WebSocket{TicketID: uint(id), Admin: false, UserID: result.User.ID, - GroupID: result.Group.ID, Socket: conn}) + delete(support.Clients, &support.WebSocket{ + TicketID: uint(id), + Admin: false, + UserID: result.User.ID, + UserName: result.User.Name, + GroupID: result.User.GroupID, + Socket: conn, + }) break } // 入力されたデータをTokenにて認証 - resultGroup := auth.GroupAuthentication(token.Token{UserToken: msg.UserToken, AccessToken: msg.AccessToken}) + resultGroup := auth.GroupAuthentication(0, core.Token{ + UserToken: msg.UserToken, + AccessToken: msg.AccessToken, + }) if resultGroup.Err != nil { log.Println(resultGroup.Err) return } - _, err = dbChat.Create(&chat.Chat{TicketID: ticketResult.Ticket[0].ID, UserID: result.User.ID, Admin: false, - Data: msg.Message}) - if err != nil { - conn.WriteJSON(&support.WebSocketResult{Err: "db write error"}) - } else { - msg.UserID = result.User.ID - msg.GroupID = resultGroup.Group.ID - msg.Admin = false - // Token関連の初期化 - msg.AccessToken = "" - msg.UserToken = "" - - controller.SendChatUser(controllerInterface.Chat{CreatedAt: msg.CreatedAt, - UserID: result.User.ID, GroupID: resultGroup.Group.ID, Admin: msg.Admin, Message: msg.Message}) - - support.Broadcast <- msg + if !*ticketResult.Tickets[0].Solved { + _, err = dbChat.Create(&core.Chat{ + TicketID: ticketResult.Tickets[0].ID, + UserID: result.User.ID, + Admin: false, + Data: msg.Message, + }) + if err != nil { + conn.WriteJSON(&support.WebSocketResult{Err: "db write error"}) + } else { + + msg.UserID = result.User.ID + msg.GroupID = resultGroup.User.GroupID + msg.Admin = false + msg.UserName = result.User.Name + // Token関連の初期化 + msg.AccessToken = "" + msg.UserToken = "" + + //ユーザ側に送信 + controller.SendChatUser(controllerInterface.Chat{ + CreatedAt: msg.CreatedAt, + UserID: result.User.ID, + UserName: result.User.Name, + GroupID: resultGroup.User.GroupID, + Admin: msg.Admin, + Message: msg.Message, + }) + + //Slackに送信 + attachment := slack.Attachment{} + attachment.AddField(slack.Field{Title: "Title", Value: "Support(新規メッセージ)"}). + AddField(slack.Field{Title: "発行者", Value: strconv.Itoa(int(result.User.ID)) + "-" + result.User.Name}). + AddField(slack.Field{Title: "Group", Value: strconv.Itoa(int(result.User.GroupID)) + "-" + result.User.Group.Org}). + AddField(slack.Field{Title: "Title", Value: ticketResult.Tickets[0].Title}). + AddField(slack.Field{Title: "Message", Value: msg.Message}) + notification.SendSlack(notification.Slack{Attachment: attachment, ID: "main", Status: true}) + + support.Broadcast <- msg + } } } } @@ -217,7 +318,14 @@ func HandleMessages() { if client.GroupID == 0 { return } else if client.GroupID == msg.GroupID { - err := client.Socket.WriteJSON(msg) + err := client.Socket.WriteJSON(support.WebSocketChatResponse{ + Time: time.Now().UTC().Add(9 * time.Hour).Format(timeLayout), + UserID: msg.UserID, + UserName: msg.UserName, + GroupID: msg.GroupID, + Admin: msg.Admin, + Message: msg.Message, + }) if err != nil { log.Printf("error: %v", err) client.Socket.Close() diff --git a/pkg/api/core/support/ticket/v0/update.go b/pkg/api/core/support/ticket/v0/update.go index 8871f70..7b01df5 100644 --- a/pkg/api/core/support/ticket/v0/update.go +++ b/pkg/api/core/support/ticket/v0/update.go @@ -1,10 +1,10 @@ package v0 import ( - "github.com/vmmgr/controller/pkg/api/core/support/ticket" + "github.com/vmmgr/controller/pkg/api/core" ) -func updateAdminTicket(input, replace ticket.Ticket) (ticket.Ticket, error) { +func updateAdminTicket(input, replace core.Ticket) (core.Ticket, error) { //Title if input.Title != "" { diff --git a/pkg/api/core/token/interface.go b/pkg/api/core/token/interface.go index e7229ba..a4a16a6 100644 --- a/pkg/api/core/token/interface.go +++ b/pkg/api/core/token/interface.go @@ -1,9 +1,6 @@ package token -import ( - "github.com/jinzhu/gorm" - "time" -) +import "github.com/vmmgr/controller/pkg/api/core" const ( ID = 0 @@ -17,23 +14,10 @@ const ( UpdateAll = 110 ) -type Token struct { - gorm.Model - ExpiredAt time.Time `json:"expired_at"` - UserID uint `json:"user_id"` - AdminID uint `json:"admin_id"` - Status uint `json:"status"` //0: initToken(30m) 1: 30m 2:6h 3: 12h 10: 30d 11:180d - Admin bool `json:"admin"` - UserToken string `json:"user_token"` - TmpToken string `json:"tmp_token"` - AccessToken string `json:"access_token"` - Debug string `json:"debug"` -} - type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - Token []Token `json:"token"` + Status bool `json:"status"` + Error string `json:"error"` + Token []core.Token `json:"token"` } type ResultTmpToken struct { @@ -44,5 +28,5 @@ type ResultTmpToken struct { type ResultDatabase struct { Err error - Token []Token + Token []core.Token } diff --git a/pkg/api/core/token/v0/admin.go b/pkg/api/core/token/v0/admin.go index 1259e54..2ab51b3 100644 --- a/pkg/api/core/token/v0/admin.go +++ b/pkg/api/core/token/v0/admin.go @@ -3,8 +3,10 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" authInterface "github.com/vmmgr/controller/pkg/api/core/auth" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/token" toolToken "github.com/vmmgr/controller/pkg/api/core/tool/token" dbToken "github.com/vmmgr/controller/pkg/api/store/token/v0" @@ -17,120 +19,127 @@ func GenerateAdmin(c *gin.Context) { resultAuth := auth.AdminRadiusAuthentication(authInterface.AdminStruct{ User: c.Request.Header.Get("USER"), Pass: c.Request.Header.Get("PASS")}) if resultAuth.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAuth.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAuth.Err.Error()}) return } accessToken, _ := toolToken.Generate(2) - if err := dbToken.Create(&token.Token{AdminID: resultAuth.AdminID, UserID: 0, ExpiredAt: time.Now().Add(60 * time.Minute), - Admin: true, AccessToken: accessToken, Debug: "User: " + c.Request.Header.Get("USER")}); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + if err := dbToken.Create(&core.Token{ + UserID: 0, ExpiredAt: time.Now().Add(60 * time.Minute), + Admin: &[]bool{true}[0], + AccessToken: accessToken, + Debug: "User: " + c.Request.Header.Get("USER"), + }); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true, Token: []token.Token{{AccessToken: accessToken}}}) + c.JSON(http.StatusOK, token.Result{Token: []core.Token{{AccessToken: accessToken}}}) } func AddAdmin(c *gin.Context) { - var input token.Token + var input core.Token resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) accessToken, _ := toolToken.Generate(2) - if err := dbToken.Create(&token.Token{ - Admin: true, AccessToken: accessToken, Debug: "User: " + c.Request.Header.Get("USER")}); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + if err := dbToken.Create(&core.Token{ + Admin: &[]bool{true}[0], + AccessToken: accessToken, + Debug: "User: " + c.Request.Header.Get("USER"), + }); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.ResultTmpToken{Status: true, Token: accessToken}) + c.JSON(http.StatusOK, token.ResultTmpToken{Token: accessToken}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - if err := dbToken.Delete(&token.Token{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + if err = dbToken.Delete(&core.Token{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true}) + c.JSON(http.StatusOK, token.Result{}) } func DeleteAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } if err := dbToken.DeleteAll(); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true}) + c.JSON(http.StatusOK, token.Result{}) } func UpdateAdmin(c *gin.Context) { - var input token.Token + var input core.Token resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) if err := dbToken.Update(token.UpdateAll, &input); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true}) + c.JSON(http.StatusOK, token.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - result := dbToken.Get(token.ID, &token.Token{Model: gorm.Model{ID: uint(id)}}) + result := dbToken.Get(token.ID, &core.Token{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true, Token: result.Token}) + c.JSON(http.StatusOK, token.Result{Token: result.Token}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbToken.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, token.Result{Status: true, Token: result.Token}) + c.JSON(http.StatusOK, token.Result{Token: result.Token}) } } diff --git a/pkg/api/core/token/v0/remove.go b/pkg/api/core/token/v0/remove.go index 7b0e2ef..223e842 100644 --- a/pkg/api/core/token/v0/remove.go +++ b/pkg/api/core/token/v0/remove.go @@ -2,6 +2,7 @@ package v0 import ( "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/token" dbToken "github.com/vmmgr/controller/pkg/api/store/token/v0" "log" @@ -15,12 +16,12 @@ func TokenRemove() { for { select { case <-t.C: - result := dbToken.Get(token.ExpiredTime, &token.Token{}) + result := dbToken.Get(token.ExpiredTime, &core.Token{}) if result.Err != nil { log.Println(result.Err) } for _, tmp := range result.Token { - dbToken.Delete(&token.Token{Model: gorm.Model{ID: tmp.ID}}) + dbToken.Delete(&core.Token{Model: gorm.Model{ID: tmp.ID}}) } } } diff --git a/pkg/api/core/token/v0/token.go b/pkg/api/core/token/v0/token.go index 4671bcf..2900b7e 100644 --- a/pkg/api/core/token/v0/token.go +++ b/pkg/api/core/token/v0/token.go @@ -4,6 +4,8 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/core/tool/hash" logging "github.com/vmmgr/controller/pkg/api/core/tool/log" @@ -22,14 +24,20 @@ func GenerateInit(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") log.Println("userToken: " + userToken) tmpToken, _ := toolToken.Generate(2) - err := dbToken.Create(&token.Token{ExpiredAt: time.Now().Add(30 * time.Minute), UserID: 0, Status: 0, - UserToken: userToken, TmpToken: tmpToken, Debug: ip, Admin: false}) + err := dbToken.Create(&core.Token{ + ExpiredAt: time.Now().Add(30 * time.Minute), + UserID: 0, Status: 0, + UserToken: userToken, + TmpToken: tmpToken, + Debug: ip, + Admin: &[]bool{false}[0], + }) if err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { log.Println("Time: " + time.Now().String() + " IP: " + c.ClientIP()) logging.WriteLog("IP: " + c.ClientIP()) - c.JSON(http.StatusOK, &token.ResultTmpToken{Status: true, Token: tmpToken}) + c.JSON(http.StatusOK, &token.ResultTmpToken{Token: tmpToken}) } } @@ -37,24 +45,19 @@ func Generate(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") hashPass := c.Request.Header.Get("HASH_PASS") mail := c.Request.Header.Get("Email") - tokenResult := dbToken.Get(token.UserToken, &token.Token{UserToken: userToken}) + tokenResult := dbToken.Get(token.UserToken, &core.Token{UserToken: userToken}) if tokenResult.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: tokenResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tokenResult.Err.Error()}) return } - userResult := dbUser.Get(user.Email, &user.User{Email: mail}) + userResult := dbUser.Get(user.Email, &core.User{Email: mail}) if userResult.Err != nil { - c.JSON(http.StatusInternalServerError, &token.Result{Status: false, Error: userResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, &common.Error{Error: userResult.Err.Error()}) return } - if !userResult.User[0].MailVerify { - c.JSON(http.StatusInternalServerError, &token.Result{Status: false, Error: fmt.Sprintf("You don't have email verification.")}) - return - } - - if userResult.User[0].Status >= 100 { - c.JSON(http.StatusInternalServerError, &token.Result{Status: false, Error: fmt.Sprintf("status error")}) + if !*userResult.User[0].MailVerify { + c.JSON(http.StatusInternalServerError, &common.Error{Error: fmt.Sprintf("You don't have email verification.")}) return } @@ -63,17 +66,17 @@ func Generate(c *gin.Context) { log.Println(tokenResult.Token[0].TmpToken) log.Println("hash(server): " + hash.Generate(userResult.User[0].Pass+tokenResult.Token[0].TmpToken)) log.Println("hash(client): " + hashPass) - c.JSON(http.StatusInternalServerError, &token.Result{Status: false, Error: "not match"}) + c.JSON(http.StatusInternalServerError, &common.Error{Error: "not match"}) return } accessToken, _ := toolToken.Generate(2) - err := dbToken.Update(token.AddToken, &token.Token{Model: gorm.Model{ID: tokenResult.Token[0].Model.ID}, + err := dbToken.Update(token.AddToken, &core.Token{Model: gorm.Model{ID: tokenResult.Token[0].Model.ID}, ExpiredAt: time.Now().Add(30 * time.Minute), UserID: userResult.User[0].ID, Status: 1, AccessToken: accessToken}) if err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { - tmp := []token.Token{{AccessToken: accessToken}} - c.JSON(http.StatusOK, &token.Result{Status: true, Token: tmp}) + tmp := []core.Token{{AccessToken: accessToken}} + c.JSON(http.StatusOK, &token.Result{Token: tmp}) } } @@ -81,14 +84,14 @@ func Delete(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - result := dbToken.Get(token.UserTokenAndAccessToken, &token.Token{UserToken: userToken, AccessToken: accessToken}) + result := dbToken.Get(token.UserTokenAndAccessToken, &core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - if err := dbToken.Delete(&token.Token{Model: gorm.Model{ID: result.Token[0].ID}}); err != nil { - c.JSON(http.StatusInternalServerError, token.Result{Status: false, Error: err.Error()}) + if err := dbToken.Delete(&core.Token{Model: gorm.Model{ID: result.Token[0].ID}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, token.Result{Status: true}) + c.JSON(http.StatusOK, token.Result{}) } diff --git a/pkg/api/core/tool/config/config.go b/pkg/api/core/tool/config/config.go index f42e4c1..fa7ad5e 100644 --- a/pkg/api/core/tool/config/config.go +++ b/pkg/api/core/tool/config/config.go @@ -7,6 +7,7 @@ import ( type Config struct { Controller Controller `json:"controller"` + Node Node `json:"node"` DB DB `json:"db"` ImaCon []ImaCon `json:"imacon"` Mail Mail `json:"mail"` @@ -21,6 +22,10 @@ type Controller struct { Auth Auth `json:"auth"` } +type Node struct { + User string `json:"user"` +} + type ImaCon struct { IP string `json:"ip"` Port uint `json:"port"` diff --git a/pkg/api/core/user/interface.go b/pkg/api/core/user/interface.go index 4e96af4..5af4598 100644 --- a/pkg/api/core/user/interface.go +++ b/pkg/api/core/user/interface.go @@ -1,6 +1,6 @@ package user -import "github.com/jinzhu/gorm" +import "github.com/vmmgr/controller/pkg/api/core" const ( ID = 0 @@ -11,36 +11,23 @@ const ( UpdateVerifyMail = 100 UpdateGroupID = 101 UpdateInfo = 102 - UpdateStatus = 105 UpdateLevel = 106 UpdateAll = 110 ) -type User struct { - gorm.Model - GroupID uint `json:"group_id"` - Name string `json:"name"` - Email string `json:"email"` - Pass string `json:"pass"` - Status uint `json:"status"` - Level uint `json:"level"` - MailVerify bool `json:"mail_verify"` - MailToken string `json:"mail_token"` -} - type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - User User `json:"data"` + Status bool `json:"status"` + Error string `json:"error"` + User core.User `json:"data"` } type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - User []User `json:"data"` + Status bool `json:"status"` + Error string `json:"error"` + User []core.User `json:"data"` } type ResultDatabase struct { Err error - User []User + User []core.User } diff --git a/pkg/api/core/user/v0/admin.go b/pkg/api/core/user/v0/admin.go index 375e83b..8d0975e 100644 --- a/pkg/api/core/user/v0/admin.go +++ b/pkg/api/core/user/v0/admin.go @@ -5,8 +5,9 @@ import ( "github.com/ashwanthkumar/slack-go-webhook" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" - "github.com/vmmgr/controller/pkg/api/core/token" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/tool/config" "github.com/vmmgr/controller/pkg/api/core/tool/gen" "github.com/vmmgr/controller/pkg/api/core/tool/hash" @@ -22,27 +23,27 @@ import ( ) func AddAdmin(c *gin.Context) { - var input, data user.User + var input, data core.User resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) if !strings.Contains(input.Email, "@") { - c.JSON(http.StatusBadRequest, user.Result{Status: false, Error: fmt.Sprintf("wrong email address")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("wrong email address")}) return } if input.Name == "" { - c.JSON(http.StatusBadRequest, user.Result{Status: false, Error: fmt.Sprintf("wrong name")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("wrong name")}) return } if err := check(input); err != nil { - c.JSON(http.StatusBadRequest, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } @@ -53,11 +54,17 @@ func AddAdmin(c *gin.Context) { // 新規ユーザ if input.GroupID == 0 { //new user if input.Pass == "" { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("wrong pass")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("wrong pass")}) return } - data = user.User{GroupID: 0, Name: input.Name, Email: input.Email, Pass: input.Pass, Status: 0, Level: 1, - MailVerify: false, MailToken: mailToken} + data = core.User{GroupID: 0, + Name: input.Name, + Email: input.Email, + Pass: input.Pass, + Level: 1, + MailVerify: &[]bool{false}[0], + MailToken: mailToken, + } // グループ所属ユーザの登録 } else { @@ -65,20 +72,27 @@ func AddAdmin(c *gin.Context) { log.Println("Email: " + input.Email) log.Println("tmp_Pass: " + pass) - data = user.User{GroupID: input.GroupID, Name: input.Name, Email: input.Email, Status: 0, Level: input.Level, - Pass: strings.ToLower(hash.Generate(pass)), MailVerify: false, MailToken: mailToken} + data = core.User{ + GroupID: input.GroupID, + Name: input.Name, + Email: input.Email, + Level: input.Level, + Pass: strings.ToLower(hash.Generate(pass)), + MailVerify: &[]bool{false}[0], + MailToken: mailToken, + } } //check exist for database if err := dbUser.Create(&data); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { attachment := slack.Attachment{} attachment.AddField(slack.Field{Title: "E-Mail", Value: input.Email}). AddField(slack.Field{Title: "GroupID", Value: strconv.Itoa(int(input.GroupID))}). AddField(slack.Field{Title: "Name", Value: input.Name}) - notification.SendSlack(notification.Slack{Attachment: attachment, Channel: "user", Status: true}) + notification.SendSlack(notification.Slack{Attachment: attachment, Channel: "user"}) if pass == "" { mail.SendMail(mail.Mail{ @@ -98,106 +112,106 @@ func AddAdmin(c *gin.Context) { }) } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } } func GenerateAdmin(c *gin.Context) { - var input user.User + var input core.User resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) if err := dbUser.Create(&input); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - if err := dbUser.Delete(&user.User{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + if err := dbUser.Delete(&core.User{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } func UpdateAdmin(c *gin.Context) { - var input user.User + var input core.User resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } c.BindJSON(&input) - tmp := dbUser.Get(user.ID, &user.User{Model: gorm.Model{ID: input.ID}}) + tmp := dbUser.Get(user.ID, &core.User{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.User[0]) if err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } - if err := dbUser.Update(user.UpdateAll, &replace); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + if err = dbUser.Update(user.UpdateAll, &replace); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - result := dbUser.Get(user.ID, &user.User{Model: gorm.Model{ID: uint(id)}}) + result := dbUser.Get(user.ID, &core.User{Model: gorm.Model{ID: uint(id)}}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, user.Result{Status: true, User: result.User}) + c.JSON(http.StatusOK, user.Result{User: result.User}) } func GetAllAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusForbidden, token.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusForbidden, common.Error{Error: resultAdmin.Err.Error()}) return } if result := dbUser.GetAll(); result.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) } else { - c.JSON(http.StatusOK, user.Result{Status: true, User: result.User}) + c.JSON(http.StatusOK, user.Result{User: result.User}) } } diff --git a/pkg/api/core/user/v0/check.go b/pkg/api/core/user/v0/check.go index 38a7b58..ec7c297 100644 --- a/pkg/api/core/user/v0/check.go +++ b/pkg/api/core/user/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/user" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input user.User) error { +func check(input core.User) error { // check if input.Name == "" { return fmt.Errorf("no data: name") diff --git a/pkg/api/core/user/v0/update.go b/pkg/api/core/user/v0/update.go index 0d9c9f8..accf729 100644 --- a/pkg/api/core/user/v0/update.go +++ b/pkg/api/core/user/v0/update.go @@ -2,6 +2,7 @@ package v0 import ( "fmt" + "github.com/vmmgr/controller/pkg/api/core" toolToken "github.com/vmmgr/controller/pkg/api/core/tool/token" "github.com/vmmgr/controller/pkg/api/core/user" dbUser "github.com/vmmgr/controller/pkg/api/store/user/v0" @@ -9,8 +10,7 @@ import ( "strings" ) -func replaceUser(serverData, input, replace user.User) (user.User, error) { - updateInfo := 0 +func replaceUser(serverData, input, replace core.User) (core.User, error) { //Name if input.Name == "" { replace.Name = serverData.Name @@ -25,9 +25,9 @@ func replaceUser(serverData, input, replace user.User) (user.User, error) { replace.MailVerify = serverData.MailVerify } else { if !strings.Contains(input.Email, "@") { - return user.User{}, fmt.Errorf("wrong email address") + return core.User{}, fmt.Errorf("wrong email address") } - tmp := dbUser.Get(user.Email, &user.User{Email: input.Email}) + tmp := dbUser.Get(user.Email, &core.User{Email: input.Email}) if tmp.Err != nil { return replace, tmp.Err } @@ -38,7 +38,7 @@ func replaceUser(serverData, input, replace user.User) (user.User, error) { mailToken, _ := toolToken.Generate(4) replace.Email = input.Email - replace.MailVerify = false + replace.MailVerify = &[]bool{false}[0] replace.MailToken = mailToken } @@ -49,16 +49,10 @@ func replaceUser(serverData, input, replace user.User) (user.User, error) { replace.Pass = input.Pass } - if serverData.Status == 0 && updateInfo == 5 { - replace.Status = 1 - } else if serverData.Status == 0 && updateInfo < 5 { - return replace, fmt.Errorf("lack of information") - } - return replace, nil } -func updateAdminUser(input, replace user.User) (user.User, error) { +func updateAdminUser(input, replace core.User) (core.User, error) { //Name if input.Name != "" { replace.Name = input.Name @@ -67,9 +61,9 @@ func updateAdminUser(input, replace user.User) (user.User, error) { //E-Mail if input.Email != "" { if !strings.Contains(input.Email, "@") { - return user.User{}, fmt.Errorf("wrong email address") + return core.User{}, fmt.Errorf("wrong email address") } - tmp := dbUser.Get(user.Email, &user.User{Email: input.Email}) + tmp := dbUser.Get(user.Email, &core.User{Email: input.Email}) if tmp.Err != nil { return replace, tmp.Err } @@ -80,7 +74,7 @@ func updateAdminUser(input, replace user.User) (user.User, error) { mailToken, _ := toolToken.Generate(4) replace.Email = input.Email - replace.MailVerify = false + replace.MailVerify = &[]bool{false}[0] replace.MailToken = mailToken } @@ -89,11 +83,6 @@ func updateAdminUser(input, replace user.User) (user.User, error) { replace.Pass = input.Pass } - //Status - if input.Status != replace.Status { - replace.Status = input.Status - } - //Level if input.Level != replace.Level { replace.Level = input.Level diff --git a/pkg/api/core/user/v0/user.go b/pkg/api/core/user/v0/user.go index 8f8719f..64e08f7 100644 --- a/pkg/api/core/user/v0/user.go +++ b/pkg/api/core/user/v0/user.go @@ -5,8 +5,9 @@ import ( "github.com/ashwanthkumar/slack-go-webhook" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" - "github.com/vmmgr/controller/pkg/api/core/token" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/tool/config" "github.com/vmmgr/controller/pkg/api/core/tool/gen" "github.com/vmmgr/controller/pkg/api/core/tool/hash" @@ -22,23 +23,23 @@ import ( ) func Add(c *gin.Context) { - var input, data user.User + var input, data core.User userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") c.BindJSON(&input) if !strings.Contains(input.Email, "@") { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("wrong email address")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("wrong email address")}) return } if input.Name == "" { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("wrong name")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("wrong name")}) return } if err := check(input); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } @@ -49,25 +50,32 @@ func Add(c *gin.Context) { // 新規ユーザ if input.GroupID == 0 { //new user if input.Pass == "" { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("wrong pass")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("wrong pass")}) return } - data = user.User{GroupID: 0, Name: input.Name, Email: input.Email, Pass: input.Pass, Status: 0, Level: 1, - MailVerify: false, MailToken: mailToken} + data = core.User{ + GroupID: 0, + Name: input.Name, + Email: input.Email, + Pass: input.Pass, + Level: 1, + MailVerify: &[]bool{false}[0], + MailToken: mailToken, + } // グループ所属ユーザの登録 } else { if input.Level == 0 || input.Level > 5 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("wrong user level")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("wrong user level")}) return } - authResult := auth.UserAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + authResult := auth.UserAuthentication(core.Token{UserToken: userToken, AccessToken: accessToken}) if authResult.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: authResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: authResult.Err.Error()}) return } if authResult.User.GroupID != input.GroupID && authResult.User.GroupID > 0 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "GroupID mismatch"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "GroupID mismatch"}) return } @@ -75,20 +83,27 @@ func Add(c *gin.Context) { log.Println("Email: " + input.Email) log.Println("tmp_Pass: " + pass) - data = user.User{GroupID: input.GroupID, Name: input.Name, Email: input.Email, Status: 0, Level: input.Level, - Pass: strings.ToLower(hash.Generate(pass)), MailVerify: false, MailToken: mailToken} + data = core.User{ + GroupID: input.GroupID, + Name: input.Name, + Email: input.Email, + Level: input.Level, + Pass: strings.ToLower(hash.Generate(pass)), + MailVerify: &[]bool{false}[0], + MailToken: mailToken, + } } //check exist for database if err := dbUser.Create(&data); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { attachment := slack.Attachment{} attachment.AddField(slack.Field{Title: "E-Mail", Value: input.Email}). AddField(slack.Field{Title: "GroupID", Value: strconv.Itoa(int(input.GroupID))}). AddField(slack.Field{Title: "Name", Value: input.Name}) - notification.SendSlack(notification.Slack{Attachment: attachment, Channel: "user", Status: true}) + notification.SendSlack(notification.Slack{Attachment: attachment, Channel: "user"}) if pass == "" { mail.SendMail(mail.Mail{ @@ -108,42 +123,44 @@ func Add(c *gin.Context) { }) } - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } } func MailVerify(c *gin.Context) { token := c.Param("token") - result := dbUser.Get(user.MailToken, &user.User{MailToken: token}) + result := dbUser.Get(user.MailToken, &core.User{MailToken: token}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: result.Err.Error() + "| we can't find token data"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error() + "| we can't find token data"}) return } - if result.User[0].MailVerify { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("This email has already been checked")}) - return - } - if result.User[0].Status >= 100 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("error: user status")}) + if *result.User[0].MailVerify { + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("This email has already been checked")}) return } + //if result.User[0].Status >= 100 { + // c.JSON(http.StatusInternalServerError, common.Error{ Error: fmt.Sprintf("error: user status")}) + // return + //} - if err := dbUser.Update(user.UpdateVerifyMail, &user.User{Model: gorm.Model{ID: result.User[0].ID}, - MailVerify: true}); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + if err := dbUser.Update(user.UpdateVerifyMail, &core.User{ + Model: gorm.Model{ID: result.User[0].ID}, + MailVerify: &[]bool{true}[0], + }); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { - c.JSON(http.StatusOK, &user.Result{Status: true}) + c.JSON(http.StatusOK, &user.Result{}) } } func Update(c *gin.Context) { - var input user.User + var input core.User id, err := strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, user.Result{Status: false, Error: fmt.Sprintf("id error")}) + c.JSON(http.StatusBadRequest, common.Error{Error: fmt.Sprintf("id error")}) return } userToken := c.Request.Header.Get("USER_TOKEN") @@ -151,56 +168,54 @@ func Update(c *gin.Context) { c.BindJSON(&input) - authResult := auth.UserAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + authResult := auth.UserAuthentication(core.Token{UserToken: userToken, AccessToken: accessToken}) if authResult.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: authResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: authResult.Err.Error()}) return } - if !authResult.User.MailVerify { - c.JSON(http.StatusBadRequest, user.Result{Status: false, Error: "not verify for user mail"}) + if !*authResult.User.MailVerify { + c.JSON(http.StatusBadRequest, common.Error{Error: "not verify for user mail"}) return } - var u, serverData user.User + var u, serverData core.User if authResult.User.ID == uint(id) || id == 0 { serverData = authResult.User u.Model.ID = authResult.User.ID - u.Status = authResult.User.Status } else { if authResult.User.GroupID == 0 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "error: Group ID = 0"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: Group ID = 0"}) return } if authResult.User.Level > 1 { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: "error: failed user level"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: failed user level"}) return } - userResult := dbUser.Get(user.ID, &user.User{Model: gorm.Model{ID: uint(id)}}) + userResult := dbUser.Get(user.ID, &core.User{Model: gorm.Model{ID: uint(id)}}) if userResult.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: userResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: userResult.Err.Error()}) return } if userResult.User[0].GroupID != authResult.User.GroupID { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: fmt.Sprintf("failed group authentication")}) + c.JSON(http.StatusInternalServerError, common.Error{Error: fmt.Sprintf("failed group authentication")}) return } serverData = userResult.User[0] u.Model.ID = uint(id) - u.Status = userResult.User[0].Status } u, err = replaceUser(serverData, input, u) if err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - if err := dbUser.Update(user.UpdateInfo, &u); err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: err.Error()}) + if err = dbUser.Update(user.UpdateInfo, &u); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) } else { - c.JSON(http.StatusOK, user.Result{Status: true}) + c.JSON(http.StatusOK, user.Result{}) } } @@ -208,13 +223,13 @@ func Get(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - authResult := auth.UserAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + authResult := auth.UserAuthentication(core.Token{UserToken: userToken, AccessToken: accessToken}) authResult.User.Pass = "" authResult.User.MailToken = "" if authResult.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: authResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: authResult.Err.Error()}) } else { - c.JSON(http.StatusOK, user.ResultOne{Status: true, User: authResult.User}) + c.JSON(http.StatusOK, user.ResultOne{User: authResult.User}) } } @@ -222,21 +237,18 @@ func GetGroup(c *gin.Context) { userToken := c.Request.Header.Get("USER_TOKEN") accessToken := c.Request.Header.Get("ACCESS_TOKEN") - authResult := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) - result := dbUser.Get(user.GID, &user.User{GroupID: authResult.Group.ID}) + authResult := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) + result := dbUser.Get(user.GID, &core.User{GroupID: authResult.Group.ID}) if result.Err != nil { - c.JSON(http.StatusInternalServerError, user.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: result.Err.Error()}) return } - var data []user.User + var data []core.User for _, tmp := range result.User { tmp.Pass = "" tmp.MailToken = "" - if 0 < tmp.Status && tmp.Status < 100 { - data = append(data, tmp) - } } - c.JSON(http.StatusOK, user.Result{Status: true, User: data}) + c.JSON(http.StatusOK, user.Result{User: data}) } diff --git a/pkg/api/core/vm/interface.go b/pkg/api/core/vm/interface.go index 4aa9945..b391268 100644 --- a/pkg/api/core/vm/interface.go +++ b/pkg/api/core/vm/interface.go @@ -2,10 +2,8 @@ package vm import ( "github.com/gorilla/websocket" - "github.com/jinzhu/gorm" libvirtxml "github.com/libvirt/libvirt-go-xml" - "github.com/vmmgr/controller/pkg/api/core/vm/nic" - "github.com/vmmgr/controller/pkg/api/core/vm/storage" + "github.com/vmmgr/controller/pkg/api/core" imaConStorage "github.com/vmmgr/imacon/pkg/api/core/storage" nodeCloudInit "github.com/vmmgr/node/pkg/api/core/tool/cloudinit" nodeVM "github.com/vmmgr/node/pkg/api/core/vm" @@ -57,16 +55,6 @@ type WebSocket struct { Socket *websocket.Conn } -type VM struct { - gorm.Model - NodeID uint `json:"node_id"` - GroupID uint `json:"group_id"` - Name string `json:"name"` - UUID string `json:"uuid"` - VNCPort uint `json:"vnc_port"` - Lock *bool `json:"lock"` -} - type Input struct { NodeID uint `json:"node_id"` GroupID uint `json:"group_id"` @@ -101,9 +89,9 @@ type GetImaCon struct { } type VMAll struct { - VM VM - Storage storage.Storage - NIC nic.NIC + VM core.VM + Storage core.Storage + NIC core.NIC } type Detail struct { @@ -113,18 +101,20 @@ type Detail struct { } type Template struct { - Name string `json:"name"` - Password string `json:"password"` - NodeID uint `json:"node_id"` - TemplateID uint `json:"template_id"` - TemplatePlanID uint `json:"template_plan_id"` - StorageCapacity uint `json:"storage_capacity"` - StoragePathType uint `json:"storage_path_type"` - IP string `json:"ip"` - NetMask string `json:"netmask"` - Gateway string `json:"gateway"` - DNS string `json:"dns"` - NICType string `json:"nic_type"` //0:default 1~:custom + Name string `json:"name"` + Password string `json:"password"` + NodeID uint `json:"node_id"` + TemplateID uint `json:"template_id"` + TemplatePlanID uint `json:"template_plan_id"` + StorageCapacity uint `json:"storage_capacity"` + StoragePathType uint `json:"storage_path_type"` + IP string `json:"ip"` + NetMask string `json:"netmask"` + Gateway string `json:"gateway"` + DNS string `json:"dns"` + PCI []string `json:"pci"` + USB []string `json:"usb"` + NICType string `json:"nic_type"` //0:default 1~:custom } type CloudInit struct { @@ -135,9 +125,9 @@ type CloudInit struct { } type Result struct { - Status bool `json:"status"` - Error string `json:"error"` - VM []VM `json:"vm"` + Status bool `json:"status"` + Error string `json:"error"` + VM []core.VM `json:"vm"` } type ResultAdmin struct { @@ -153,14 +143,14 @@ type ResultOneAdmin struct { } type ResultOne struct { - Status bool `json:"status"` - Error string `json:"error"` - VM VM `json:"vm"` + Status bool `json:"status"` + Error string `json:"error"` + VM core.VM `json:"vm"` } type ResultDatabase struct { Err error - VMs []VM + VMs []core.VM } var WsUpgrader = websocket.Upgrader{ diff --git a/pkg/api/core/vm/v0/admin.go b/pkg/api/core/vm/v0/admin.go index b5c5ced..d456999 100644 --- a/pkg/api/core/vm/v0/admin.go +++ b/pkg/api/core/vm/v0/admin.go @@ -2,12 +2,18 @@ package v0 import ( "encoding/json" + "encoding/xml" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/libvirt/libvirt-go" + libVirtXml "github.com/libvirt/libvirt-go-xml" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/region" "github.com/vmmgr/controller/pkg/api/core/tool/client" + "github.com/vmmgr/controller/pkg/api/core/tool/config" "github.com/vmmgr/controller/pkg/api/core/vm" dbNode "github.com/vmmgr/controller/pkg/api/store/node/v0" dbVM "github.com/vmmgr/controller/pkg/api/store/vm/v0" @@ -30,6 +36,15 @@ type nodeAllVMResponse struct { } `json:"data"` } +type VMHandler struct { + Conn *libvirt.Connect + //VM vm.VirtualMachine +} + +func NewVMHandler(input VMHandler) *VMHandler { + return &VMHandler{Conn: input.Conn} +} + // #12 Issue func AddAdmin(c *gin.Context) { @@ -37,24 +52,24 @@ func AddAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if err := c.BindJSON(&input); err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } // nodeIDが存在するか確認 - resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: input.NodeID}}) + resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: input.NodeID}}) if resultNode.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultNode.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultNode.Err.Error()}) return } if len(resultNode.Node) == 0 { - c.JSON(http.StatusForbidden, vm.Result{Status: false, Error: "node id is not found..."}) + c.JSON(http.StatusForbidden, common.Error{Error: "node id is not found..."}) return } @@ -72,22 +87,22 @@ func AddAdmin(c *gin.Context) { if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, - vm.Result{Status: false, Error: err.Error() + "|" + resultVMCreateProcess}) + common.Error{Error: err.Error() + "|" + resultVMCreateProcess}) return } } else { //----ベースイメージコピー処理---- - h := NewVMAdminTemplateHandler(VMTemplateHandler{input: input.Template, node: resultNode.Node[0]}) + h := NewVMAdminTemplateHandler(VMTemplateHandler{input: input.VM, template: input.Template, node: resultNode.Node[0]}) err := h.templateApply() if err != nil { - c.JSON(http.StatusNotFound, vm.Result{Status: false, Error: "template is not found..."}) + c.JSON(http.StatusNotFound, common.Error{Error: "template is not found..."}) return } } - c.JSON(http.StatusOK, vm.Result{Status: true}) + c.JSON(http.StatusOK, vm.Result{}) } func DeleteAdmin(c *gin.Context) { @@ -95,131 +110,204 @@ func DeleteAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } if err := c.BindJSON(&input); err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } var id, err = strconv.Atoi(c.Param("id")) if err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - vmResult := dbVM.Get(vm.ID, &vm.VM{Model: gorm.Model{ID: uint(id)}}) + vmResult := dbVM.Get(vm.ID, &core.VM{Model: gorm.Model{ID: uint(id)}}) if vmResult.Err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: vmResult.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: vmResult.Err.Error()}) return } - //nodeResult := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: vmResult.VMs[0].NodeID}}) + //nodeResult := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: vmResult.VMs[0].NodeID}}) //client.Delete( // "http://" + nodeResult.Node[0].IP + ":" + strconv.Itoa(int(nodeResult.Node[0].Port)) + "/api/v1/vm/" + vmResult.VMs[0].ID, // //) - if err := dbVM.Delete(&vm.VM{Model: gorm.Model{ID: uint(id)}}); err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: err.Error()}) + if err = dbVM.Delete(&core.VM{Model: gorm.Model{ID: uint(id)}}); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, vm.Result{Status: true}) + c.JSON(http.StatusOK, vm.Result{}) } func UpdateAdmin(c *gin.Context) { - var input vm.VM + var input core.VM resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } err := c.BindJSON(&input) log.Println(err) - tmp := dbVM.Get(region.ID, &vm.VM{Model: gorm.Model{ID: input.ID}}) + tmp := dbVM.Get(region.ID, &core.VM{Model: gorm.Model{ID: input.ID}}) if tmp.Err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: tmp.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: tmp.Err.Error()}) return } replace, err := updateAdminUser(input, tmp.VMs[0]) if err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: "error: this email is already registered"}) + c.JSON(http.StatusInternalServerError, common.Error{Error: "error: this email is already registered"}) return } - if err := dbVM.Update(region.UpdateAll, replace); err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: err.Error()}) + if err = dbVM.Update(region.UpdateAll, replace); err != nil { + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } - c.JSON(http.StatusOK, vm.Result{Status: true}) + c.JSON(http.StatusOK, vm.Result{}) } func GetAdmin(c *gin.Context) { resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultAdmin.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: resultAdmin.Err.Error()}) return } nodeID, err := strconv.Atoi(c.Param("node_id")) if err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } uuid := c.Param("uuid") - resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(nodeID)}}) + resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(nodeID)}}) if resultNode.Err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: resultNode.Err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultNode.Err.Error()}) return } res, err := Get(resultNode.Node[0].IP, resultNode.Node[0].Port, uuid) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) return } c.JSON(http.StatusOK, vm.ResultOneAdmin{Status: http.StatusOK, VM: vm.Detail{ - VM: res.Data.VM.VM, Stat: res.Data.VM.Stat, Node: uint(nodeID)}}) + VM: res.Data.VM.VM, + Stat: res.Data.VM.Stat, + Node: uint(nodeID), + }}) } func GetAllAdmin(c *gin.Context) { - var allVMs []vm.Detail + var vms []vm.Detail - resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) - if resultAdmin.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: resultAdmin.Err.Error()}) + resultNode := dbNode.GetAll() + if resultNode.Err != nil { + log.Println(resultNode.Err) + c.JSON(http.StatusInternalServerError, common.Error{Error: resultNode.Err.Error()}) return } - result := dbNode.GetAll() - if result.Err != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: result.Err.Error()}) - return - } + for _, tmpNode := range resultNode.Node { + conn, err := libvirt.NewConnect("qemu+ssh://" + config.Conf.Node.User + "@" + tmpNode.IP + "/system") + if err != nil { + log.Println("failed to connect to qemu: " + err.Error()) + return + } + defer conn.Close() - for _, node := range result.Node { - var res nodeAllVMResponse + doms, err := conn.ListAllDomains(libvirt.CONNECT_LIST_DOMAINS_ACTIVE | libvirt.CONNECT_LIST_DOMAINS_INACTIVE) + log.Println(doms) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, common.Error{Error: err.Error()}) + } - response, err := client.Get("http://"+node.IP+":"+strconv.Itoa(int(node.Port))+"/api/v1/vm", "") - if err == nil { - if json.Unmarshal([]byte(response), &res) != nil { - c.JSON(http.StatusInternalServerError, vm.Result{Status: false, Error: err.Error()}) - return - } + for _, dom := range doms { + t := libVirtXml.Domain{} + stat, _, _ := dom.GetState() + xmlString, _ := dom.GetXMLDesc(libvirt.DOMAIN_XML_SECURE) + xml.Unmarshal([]byte(xmlString), &t) - for _, virtualMachine := range res.Data.VM { - allVMs = append(allVMs, vm.Detail{VM: virtualMachine.VM, Stat: virtualMachine.Stat, Node: node.ID}) - } + vms = append(vms, vm.Detail{ + VM: t, + Stat: uint(stat), + }) } } - c.JSON(http.StatusOK, vm.ResultAdmin{Status: 200, VM: allVMs}) + c.JSON(http.StatusOK, vm.ResultAdmin{VM: vms}) +} + +//func GetAllAdmin(c *gin.Context) { +// var allVMs []vm.Detail +// +// resultAdmin := auth.AdminAuthentication(c.Request.Header.Get("ACCESS_TOKEN")) +// if resultAdmin.Err != nil { +// c.JSON(http.StatusUnauthorized, common.Error{ Error: resultAdmin.Err.Error()}) +// return +// } +// +// result := dbNode.GetAll() +// if result.Err != nil { +// c.JSON(http.StatusInternalServerError, common.Error{ Error: result.Err.Error()}) +// return +// } +// +// for _, node := range result.Node { +// var res nodeAllVMResponse +// +// response, err := client.Get("http://"+node.IP+":"+strconv.Itoa(int(node.Port))+"/api/v1/vm", "") +// if err == nil { +// if json.Unmarshal([]byte(response), &res) != nil { +// c.JSON(http.StatusInternalServerError, common.Error{ Error: err.Error()}) +// return +// } +// +// for _, virtualMachine := range res.Data.VM { +// allVMs = append(allVMs, vm.Detail{VM: virtualMachine.VM, Stat: virtualMachine.Stat, Node: node.ID}) +// } +// } +// } +// +// c.JSON(http.StatusOK, vm.ResultAdmin{Status: 200, VM: allVMs}) +//} + +func (h *VMHandler) TestAdminGetAll() ([]vm.Detail, error) { + var vms []vm.Detail + + doms, err := h.Conn.ListAllDomains(libvirt.CONNECT_LIST_DOMAINS_ACTIVE | libvirt.CONNECT_LIST_DOMAINS_INACTIVE) + log.Println(doms) + if err != nil { + log.Println(err) + //json.ResponseError(c, http.StatusInternalServerError, err) + return vms, err + } + + for _, dom := range doms { + t := libVirtXml.Domain{} + stat, _, _ := dom.GetState() + xmlString, _ := dom.GetXMLDesc(libvirt.DOMAIN_XML_SECURE) + xml.Unmarshal([]byte(xmlString), &t) + + //log.Println(len(t.Devices.Graphics)) + //log.Println(t.Devices.Graphics[0].VNC.Port) + //log.Println(t.Devices.Graphics) + vms = append(vms, vm.Detail{ + VM: t, + Stat: uint(stat), + }) + } + + return vms, nil } diff --git a/pkg/api/core/vm/v0/check.go b/pkg/api/core/vm/v0/check.go index a7d119b..8750dda 100644 --- a/pkg/api/core/vm/v0/check.go +++ b/pkg/api/core/vm/v0/check.go @@ -2,10 +2,10 @@ package v0 import ( "fmt" - "github.com/vmmgr/controller/pkg/api/core/vm" + "github.com/vmmgr/controller/pkg/api/core" ) -func check(input vm.VM) error { +func check(input core.VM) error { // check if input.GroupID == 0 { return fmt.Errorf("no data: groupID") diff --git a/pkg/api/core/vm/v0/power_admin.go b/pkg/api/core/vm/v0/power_admin.go index 152d9da..5943505 100644 --- a/pkg/api/core/vm/v0/power_admin.go +++ b/pkg/api/core/vm/v0/power_admin.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/tool/client" "github.com/vmmgr/controller/pkg/api/core/vm" @@ -20,7 +21,7 @@ func StartupAdmin(c *gin.Context) { c.JSON(http.StatusBadRequest, vm.ResultAdmin{Status: http.StatusBadRequest, Error: err.Error()}) return } - nodeResult := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(nodeID)}}) + nodeResult := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(nodeID)}}) if nodeResult.Err != nil { c.JSON(http.StatusBadRequest, vm.ResultAdmin{Status: http.StatusBadRequest, Error: err.Error()}) return @@ -54,7 +55,7 @@ func ShutdownAdmin(c *gin.Context) { return } - nodeResult := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(nodeID)}}) + nodeResult := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(nodeID)}}) if nodeResult.Err != nil { c.JSON(http.StatusBadRequest, vm.ResultAdmin{Status: http.StatusBadRequest, Error: err.Error()}) return @@ -81,7 +82,7 @@ func ResetAdmin(c *gin.Context) { return } - nodeResult := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(nodeID)}}) + nodeResult := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(nodeID)}}) if nodeResult.Err != nil { c.JSON(http.StatusBadRequest, vm.ResultAdmin{Status: http.StatusBadRequest, Error: err.Error()}) return diff --git a/pkg/api/core/vm/v0/template.go b/pkg/api/core/vm/v0/template.go index f0cc5f0..cb4efc0 100644 --- a/pkg/api/core/vm/v0/template.go +++ b/pkg/api/core/vm/v0/template.go @@ -2,8 +2,8 @@ package v0 import ( "encoding/json" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/auth" - "github.com/vmmgr/controller/pkg/api/core/node" requestInt "github.com/vmmgr/controller/pkg/api/core/request" request "github.com/vmmgr/controller/pkg/api/core/request/v0" "github.com/vmmgr/controller/pkg/api/core/tool/client" @@ -22,22 +22,23 @@ import ( ) type VMTemplateHandler struct { - input vm.Template - node node.Node + input nodeVM.VirtualMachine + template vm.Template + node core.Node authUser auth.GroupResult admin bool } func NewVMAdminTemplateHandler(input VMTemplateHandler) *VMTemplateHandler { - return &VMTemplateHandler{input: input.input, node: input.node, admin: true} + return &VMTemplateHandler{template: input.template, node: input.node, admin: true} } func NewVMUserTemplateHandler(input VMTemplateHandler) *VMTemplateHandler { - return &VMTemplateHandler{input: input.input, node: input.node, authUser: input.authUser, admin: false} + return &VMTemplateHandler{template: input.template, node: input.node, authUser: input.authUser, admin: false} } func (t *VMTemplateHandler) templateApply() error { - vmTemplate, vmTemplatePlan, err := template.GetTemplate(t.input.TemplateID, t.input.TemplatePlanID) + vmTemplate, vmTemplatePlan, err := template.GetTemplate(t.template.TemplateID, t.template.TemplatePlanID) if err != nil { return err } @@ -57,9 +58,9 @@ func (t *VMTemplateHandler) templateApply() error { // 管理者側 if t.admin { - name = strconv.Itoa(0) + "-" + t.input.Name - path = name + "-1.img" - nic = t.input.NICType + name = strconv.Itoa(0) + "-" + t.template.Name + path = name + ".img" + nic = t.template.NICType } else { // 管理者以外 name = strconv.Itoa(int(t.authUser.Group.ID)) + "-" + gen.GenerateUUID() @@ -68,8 +69,13 @@ func (t *VMTemplateHandler) templateApply() error { } gid := uint(0) + storageType := 0 + if !imageResult.Data.VirtIO { + storageType = 11 + } + //VM作成用のデータ - body, _ := json.Marshal(nodeVM.VirtualMachine{ + virtualMachineTemplate := nodeVM.VirtualMachine{ Info: gateway.Info{ GroupID: gid, UUID: uuid, @@ -90,17 +96,17 @@ func (t *VMTemplateHandler) templateApply() error { VNCPort: 0, //VNCポートをNode側で自動生成 Storage: []storage.VMStorage{ { - Type: 10, // BootDisk(virtIO) - FileType: 0, //qcow2 + Type: uint(storageType), + FileType: 0, //qcow2 Path: path, ReadOnly: false, Boot: 0, }, }, CloudInit: cloudinit.CloudInit{ - MetaData: cloudinit.MetaData{LocalHostName: t.input.Name}, + MetaData: cloudinit.MetaData{LocalHostName: t.template.Name}, UserData: cloudinit.UserData{ - Password: t.input.Password, + Password: t.template.Password, //ChPasswd: "{ expire: False }", SshPwAuth: false, }, @@ -113,10 +119,10 @@ func (t *VMTemplateHandler) templateApply() error { Subnets: []cloudinit.NetworkConfigSubnet{ { Type: "static", - Address: t.input.IP, - Netmask: t.input.NetMask, - Gateway: t.input.Gateway, - DNS: strings.Split(t.input.DNS, ","), + Address: t.template.IP, + Netmask: t.template.NetMask, + Gateway: t.template.Gateway, + DNS: strings.Split(t.template.DNS, ","), }, }, }, @@ -134,13 +140,28 @@ func (t *VMTemplateHandler) templateApply() error { }, Type: 10, // BootDisk(virtIO) FileType: 0, // qcow2 - PathType: t.input.StoragePathType, - Capacity: t.input.StorageCapacity, + PathType: t.template.StoragePathType, + Capacity: t.template.StorageCapacity, ReadOnly: false, Path: path, }, }, - }) + } + + log.Println(t.template.PCI) + + if t.admin { + if len(t.template.USB) > 0 { + virtualMachineTemplate.USB = t.template.USB + } + if len(t.template.PCI) > 0 { + virtualMachineTemplate.PCI = t.template.PCI + } + } + + body, _ := json.Marshal(virtualMachineTemplate) + + log.Println(string(body)) resultVMCreateProcess, err := client.Post( "http://"+t.node.IP+":"+strconv.Itoa(int(t.node.Port))+"/api/v1/vm", body) @@ -156,9 +177,9 @@ func (t *VMTemplateHandler) templateApply() error { //DB追加 //if t.admin { - // dbVM.Create(&vm.VM{NodeID: t.input.NodeID, GroupID: 0, Name: t.input.Name, UUID: uuid}) + // dbVM.Create(&core.VM{NodeID: t.input.NodeID, GroupID: 0, Name: t.input.Name, UUID: uuid}) //} else { - // dbVM.Create(&vm.VM{NodeID: t.input.NodeID, GroupID: t.authUser.Group.ID, Name: t.input.Name, UUID: uuid}) + // dbVM.Create(&core.VM{NodeID: t.input.NodeID, GroupID: t.authUser.Group.ID, Name: t.input.Name, UUID: uuid}) //} }() return nil diff --git a/pkg/api/core/vm/v0/update.go b/pkg/api/core/vm/v0/update.go index 4522369..0461be2 100644 --- a/pkg/api/core/vm/v0/update.go +++ b/pkg/api/core/vm/v0/update.go @@ -1,8 +1,10 @@ package v0 -import "github.com/vmmgr/controller/pkg/api/core/vm" +import ( + "github.com/vmmgr/controller/pkg/api/core" +) -func updateAdminUser(input, replace vm.VM) (vm.VM, error) { +func updateAdminUser(input, replace core.VM) (core.VM, error) { //Name if input.Name != "" { diff --git a/pkg/api/core/vm/v0/vm.go b/pkg/api/core/vm/v0/vm.go index 91dfb2f..902fff6 100644 --- a/pkg/api/core/vm/v0/vm.go +++ b/pkg/api/core/vm/v0/vm.go @@ -3,9 +3,10 @@ package v0 import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" + "github.com/vmmgr/controller/pkg/api/core/common" "github.com/vmmgr/controller/pkg/api/core/node" - "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/core/vm" dbNode "github.com/vmmgr/controller/pkg/api/store/node/v0" "net/http" @@ -18,32 +19,32 @@ func UserCreate(c *gin.Context) { accessToken := c.Request.Header.Get("ACCESS_TOKEN") if err := c.BindJSON(&input); err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: err.Error()}) return } - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { - c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: result.Err.Error()}) + c.JSON(http.StatusUnauthorized, common.Error{Error: result.Err.Error()}) return } // nodeIDが存在するか確認 - resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: input.NodeID}}) + resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: input.NodeID}}) if resultNode.Err != nil { - c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: resultNode.Err.Error()}) + c.JSON(http.StatusBadRequest, common.Error{Error: resultNode.Err.Error()}) return } //nodeIDの数が0である場合は if len(resultNode.Node) == 0 { - c.JSON(http.StatusNotFound, vm.Result{Status: false, Error: "node id is not found..."}) + c.JSON(http.StatusNotFound, common.Error{Error: "node id is not found..."}) return } // NodeのGroupIDが0かつAdminOnlyがfalseの時の以外である場合、 if !(resultNode.Node[0].GroupID == 0 && resultNode.Node[0].AdminOnly == &[]bool{false}[0]) { - c.JSON(http.StatusForbidden, vm.Result{Status: false, Error: "You can't use this node..."}) + c.JSON(http.StatusForbidden, common.Error{Error: "You can't use this node..."}) return } @@ -51,15 +52,15 @@ func UserCreate(c *gin.Context) { //----ベースイメージコピー処理---- h := NewVMUserTemplateHandler(VMTemplateHandler{ - input: input, node: resultNode.Node[0], authUser: result, admin: false}) + template: input, node: resultNode.Node[0], authUser: result, admin: false}) err := h.templateApply() if err != nil { - c.JSON(http.StatusNotFound, vm.Result{Status: false, Error: "template is not found..."}) + c.JSON(http.StatusNotFound, common.Error{Error: "template is not found..."}) return } - c.JSON(http.StatusOK, vm.Result{Status: true}) + c.JSON(http.StatusOK, vm.Result{}) } func UserDelete(c *gin.Context) { @@ -68,33 +69,33 @@ func UserDelete(c *gin.Context) { //accessToken := c.Request.Header.Get("ACCESS_TOKEN") // //if err := c.BindJSON(&input); err != nil { - // c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: err.Error()}) + // c.JSON(http.StatusBadRequest, common.Error{ Error: err.Error()}) // return //} // - //result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + //result := auth.GroupAuthentication(core.Token{UserToken: userToken, AccessToken: accessToken}) //if result.Err != nil { - // c.JSON(http.StatusUnauthorized, vm.Result{Status: false, Error: result.Err.Error()}) + // c.JSON(http.StatusUnauthorized, common.Error{ Error: result.Err.Error()}) // return //} // //// nodeIDが存在するか確認 - //resultNode := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: input.NodeID}}) + //resultNode := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: input.NodeID}}) //if resultNode.Err != nil { - // c.JSON(http.StatusBadRequest, vm.Result{Status: false, Error: resultNode.Err.Error()}) + // c.JSON(http.StatusBadRequest, common.Error{ Error: resultNode.Err.Error()}) // return //} // ////nodeIDの数が0である場合は //if len(resultNode.Node) == 0 { - // c.JSON(http.StatusNotFound, vm.Result{Status: false, Error: "node id is not found..."}) + // c.JSON(http.StatusNotFound, common.Error{ Error: "node id is not found..."}) // return //} // //////NodeのGroupIDが0かつAdminOnlyがfalseの時の以外である場合、 //if !(resultNode.Node[0].GroupID == 0 && resultNode.Node[0].AdminOnly == &[]bool{false}[0]) { - // c.JSON(http.StatusForbidden, vm.Result{Status: false, Error: "You can't use this node..."}) + // c.JSON(http.StatusForbidden, common.Error{ Error: "You can't use this node..."}) // return //} - //c.JSON(http.StatusOK, vm.Result{Status: true}) + //c.JSON(http.StatusOK, vm.Result{}) } diff --git a/pkg/api/core/vm/v0/vm_test.go b/pkg/api/core/vm/v0/vm_test.go index abd2232..435044c 100644 --- a/pkg/api/core/vm/v0/vm_test.go +++ b/pkg/api/core/vm/v0/vm_test.go @@ -1,75 +1,95 @@ package v0 import ( - "encoding/json" - "github.com/vmmgr/controller/pkg/api/core/tool/client" - nodeNIC "github.com/vmmgr/node/pkg/api/core/nic" - "github.com/vmmgr/node/pkg/api/core/storage" - "github.com/vmmgr/node/pkg/api/core/tool/cloudinit" - nodeVM "github.com/vmmgr/node/pkg/api/core/vm" + "github.com/libvirt/libvirt-go" "testing" ) -func Test(t *testing.T) { - body, _ := json.Marshal(nodeVM.VirtualMachine{ - Name: "test101", - Memory: 512, - CPUMode: 0, - VCPU: 1, - NIC: []nodeNIC.NIC{ - { - Type: 0, - Driver: 0, - Mode: 0, - MAC: "", - Device: "br100", - }, - }, - VNCPort: 0, //VNCポートをNode側で自動生成 - Storage: []storage.VMStorage{ - { - Type: 10, // BootDisk(virtIO) - FileType: 0, //qcow2 - Path: "/home/yonedayuto/vm/1/10fef5d71-bd37-4a31-95c5-2ac7734a0b23-1", - ReadOnly: false, - Boot: 0, - }, - }, - CloudInit: cloudinit.CloudInit{ - MetaData: cloudinit.MetaData{LocalHostName: "test"}, - UserData: cloudinit.UserData{ - Password: "test123", - ChPasswd: "{ expire: False }", - SshPwAuth: true, - }, - NetworkConfig: cloudinit.NetworkCon{ - Config: []cloudinit.NetworkConfig{ - { - Type: "physical", - Name: "", - MacAddress: "", - Subnets: []cloudinit.NetworkConfigSubnet{ - { - Type: "static", - Address: "172.40.0.124", - Netmask: "255.255.252.0", - Gateway: "172.40.0.1", - DNS: []string{"1.1.1.1"}, - }, - }, - }, - }, - }, - }, - CloudInitApply: true, - }) +func TestGetAll(t *testing.T) { + //conn, err := libvirt.NewConnect("qemu:///system") + conn, err := libvirt.NewConnect("qemu+ssh://yonedayuto@127.0.0.1/system") + if err != nil { + t.Fatalf("failed to connect to qemu: " + err.Error()) + return + } + defer conn.Close() - resultVMCreateProcess, err := client.Post( - "http://127.0.0.1:8080/api/v1/vm", - body) + vmh := NewVMHandler(VMHandler{Conn: conn}) + result, err := vmh.TestAdminGetAll() if err != nil { - t.Fatal(err) + t.Fatalf(err.Error()) return } - t.Log(resultVMCreateProcess) + for _, tmp := range result { + t.Log(tmp.VM) + t.Log(tmp.VM.Title) + t.Log(tmp.VM.Name) + t.Log(tmp.Node) + t.Log(tmp.Stat) + } + } + +//func Test(t *testing.T) { +// body, _ := json.Marshal(nodeVM.VirtualMachine{ +// Name: "test101", +// Memory: 512, +// CPUMode: 0, +// VCPU: 1, +// NIC: []nodeNIC.NIC{ +// { +// Type: 0, +// Driver: 0, +// Mode: 0, +// MAC: "", +// Device: "br100", +// }, +// }, +// VNCPort: 0, //VNCポートをNode側で自動生成 +// Storage: []storage.VMStorage{ +// { +// Type: 10, // BootDisk(virtIO) +// FileType: 0, //qcow2 +// Path: "/home/yonedayuto/vm/1/10fef5d71-bd37-4a31-95c5-2ac7734a0b23-1", +// ReadOnly: false, +// Boot: 0, +// }, +// }, +// CloudInit: cloudinit.CloudInit{ +// MetaData: cloudinit.MetaData{LocalHostName: "test"}, +// UserData: cloudinit.UserData{ +// Password: "test123", +// ChPasswd: "{ expire: False }", +// SshPwAuth: true, +// }, +// NetworkConfig: cloudinit.NetworkCon{ +// Config: []cloudinit.NetworkConfig{ +// { +// Type: "physical", +// Name: "", +// MacAddress: "", +// Subnets: []cloudinit.NetworkConfigSubnet{ +// { +// Type: "static", +// Address: "172.40.0.124", +// Netmask: "255.255.252.0", +// Gateway: "172.40.0.1", +// DNS: []string{"1.1.1.1"}, +// }, +// }, +// }, +// }, +// }, +// }, +// CloudInitApply: true, +// }) +// +// resultVMCreateProcess, err := client.Post( +// "http://127.0.0.1:8080/api/v1/vm", +// body) +// if err != nil { +// t.Fatal(err) +// return +// } +// t.Log(resultVMCreateProcess) +//} diff --git a/pkg/api/core/vm/v0/websocket.go b/pkg/api/core/vm/v0/websocket.go index 85cb631..0cee900 100644 --- a/pkg/api/core/vm/v0/websocket.go +++ b/pkg/api/core/vm/v0/websocket.go @@ -3,8 +3,8 @@ package v0 import ( "github.com/gin-gonic/gin" websocket "github.com/gorilla/websocket" + "github.com/vmmgr/controller/pkg/api/core" auth "github.com/vmmgr/controller/pkg/api/core/auth/v0" - "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/core/vm" "log" ) @@ -24,7 +24,7 @@ func GetWebSocketAdmin(c *gin.Context) { //WebSocket受信 for { var msg vm.WebSocketResult - err := conn.ReadJSON(&msg) + err = conn.ReadJSON(&msg) if err != nil { log.Printf("error: %v", err) delete(vm.Clients, &vm.WebSocket{Admin: true, GroupID: 0, Socket: conn}) @@ -49,7 +49,7 @@ func GetWebSocket(c *gin.Context) { defer conn.Close() - result := auth.GroupAuthentication(token.Token{UserToken: userToken, AccessToken: accessToken}) + result := auth.GroupAuthentication(0, core.Token{UserToken: userToken, AccessToken: accessToken}) if result.Err != nil { log.Println("ws:// support error:Auth error") conn.WriteMessage(websocket.TextMessage, []byte("error: auth error")) diff --git a/pkg/api/core/wsvnc/v0/wsvnc.go b/pkg/api/core/wsvnc/v0/wsvnc.go index 08e83ba..247544d 100644 --- a/pkg/api/core/wsvnc/v0/wsvnc.go +++ b/pkg/api/core/wsvnc/v0/wsvnc.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" "github.com/koding/websocketproxy" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/core/token" vm "github.com/vmmgr/controller/pkg/api/core/vm/v0" @@ -32,13 +33,13 @@ func Get(c *gin.Context) { var tokenResult token.ResultDatabase if userToken == "0" { - tokenResult = dbToken.Get(token.AccessToken, &token.Token{AccessToken: accessToken}) + tokenResult = dbToken.Get(token.AccessToken, &core.Token{AccessToken: accessToken}) if tokenResult.Err != nil { log.Println(tokenResult.Err) return } } else { - tokenResult = dbToken.Get(token.UserTokenAndAccessToken, &token.Token{UserToken: userToken, AccessToken: accessToken}) + tokenResult = dbToken.Get(token.UserTokenAndAccessToken, &core.Token{UserToken: userToken, AccessToken: accessToken}) if tokenResult.Err != nil { log.Println(tokenResult.Err) return @@ -48,11 +49,11 @@ func Get(c *gin.Context) { log.Println(tokenResult) //管理者ではない場合 - if !tokenResult.Token[0].Admin { + if !*tokenResult.Token[0].Admin { //管理者ではない場合はVM Tableより検証を行う必要あり } - nodeResult := dbNode.Get(node.ID, &node.Node{Model: gorm.Model{ID: uint(nodeID)}}) + nodeResult := dbNode.Get(node.ID, &core.Node{Model: gorm.Model{ID: uint(nodeID)}}) if nodeResult.Err != nil { log.Println(nodeResult.Err) return diff --git a/pkg/api/store/group/v0/group.go b/pkg/api/store/group/v0/group.go index 7c984f8..adbd2b2 100644 --- a/pkg/api/store/group/v0/group.go +++ b/pkg/api/store/group/v0/group.go @@ -3,20 +3,21 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/group" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(g *group.Group) (*group.Group, error) { - result := Get(group.Org, &group.Group{Org: g.Org}) +func Create(g *core.Group) (*core.Group, error) { + result := Get(group.Org, &core.Group{Org: g.Org}) if result.Err != nil { - return &group.Group{}, result.Err + return &core.Group{}, result.Err } if len(result.Group) != 0 { log.Println("error: this Org Name is already registered: " + g.Org) - return &group.Group{}, fmt.Errorf("error: this org name is already registered") + return &core.Group{}, fmt.Errorf("error: this org name is already registered") } db, err := store.ConnectDB() @@ -30,7 +31,7 @@ func Create(g *group.Group) (*group.Group, error) { return g, err } -func Delete(group *group.Group) error { +func Delete(group *core.Group) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -41,7 +42,7 @@ func Delete(group *group.Group) error { return db.Delete(group).Error } -func Update(base int, g group.Group) error { +func Update(base int, g core.Group) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -52,13 +53,13 @@ func Update(base int, g group.Group) error { var result *gorm.DB if group.UpdateOrg == base { - result = db.Model(&group.Group{Model: gorm.Model{ID: g.ID}}).Update("org", g.Org) + result = db.Model(&core.Group{Model: gorm.Model{ID: g.ID}}).Update("org", g.Org) } else if group.UpdateStatus == base { - result = db.Model(&group.Group{Model: gorm.Model{ID: g.ID}}).Update("status", g.Status) + result = db.Model(&core.Group{Model: gorm.Model{ID: g.ID}}).Update("status", g.Status) } else if group.UpdateInfo == base { - result = db.Model(&group.Group{Model: gorm.Model{ID: g.ID}}).Update(group.Group{Org: g.Org}) + result = db.Model(&core.Group{Model: gorm.Model{ID: g.ID}}).Update(core.Group{Org: g.Org}) } else if group.UpdateAll == base { - result = db.Model(&group.Group{Model: gorm.Model{ID: g.ID}}).Update(group.Group{ + result = db.Model(&core.Group{Model: gorm.Model{ID: g.ID}}).Update(core.Group{ Org: g.Org, Status: g.Status, Comment: g.Comment, Lock: g.Lock}) } else { log.Println("base select error") @@ -67,7 +68,7 @@ func Update(base int, g group.Group) error { return result.Error } -func Get(base int, data *group.Group) group.ResultDatabase { +func Get(base int, data *core.Group) group.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -75,7 +76,7 @@ func Get(base int, data *group.Group) group.ResultDatabase { } defer db.Close() - var groupStruct []group.Group + var groupStruct []core.Group if base == group.ID { //ID err = db.First(&groupStruct, data.ID).Error @@ -96,7 +97,7 @@ func GetAll() group.ResultDatabase { } defer db.Close() - var groups []group.Group + var groups []core.Group err = db.Find(&groups).Error return group.ResultDatabase{Group: groups, Err: err} } diff --git a/pkg/api/store/node/nic/v0/nic.go b/pkg/api/store/node/nic/v0/nic.go index 201af62..a4a45ee 100644 --- a/pkg/api/store/node/nic/v0/nic.go +++ b/pkg/api/store/node/nic/v0/nic.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/node/nic" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(nic *nic.NIC) (*nic.NIC, error) { +func Create(nic *core.NIC) (*core.NIC, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(nic *nic.NIC) (*nic.NIC, error) { return nic, err } -func Delete(nic *nic.NIC) error { +func Delete(nic *core.NIC) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(nic *nic.NIC) error { return db.Delete(nic).Error } -func Update(base int, data nic.NIC) error { +func Update(base int, data core.NIC) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func Update(base int, data nic.NIC) error { var result *gorm.DB if nic.UpdateAll == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{ + result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{ NodeID: data.NodeID, GroupID: data.GroupID, AdminOnly: data.AdminOnly, Name: data.Name, Enable: data.Enable, Virtual: data.Virtual, Type: data.Type, Vlan: data.Vlan, Speed: data.Speed, MAC: data.MAC, Comment: data.Comment}) @@ -53,7 +54,7 @@ func Update(base int, data nic.NIC) error { return result.Error } -func Get(base int, data *nic.NIC) nic.ResultDatabase { +func Get(base int, data *core.NIC) nic.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -61,7 +62,7 @@ func Get(base int, data *nic.NIC) nic.ResultDatabase { } defer db.Close() - var nicStruct []nic.NIC + var nicStruct []core.NIC if base == nic.ID { //ID err = db.First(&nicStruct, data.ID).Error @@ -92,7 +93,7 @@ func GetAll() nic.ResultDatabase { } defer db.Close() - var nics []nic.NIC + var nics []core.NIC err = db.Find(&nics).Error return nic.ResultDatabase{NIC: nics, Err: err} } diff --git a/pkg/api/store/node/storage/v0/storage.go b/pkg/api/store/node/storage/v0/storage.go index 2703078..0540da4 100644 --- a/pkg/api/store/node/storage/v0/storage.go +++ b/pkg/api/store/node/storage/v0/storage.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/node/storage" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(storage *storage.Storage) (*storage.Storage, error) { +func Create(storage *core.Storage) (*core.Storage, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(storage *storage.Storage) (*storage.Storage, error) { return storage, err } -func Delete(storage *storage.Storage) error { +func Delete(storage *core.Storage) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(storage *storage.Storage) error { return db.Delete(storage).Error } -func Update(base int, data storage.Storage) error { +func Update(base int, data core.Storage) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func Update(base int, data storage.Storage) error { var result *gorm.DB if storage.UpdateAll == base { - result = db.Model(&storage.Storage{Model: gorm.Model{ID: data.ID}}).Update(storage.Storage{ + result = db.Model(&core.Storage{Model: gorm.Model{ID: data.ID}}).Update(core.Storage{ NodeID: data.NodeID, AdminOnly: data.AdminOnly, Type: data.Type, Path: data.Path, MaxCapacity: data.MaxCapacity, Comment: data.Comment}) } else { @@ -52,7 +53,7 @@ func Update(base int, data storage.Storage) error { return result.Error } -func Get(base int, data *storage.Storage) storage.ResultDatabase { +func Get(base int, data *core.Storage) storage.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -60,7 +61,7 @@ func Get(base int, data *storage.Storage) storage.ResultDatabase { } defer db.Close() - var storageStruct []storage.Storage + var storageStruct []core.Storage if base == storage.ID { //ID err = db.First(&storageStruct, data.ID).Error @@ -85,7 +86,7 @@ func GetAll() storage.ResultDatabase { } defer db.Close() - var storages []storage.Storage + var storages []core.Storage err = db.Find(&storages).Error return storage.ResultDatabase{Storage: storages, Err: err} } diff --git a/pkg/api/store/node/v0/node.go b/pkg/api/store/node/v0/node.go index a092333..dbd0bde 100644 --- a/pkg/api/store/node/v0/node.go +++ b/pkg/api/store/node/v0/node.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" node "github.com/vmmgr/controller/pkg/api/core/node" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(node *node.Node) (*node.Node, error) { +func Create(node *core.Node) (*core.Node, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(node *node.Node) (*node.Node, error) { return node, err } -func Delete(node *node.Node) error { +func Delete(node *core.Node) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(node *node.Node) error { return db.Delete(node).Error } -func Update(base int, data node.Node) error { +func Update(base int, data core.Node) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func Update(base int, data node.Node) error { var result *gorm.DB if node.UpdateAll == base { - result = db.Model(&node.Node{Model: gorm.Model{ID: data.ID}}).Update(node.Node{ + result = db.Model(&core.Node{Model: gorm.Model{ID: data.ID}}).Update(core.Node{ ZoneID: data.ZoneID, GroupID: data.GroupID, AdminOnly: data.AdminOnly, Name: data.Name, IP: data.IP, Port: data.Port, WsPort: data.WsPort, ManageNet: data.ManageNet, Comment: data.Comment}) } else { @@ -52,7 +53,7 @@ func Update(base int, data node.Node) error { return result.Error } -func Get(base int, data *node.Node) node.ResultDatabase { +func Get(base int, data *core.Node) node.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -60,7 +61,7 @@ func Get(base int, data *node.Node) node.ResultDatabase { } defer db.Close() - var nodeStruct []node.Node + var nodeStruct []core.Node if base == node.ID { //ID err = db.First(&nodeStruct, data.ID).Error @@ -87,7 +88,7 @@ func GetAll() node.ResultDatabase { } defer db.Close() - var nodes []node.Node + var nodes []core.Node err = db.Find(&nodes).Error return node.ResultDatabase{Node: nodes, Err: err} } diff --git a/pkg/api/store/notice/v0/notice.go b/pkg/api/store/notice/v0/notice.go index 2dcbe2b..324fa76 100644 --- a/pkg/api/store/notice/v0/notice.go +++ b/pkg/api/store/notice/v0/notice.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/notice" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(notice *notice.Notice) (*notice.Notice, error) { +func Create(notice *core.Notice) (*core.Notice, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(notice *notice.Notice) (*notice.Notice, error) { return notice, err } -func Delete(notice *notice.Notice) error { +func Delete(notice *core.Notice) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(notice *notice.Notice) error { return db.Delete(notice).Error } -func Update(base int, data notice.Notice) error { +func Update(base int, data core.Notice) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -43,7 +44,7 @@ func Update(base int, data notice.Notice) error { var result *gorm.DB if notice.UpdateAll == base { - result = db.Model(¬ice.Notice{Model: gorm.Model{ID: data.ID}}).Update(notice.Notice{ + result = db.Model(&core.Notice{Model: gorm.Model{ID: data.ID}}).Update(core.Notice{ UserID: data.UserID, GroupID: data.GroupID, StartTime: data.StartTime, EndingTime: data.EndingTime, Important: data.Important, Fault: data.Fault, Info: data.Info, Title: data.Title, Data: data.Data}) } else { @@ -53,7 +54,7 @@ func Update(base int, data notice.Notice) error { return result.Error } -func Get(base int, data *notice.Notice) notice.ResultDatabase { +func Get(base int, data *core.Notice) notice.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -61,7 +62,7 @@ func Get(base int, data *notice.Notice) notice.ResultDatabase { } defer db.Close() - var noticeStruct []notice.Notice + var noticeStruct []core.Notice dateTime := time.Now().Unix() @@ -101,7 +102,7 @@ func GetAll() notice.ResultDatabase { } defer db.Close() - var notices []notice.Notice + var notices []core.Notice err = db.Find(¬ices).Error return notice.ResultDatabase{Notice: notices, Err: err} } diff --git a/pkg/api/store/region/v0/region.go b/pkg/api/store/region/v0/region.go index 2294f19..8a83c9b 100644 --- a/pkg/api/store/region/v0/region.go +++ b/pkg/api/store/region/v0/region.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" region "github.com/vmmgr/controller/pkg/api/core/region" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(region *region.Region) (*region.Region, error) { +func Create(region *core.Region) (*core.Region, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(region *region.Region) (*region.Region, error) { return region, err } -func Delete(region *region.Region) error { +func Delete(region *core.Region) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(region *region.Region) error { return db.Delete(region).Error } -func Update(base int, data region.Region) error { +func Update(base int, data core.Region) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func Update(base int, data region.Region) error { var result *gorm.DB if region.UpdateAll == base { - result = db.Model(®ion.Region{Model: gorm.Model{ID: data.ID}}).Update(region.Region{ + result = db.Model(&core.Region{Model: gorm.Model{ID: data.ID}}).Update(core.Region{ Name: data.Name, Comment: data.Comment, Lock: data.Lock}) } else { log.Println("base select error") @@ -51,7 +52,7 @@ func Update(base int, data region.Region) error { return result.Error } -func Get(base int, data *region.Region) region.ResultDatabase { +func Get(base int, data *core.Region) region.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -59,7 +60,7 @@ func Get(base int, data *region.Region) region.ResultDatabase { } defer db.Close() - var regionStruct []region.Region + var regionStruct []core.Region if base == region.ID { //ID err = db.First(®ionStruct, data.ID).Error @@ -80,7 +81,7 @@ func GetAll() region.ResultDatabase { } defer db.Close() - var regions []region.Region + var regions []core.Region err = db.Find(®ions).Error return region.ResultDatabase{Region: regions, Err: err} } diff --git a/pkg/api/store/region/zone/v0/zone.go b/pkg/api/store/region/zone/v0/zone.go index 2e6d442..17a6614 100644 --- a/pkg/api/store/region/zone/v0/zone.go +++ b/pkg/api/store/region/zone/v0/zone.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" zone "github.com/vmmgr/controller/pkg/api/core/region/zone" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(zone *zone.Zone) (*zone.Zone, error) { +func Create(zone *core.Zone) (*core.Zone, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(zone *zone.Zone) (*zone.Zone, error) { return zone, err } -func Delete(zone *zone.Zone) error { +func Delete(zone *core.Zone) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(zone *zone.Zone) error { return db.Delete(zone).Error } -func Update(base int, data zone.Zone) error { +func Update(base int, data core.Zone) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func Update(base int, data zone.Zone) error { var result *gorm.DB if zone.UpdateAll == base { - result = db.Model(&zone.Zone{Model: gorm.Model{ID: data.ID}}).Update(zone.Zone{ + result = db.Model(&core.Zone{Model: gorm.Model{ID: data.ID}}).Update(core.Zone{ Name: data.Name, Comment: data.Comment, Lock: data.Lock}) } else { log.Println("base select error") @@ -51,7 +52,7 @@ func Update(base int, data zone.Zone) error { return result.Error } -func Get(base int, data *zone.Zone) zone.ResultDatabase { +func Get(base int, data *core.Zone) zone.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -59,7 +60,7 @@ func Get(base int, data *zone.Zone) zone.ResultDatabase { } defer db.Close() - var zoneStruct []zone.Zone + var zoneStruct []core.Zone if base == zone.ID { //ID err = db.First(&zoneStruct, data.ID).Error @@ -82,7 +83,7 @@ func GetAll() zone.ResultDatabase { } defer db.Close() - var zones []zone.Zone + var zones []core.Zone err = db.Find(&zones).Error return zone.ResultDatabase{Zone: zones, Err: err} } diff --git a/pkg/api/store/support/chat/v0/chat.go b/pkg/api/store/support/chat/v0/chat.go index fed324f..4145d3f 100644 --- a/pkg/api/store/support/chat/v0/chat.go +++ b/pkg/api/store/support/chat/v0/chat.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/support/chat" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(support *chat.Chat) (*chat.Chat, error) { +func Create(support *core.Chat) (*core.Chat, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(support *chat.Chat) (*chat.Chat, error) { return support, err } -func Delete(support *chat.Chat) error { +func Delete(support *core.Chat) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(support *chat.Chat) error { return db.Delete(support).Error } -func Update(base int, s chat.Chat) error { +func Update(base int, s core.Chat) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -43,9 +44,9 @@ func Update(base int, s chat.Chat) error { var result *gorm.DB if chat.UpdateUserID == base { - result = db.Model(&chat.Chat{Model: gorm.Model{ID: s.ID}}).Update(chat.Chat{UserID: s.UserID}) + result = db.Model(&core.Chat{Model: gorm.Model{ID: s.ID}}).Update(core.Chat{UserID: s.UserID}) } else if chat.UpdateAll == base { - result = db.Model(&chat.Chat{Model: gorm.Model{ID: s.ID}}).Update(chat.Chat{ + result = db.Model(&core.Chat{Model: gorm.Model{ID: s.ID}}).Update(core.Chat{ TicketID: s.TicketID, UserID: s.UserID, Admin: s.Admin, Data: s.Data}) } else { log.Println("base select error") @@ -54,7 +55,7 @@ func Update(base int, s chat.Chat) error { return result.Error } -func Get(base int, data *chat.Chat) chat.ResultDatabase { +func Get(base int, data *core.Chat) chat.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -62,7 +63,7 @@ func Get(base int, data *chat.Chat) chat.ResultDatabase { } defer db.Close() - var chatStruct []chat.Chat + var chatStruct []core.Chat if base == chat.ID { //ID err = db.First(&chatStruct, data.ID).Error @@ -83,7 +84,7 @@ func GetAll() chat.ResultDatabase { } defer db.Close() - var chats []chat.Chat + var chats []core.Chat err = db.Find(&chats).Error return chat.ResultDatabase{Chat: chats, Err: err} } diff --git a/pkg/api/store/support/ticket/v0/ticket.go b/pkg/api/store/support/ticket/v0/ticket.go index 7ba3ad1..c5afad6 100644 --- a/pkg/api/store/support/ticket/v0/ticket.go +++ b/pkg/api/store/support/ticket/v0/ticket.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/support/ticket" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(support *ticket.Ticket) (*ticket.Ticket, error) { +func Create(support *core.Ticket) (*core.Ticket, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(support *ticket.Ticket) (*ticket.Ticket, error) { return support, err } -func Delete(support *ticket.Ticket) error { +func Delete(support *core.Ticket) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(support *ticket.Ticket) error { return db.Delete(support).Error } -func Update(base int, t ticket.Ticket) error { +func Update(base int, t core.Ticket) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -44,8 +45,11 @@ func Update(base int, t ticket.Ticket) error { //#4 Issue(解決済み) if ticket.UpdateAll == base { - result = db.Model(&ticket.Ticket{Model: gorm.Model{ID: t.ID}}).Update(&ticket.Ticket{Title: t.Title, - GroupID: t.GroupID, UserID: t.UserID, ChatIDStart: t.ChatIDStart, ChatIDEnd: t.ChatIDEnd, Solved: t.Solved}) + result = db.Model(&core.Ticket{Model: gorm.Model{ID: t.ID}}).Update(&core.Ticket{Title: t.Title, + GroupID: t.GroupID, + UserID: t.UserID, + Solved: t.Solved, + }) } else { log.Println("base select error") return fmt.Errorf("(%s)error: base select\n", time.Now()) @@ -53,7 +57,7 @@ func Update(base int, t ticket.Ticket) error { return result.Error } -func Get(base int, data *ticket.Ticket) ticket.ResultDatabase { +func Get(base int, data *core.Ticket) ticket.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -61,23 +65,28 @@ func Get(base int, data *ticket.Ticket) ticket.ResultDatabase { } defer db.Close() - var ticketStruct []ticket.Ticket + var ticketStruct []core.Ticket if base == ticket.ID { //ID - err = db.First(&ticketStruct, data.ID).Error - } else if base == ticket.GroupID { //GroupID - err = db.Where("group_id = ?", data.GroupID).Find(&ticketStruct).Error - } else if base == ticket.UserID { //UserID + err = db.Preload("User"). + Preload("Group"). + Preload("Chat"). + Preload("Chat.User"). + First(&ticketStruct, data.ID).Error + } else if base == ticket.GID { //GroupID + err = db.Where("group_id = ?", data.GroupID). + Preload("User"). + Preload("Group"). + Preload("Chat"). + Preload("Chat.User"). + Find(&ticketStruct).Error + } else if base == ticket.UID { //UserID err = db.Where("user_id = ?", data.UserID).Find(&ticketStruct).Error - } else if base == ticket.ChatIDStart { //ChatID Start - err = db.Where("ticket_id = ?", data.ChatIDStart).Find(&ticketStruct).Error - } else if base == ticket.ChatIDEnd { //ChatID End - err = db.Where("ticket_id = ?", data.ChatIDEnd).Find(&ticketStruct).Error } else { log.Println("base select error") return ticket.ResultDatabase{Err: fmt.Errorf("(%s)error: base select\n", time.Now())} } - return ticket.ResultDatabase{Ticket: ticketStruct, Err: err} + return ticket.ResultDatabase{Tickets: ticketStruct, Err: err} } func GetAll() ticket.ResultDatabase { @@ -88,7 +97,11 @@ func GetAll() ticket.ResultDatabase { } defer db.Close() - var tickets []ticket.Ticket - err = db.Find(&tickets).Error - return ticket.ResultDatabase{Ticket: tickets, Err: err} + var tickets []core.Ticket + err = db.Preload("User"). + Preload("Group"). + Preload("Chat"). + Preload("Chat.User"). + Find(&tickets).Error + return ticket.ResultDatabase{Tickets: tickets, Err: err} } diff --git a/pkg/api/store/token/v0/token.go b/pkg/api/store/token/v0/token.go index 9208ac8..6fcef62 100644 --- a/pkg/api/store/token/v0/token.go +++ b/pkg/api/store/token/v0/token.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/token" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(t *token.Token) error { +func Create(t *core.Token) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -20,7 +21,7 @@ func Create(t *token.Token) error { return db.Create(t).Error } -func Delete(t *token.Token) error { +func Delete(t *core.Token) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,7 +43,7 @@ func DeleteAll() error { return db.Exec("DELETE FROM tokens").Error } -func Update(base int, t *token.Token) error { +func Update(base int, t *core.Token) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -51,14 +52,20 @@ func Update(base int, t *token.Token) error { defer db.Close() if token.AddToken == base { - err = db.Model(&token.Token{Model: gorm.Model{ID: t.ID}}).Update(token.Token{Model: gorm.Model{}, + err = db.Model(&core.Token{Model: gorm.Model{ID: t.ID}}).Update(core.Token{Model: gorm.Model{}, ExpiredAt: t.ExpiredAt, UserID: t.UserID, Status: t.Status, AccessToken: t.AccessToken}).Error } else if token.UpdateToken == base { - err = db.Model(&token.Token{Model: gorm.Model{ID: t.ID}}).Update("expired_at", t.ExpiredAt).Error + err = db.Model(&core.Token{Model: gorm.Model{ID: t.ID}}).Update("expired_at", t.ExpiredAt).Error } else if token.UpdateAll == base { - err = db.Model(&token.Token{Model: gorm.Model{ID: t.ID}}).Update(token.Token{ - ExpiredAt: t.ExpiredAt, UserID: t.UserID, Status: t.Status, UserToken: t.UserToken, TmpToken: t.TmpToken, - AccessToken: t.AccessToken, Debug: t.Debug}).Error + err = db.Model(&core.Token{Model: gorm.Model{ID: t.ID}}).Update(core.Token{ + ExpiredAt: t.ExpiredAt, + UserID: t.UserID, + Status: t.Status, + UserToken: t.UserToken, + TmpToken: t.TmpToken, + AccessToken: t.AccessToken, + Debug: t.Debug, + }).Error } else { log.Println("base select error") return fmt.Errorf("(%s)error: base select\n %s", time.Now(), err) @@ -67,7 +74,7 @@ func Update(base int, t *token.Token) error { } // value of base can reference from api/core/user/interface.go -func Get(base int, input *token.Token) token.ResultDatabase { +func Get(base int, input *core.Token) token.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -75,7 +82,7 @@ func Get(base int, input *token.Token) token.ResultDatabase { } defer db.Close() - var tokenStruct []token.Token + var tokenStruct []core.Token if base == token.UserToken { err = db.Where("user_token = ? AND admin = ? AND expired_at > ?", @@ -105,7 +112,7 @@ func GetAll() token.ResultDatabase { } defer db.Close() - var tokens []token.Token + var tokens []core.Token err = db.Find(&tokens).Error return token.ResultDatabase{Token: tokens, Err: err} } diff --git a/pkg/api/store/user/v0/user.go b/pkg/api/store/user/v0/user.go index 7a95fce..c88cf03 100644 --- a/pkg/api/store/user/v0/user.go +++ b/pkg/api/store/user/v0/user.go @@ -3,14 +3,15 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/user" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(u *user.User) error { - result := Get(user.Email, &user.User{Email: u.Email}) +func Create(u *core.User) error { + result := Get(user.Email, &core.User{Email: u.Email}) if result.Err != nil { return result.Err } @@ -30,7 +31,7 @@ func Create(u *user.User) error { return db.Create(&u).Error } -func Delete(u *user.User) error { +func Delete(u *core.User) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -41,7 +42,7 @@ func Delete(u *user.User) error { return db.Delete(u).Error } -func Update(base int, u *user.User) error { +func Update(base int, u *core.User) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -52,20 +53,23 @@ func Update(base int, u *user.User) error { var result *gorm.DB if user.UpdateVerifyMail == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update(user.User{MailVerify: u.MailVerify}) + result = db.Model(&core.User{Model: gorm.Model{ID: u.ID}}).Update(core.User{MailVerify: u.MailVerify}) } else if user.UpdateInfo == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update(user.User{ + result = db.Model(&core.User{Model: gorm.Model{ID: u.ID}}).Update(core.User{ Name: u.Name, Email: u.Email, Pass: u.Pass, MailVerify: u.MailVerify, MailToken: u.MailToken}) - } else if user.UpdateStatus == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update(user.User{Status: u.Status}) } else if user.UpdateGroupID == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update(user.User{GroupID: u.GroupID}) + result = db.Model(&core.User{Model: gorm.Model{ID: u.ID}}).Update(core.User{GroupID: u.GroupID}) } else if user.UpdateLevel == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update("level", u.Level) + result = db.Model(&core.User{Model: gorm.Model{ID: u.ID}}).Update("level", u.Level) } else if user.UpdateAll == base { - result = db.Model(&user.User{Model: gorm.Model{ID: u.ID}}).Update(user.User{ - GroupID: u.GroupID, Name: u.Name, Email: u.Email, Pass: u.Pass, - MailVerify: u.MailVerify, MailToken: u.MailToken, Status: u.Status}) + result = db.Model(&core.User{Model: gorm.Model{ID: u.ID}}).Update(core.User{ + GroupID: u.GroupID, + Name: u.Name, + Email: u.Email, + Pass: u.Pass, + MailVerify: u.MailVerify, + MailToken: u.MailToken, + }) } else { log.Println("base select error") return fmt.Errorf("(%s)error: base select\n", time.Now()) @@ -75,7 +79,7 @@ func Update(base int, u *user.User) error { } // value of base can reference from api/core/user/interface.go -func Get(base int, u *user.User) user.ResultDatabase { +func Get(base int, u *core.User) user.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -83,7 +87,7 @@ func Get(base int, u *user.User) user.ResultDatabase { } defer db.Close() - var userStruct []user.User + var userStruct []core.User if base == user.ID { //ID err = db.First(&userStruct, u.ID).Error @@ -109,7 +113,7 @@ func GetAll() user.ResultDatabase { } defer db.Close() - var users []user.User + var users []core.User err = db.Find(&users).Error return user.ResultDatabase{User: users, Err: err} } diff --git a/pkg/api/store/vm/nic/v0/nic.go b/pkg/api/store/vm/nic/v0/nic.go index d1e7e27..bd1cedd 100644 --- a/pkg/api/store/vm/nic/v0/nic.go +++ b/pkg/api/store/vm/nic/v0/nic.go @@ -1,103 +1,95 @@ package v0 -import ( - "fmt" - "github.com/jinzhu/gorm" - "github.com/vmmgr/controller/pkg/api/core/vm/nic" - "github.com/vmmgr/controller/pkg/api/store" - "log" - "time" -) - -func Create(nic *nic.NIC) (*nic.NIC, error) { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return nic, fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - err = db.Create(&nic).Error - return nic, err -} - -func Delete(nic *nic.NIC) error { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - return db.Delete(nic).Error -} - -func Update(base int, data nic.NIC) error { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - var result *gorm.DB - if nic.UpdateName == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{Name: data.Name}) - } else if nic.UpdateNodeN == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{NodeNICID: data.NodeNICID}) - } else if nic.UpdateGroup == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{GroupID: data.GroupID}) - } else if nic.UpdateMac == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{Mac: data.Mac}) - } else if nic.UpdateAll == base { - result = db.Model(&nic.NIC{Model: gorm.Model{ID: data.ID}}).Update(nic.NIC{VMID: data.VMID, - NodeNICID: data.NodeNICID, GroupID: data.GroupID, Name: data.Name, Type: data.Type, Driver: data.Driver, - Mode: data.Mode, Mac: data.Mac, Vlan: data.Vlan, Comment: data.Comment, Lock: data.Lock}) - } else { - log.Println("base select error") - return fmt.Errorf("(%s)error: base select\n", time.Now()) - } - return result.Error -} - -func Get(base int, data *nic.NIC) nic.ResultDatabase { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} - } - defer db.Close() - - var nicStruct []nic.NIC - - if base == nic.ID { //ID - err = db.First(&nicStruct, data.ID).Error - } else if base == nic.NodeNICID { //NodeNICID内の全VM検索 - err = db.Where("node_nic_id = ?", data.NodeNICID).Find(&nicStruct).Error - } else if base == nic.GroupID { //GroupID - err = db.Where("group_id = ?", data.GroupID).Find(&nicStruct).Error - } else if base == nic.Name { //UUID - err = db.Where("name = ?", data.Name).Find(&nicStruct).Error - } else if base == nic.Type { - err = db.Where("type = ? ", data.Type).Find(&nicStruct).Error - } else if base == nic.Vlan { - err = db.Where("vlan = ?", data.Lock).Find(&nicStruct).Error - } else { - log.Println("base select error") - return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: base select\n", time.Now())} - } - return nic.ResultDatabase{NIC: nicStruct, Err: err} -} - -func GetAll() nic.ResultDatabase { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} - } - defer db.Close() - - var nics []nic.NIC - err = db.Find(&nics).Error - return nic.ResultDatabase{NIC: nics, Err: err} -} +// +//func Create(nic *core.NIC) (*core.NIC, error) { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return nic, fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// err = db.Create(&nic).Error +// return nic, err +//} +// +//func Delete(nic *core.NIC) error { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// return db.Delete(nic).Error +//} +// +//func Update(base int, data core.NIC) error { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// var result *gorm.DB +// if nic.UpdateName == base { +// result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{Name: data.Name}) +// } else if nic.UpdateNodeN == base { +// result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{NodeNICID: data.NodeNICID}) +// } else if nic.UpdateGroup == base { +// result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{GroupID: data.GroupID}) +// } else if nic.UpdateMac == base { +// result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{Mac: data.Mac}) +// } else if nic.UpdateAll == base { +// result = db.Model(&core.NIC{Model: gorm.Model{ID: data.ID}}).Update(core.NIC{VMID: data.VMID, +// NodeNICID: data.NodeNICID, GroupID: data.GroupID, Name: data.Name, Type: data.Type, Driver: data.Driver, +// Mode: data.Mode, Mac: data.Mac, Vlan: data.Vlan, Comment: data.Comment, Lock: data.Lock}) +// } else { +// log.Println("base select error") +// return fmt.Errorf("(%s)error: base select\n", time.Now()) +// } +// return result.Error +//} +// +//func Get(base int, data *core.NIC) nic.ResultDatabase { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} +// } +// defer db.Close() +// +// var nicStruct []core.NIC +// +// if base == nic.ID { //ID +// err = db.First(&nicStruct, data.ID).Error +// } else if base == nic.NodeNICID { //NodeNICID内の全VM検索 +// err = db.Where("node_nic_id = ?", data.NodeNICID).Find(&nicStruct).Error +// } else if base == nic.GroupID { //GroupID +// err = db.Where("group_id = ?", data.GroupID).Find(&nicStruct).Error +// } else if base == nic.Name { //UUID +// err = db.Where("name = ?", data.Name).Find(&nicStruct).Error +// } else if base == nic.Type { +// err = db.Where("type = ? ", data.Type).Find(&nicStruct).Error +// } else if base == nic.Vlan { +// err = db.Where("vlan = ?", data.Lock).Find(&nicStruct).Error +// } else { +// log.Println("base select error") +// return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: base select\n", time.Now())} +// } +// return nic.ResultDatabase{NIC: nicStruct, Err: err} +//} +// +//func GetAll() nic.ResultDatabase { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return nic.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} +// } +// defer db.Close() +// +// var nics []core.NIC +// err = db.Find(&nics).Error +// return nic.ResultDatabase{NIC: nics, Err: err} +//} diff --git a/pkg/api/store/vm/storage/v0/storage.go b/pkg/api/store/vm/storage/v0/storage.go index e59a598..ed79307 100644 --- a/pkg/api/store/vm/storage/v0/storage.go +++ b/pkg/api/store/vm/storage/v0/storage.go @@ -1,100 +1,92 @@ package v0 -import ( - "fmt" - "github.com/jinzhu/gorm" - "github.com/vmmgr/controller/pkg/api/core/vm/storage" - "github.com/vmmgr/controller/pkg/api/store" - "log" - "time" -) - -func Create(storage *storage.Storage) (*storage.Storage, error) { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return storage, fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - err = db.Create(&storage).Error - return storage, err -} - -func Delete(storage *storage.Storage) error { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - return db.Delete(storage).Error -} - -func Update(base int, data storage.Storage) error { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) - } - defer db.Close() - - var result *gorm.DB - if storage.UpdateName == base { - result = db.Model(&storage.Storage{Model: gorm.Model{ID: data.ID}}).Update(storage.Storage{Name: data.Name}) - } else if storage.UpdateNodeS == base { - result = db.Model(&storage.Storage{Model: gorm.Model{ID: data.ID}}).Update(storage.Storage{NodeStorageID: data.NodeStorageID}) - } else if storage.UpdateGroup == base { - result = db.Model(&storage.Storage{Model: gorm.Model{ID: data.ID}}).Update(storage.Storage{GroupID: data.GroupID}) - } else if storage.UpdateAll == base { - result = db.Model(&storage.Storage{Model: gorm.Model{ID: data.ID}}).Update(storage.Storage{ - VMID: data.VMID, NodeStorageID: data.NodeStorageID, GroupID: data.GroupID, - Name: data.Name, Type: data.Type, FileType: data.FileType, MaxCapacity: data.MaxCapacity, - ReadOnly: data.ReadOnly, Comment: data.Comment, Lock: data.Lock}) - } else { - log.Println("base select error") - return fmt.Errorf("(%s)error: base select\n", time.Now()) - } - return result.Error -} - -func Get(base int, data *storage.Storage) storage.ResultDatabase { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} - } - defer db.Close() - - var storageStruct []storage.Storage - - if base == storage.ID { //ID - err = db.First(&storageStruct, data.ID).Error - } else if base == storage.NodeStorageID { //NodeStorage内の全Storage検索 - err = db.Where("node_storage_id = ?", data.NodeStorageID).Find(&storageStruct).Error - } else if base == storage.GroupID { //GroupID無いの全Storage検索 - err = db.Where("group_id = ?", data.GroupID).Find(&storageStruct).Error - } else if base == storage.NodeSAndVMID { //Node StorageID とVMIDから検索 - err = db.Where("node_storage_id = ? AND vm_id = ?", data.NodeStorageID, data.VMID).Find(&storageStruct).Error - } else if base == storage.Lock { //VM Lock - err = db.Where("lock = ?", data.Lock).Find(&storageStruct).Error - } else { - log.Println("base select error") - return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: base select\n", time.Now())} - } - return storage.ResultDatabase{Storage: storageStruct, Err: err} -} - -func GetAll() storage.ResultDatabase { - db, err := store.ConnectDB() - if err != nil { - log.Println("database connection error") - return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} - } - defer db.Close() - - var storages []storage.Storage - err = db.Find(&storages).Error - return storage.ResultDatabase{Storage: storages, Err: err} -} +// +//func Create(storage *core.Storage) (*core.Storage, error) { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return storage, fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// err = db.Create(&storage).Error +// return storage, err +//} +// +//func Delete(storage *core.Storage) error { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// return db.Delete(storage).Error +//} +// +//func Update(base int, data core.Storage) error { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error()) +// } +// defer db.Close() +// +// var result *gorm.DB +// if storage.UpdateName == base { +// result = db.Model(&core.Storage{Model: gorm.Model{ID: data.ID}}).Update(core.Storage{Name: data.Name}) +// } else if storage.UpdateNodeS == base { +// result = db.Model(&core.Storage{Model: gorm.Model{ID: data.ID}}).Update(core.Storage{NodeStorageID: data.NodeStorageID}) +// } else if storage.UpdateGroup == base { +// result = db.Model(&core.Storage{Model: gorm.Model{ID: data.ID}}).Update(core.Storage{GroupID: data.GroupID}) +// } else if storage.UpdateAll == base { +// result = db.Model(&core.Storage{Model: gorm.Model{ID: data.ID}}).Update(core.Storage{ +// VMID: data.VMID, NodeStorageID: data.NodeStorageID, GroupID: data.GroupID, +// Name: data.Name, Type: data.Type, FileType: data.FileType, MaxCapacity: data.MaxCapacity, +// ReadOnly: data.ReadOnly, Comment: data.Comment, Lock: data.Lock}) +// } else { +// log.Println("base select error") +// return fmt.Errorf("(%s)error: base select\n", time.Now()) +// } +// return result.Error +//} +// +//func Get(base int, data *core.Storage) storage.ResultDatabase { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} +// } +// defer db.Close() +// +// var storageStruct []core.Storage +// +// if base == storage.ID { //ID +// err = db.First(&storageStruct, data.ID).Error +// } else if base == storage.NodeStorageID { //NodeStorage内の全Storage検索 +// err = db.Where("node_storage_id = ?", data.NodeStorageID).Find(&storageStruct).Error +// } else if base == storage.GroupID { //GroupID無いの全Storage検索 +// err = db.Where("group_id = ?", data.GroupID).Find(&storageStruct).Error +// } else if base == storage.NodeSAndVMID { //Node StorageID とVMIDから検索 +// err = db.Where("node_storage_id = ? AND vm_id = ?", data.NodeStorageID, data.VMID).Find(&storageStruct).Error +// } else if base == storage.Lock { //VM Lock +// err = db.Where("lock = ?", data.Lock).Find(&storageStruct).Error +// } else { +// log.Println("base select error") +// return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: base select\n", time.Now())} +// } +// return storage.ResultDatabase{Storage: storageStruct, Err: err} +//} +// +//func GetAll() storage.ResultDatabase { +// db, err := store.ConnectDB() +// if err != nil { +// log.Println("database connection error") +// return storage.ResultDatabase{Err: fmt.Errorf("(%s)error: %s\n", time.Now(), err.Error())} +// } +// defer db.Close() +// +// var storages []core.Storage +// err = db.Find(&storages).Error +// return storage.ResultDatabase{Storage: storages, Err: err} +//} diff --git a/pkg/api/store/vm/v0/vm.go b/pkg/api/store/vm/v0/vm.go index 8e89518..9493713 100644 --- a/pkg/api/store/vm/v0/vm.go +++ b/pkg/api/store/vm/v0/vm.go @@ -3,13 +3,14 @@ package v0 import ( "fmt" "github.com/jinzhu/gorm" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/vm" "github.com/vmmgr/controller/pkg/api/store" "log" "time" ) -func Create(vm *vm.VM) (*vm.VM, error) { +func Create(vm *core.VM) (*core.VM, error) { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -21,7 +22,7 @@ func Create(vm *vm.VM) (*vm.VM, error) { return vm, err } -func Delete(vm *vm.VM) error { +func Delete(vm *core.VM) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -32,7 +33,7 @@ func Delete(vm *vm.VM) error { return db.Delete(vm).Error } -func Update(base int, data vm.VM) error { +func Update(base int, data core.VM) error { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -42,16 +43,16 @@ func Update(base int, data vm.VM) error { var result *gorm.DB if vm.UpdateName == base { - result = db.Model(&vm.VM{Model: gorm.Model{ID: data.ID}}).Update(vm.VM{Name: data.Name}) + result = db.Model(&core.VM{Model: gorm.Model{ID: data.ID}}).Update(core.VM{Name: data.Name}) } else if vm.UpdateNode == base { - result = db.Model(&vm.VM{Model: gorm.Model{ID: data.ID}}).Update(vm.VM{NodeID: data.NodeID}) + result = db.Model(&core.VM{Model: gorm.Model{ID: data.ID}}).Update(core.VM{NodeID: data.NodeID}) } else if vm.UpdateGroup == base { - result = db.Model(&vm.VM{Model: gorm.Model{ID: data.ID}}).Update(vm.VM{GroupID: data.GroupID}) + result = db.Model(&core.VM{Model: gorm.Model{ID: data.ID}}).Update(core.VM{GroupID: data.GroupID}) } else if vm.UpdateInfo == base { - result = db.Model(&vm.VM{Model: gorm.Model{ID: data.ID}}).Update(vm.VM{ + result = db.Model(&core.VM{Model: gorm.Model{ID: data.ID}}).Update(core.VM{ Name: data.Name, UUID: data.UUID, VNCPort: data.VNCPort}) } else if vm.UpdateAll == base { - result = db.Model(&vm.VM{Model: gorm.Model{ID: data.ID}}).Update(vm.VM{ + result = db.Model(&core.VM{Model: gorm.Model{ID: data.ID}}).Update(core.VM{ NodeID: data.NodeID, GroupID: data.GroupID, Name: data.Name, UUID: data.UUID, VNCPort: data.VNCPort, Lock: data.Lock, }) } else { @@ -61,7 +62,7 @@ func Update(base int, data vm.VM) error { return result.Error } -func Get(base int, data *vm.VM) vm.ResultDatabase { +func Get(base int, data *core.VM) vm.ResultDatabase { db, err := store.ConnectDB() if err != nil { log.Println("database connection error") @@ -69,7 +70,7 @@ func Get(base int, data *vm.VM) vm.ResultDatabase { } defer db.Close() - var vmStruct []vm.VM + var vmStruct []core.VM if base == vm.ID { //ID err = db.First(&vmStruct, data.ID).Error @@ -98,7 +99,7 @@ func GetAll() vm.ResultDatabase { } defer db.Close() - var vms []vm.VM + var vms []core.VM err = db.Find(&vms).Error return vm.ResultDatabase{VMs: vms, Err: err} } diff --git a/pkg/backend/cmd/init.go b/pkg/backend/cmd/init.go index 3cec13b..f0014e9 100644 --- a/pkg/backend/cmd/init.go +++ b/pkg/backend/cmd/init.go @@ -3,19 +3,8 @@ package cmd import ( "github.com/jinzhu/gorm" "github.com/spf13/cobra" - "github.com/vmmgr/controller/pkg/api/core/group" - "github.com/vmmgr/controller/pkg/api/core/node" - nodeNIC "github.com/vmmgr/controller/pkg/api/core/node/nic" - nodeStorage "github.com/vmmgr/controller/pkg/api/core/node/storage" - "github.com/vmmgr/controller/pkg/api/core/notice" - "github.com/vmmgr/controller/pkg/api/core/region" - "github.com/vmmgr/controller/pkg/api/core/region/zone" - "github.com/vmmgr/controller/pkg/api/core/support/chat" - "github.com/vmmgr/controller/pkg/api/core/support/ticket" - "github.com/vmmgr/controller/pkg/api/core/token" + "github.com/vmmgr/controller/pkg/api/core" "github.com/vmmgr/controller/pkg/api/core/tool/config" - "github.com/vmmgr/controller/pkg/api/core/user" - "github.com/vmmgr/controller/pkg/api/core/vm" "log" "strconv" ) @@ -38,9 +27,19 @@ var initCmd = &cobra.Command{ if err != nil { panic(err) } - result := db.AutoMigrate(&user.User{}, &group.Group{}, &token.Token{}, ¬ice.Notice{}, - &ticket.Ticket{}, &chat.Chat{}, ®ion.Region{}, &zone.Zone{}, &node.Node{}, &nodeStorage.Storage{}, - &nodeNIC.NIC{}, &vm.VM{}) + result := db.AutoMigrate( + &core.User{}, + &core.Group{}, + &core.Token{}, + &core.Notice{}, + &core.Ticket{}, + &core.Chat{}, + &core.Region{}, + &core.Zone{}, + &core.Node{}, + &core.Storage{}, + &core.NIC{}, + &core.VM{}) log.Println(result.Error) log.Println("end") },