From add378cad53956fd638e0411247d6b68cddc28de Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Fri, 27 Sep 2024 13:37:23 +0400 Subject: [PATCH 1/4] fix api resp on group list api --- pro/controllers/users.go | 4 ++-- pro/logic/user_mgmt.go | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pro/controllers/users.go b/pro/controllers/users.go index fbd6db9d..0c6c4093 100644 --- a/pro/controllers/users.go +++ b/pro/controllers/users.go @@ -488,12 +488,12 @@ func deleteUserGroup(w http.ResponseWriter, r *http.Request) { gid, _ := url.QueryUnescape(r.URL.Query().Get("group_id")) if gid == "" { - logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest")) + logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("group id is required"), "badrequest")) return } userG, err := proLogic.GetUserGroup(models.UserGroupID(gid)) if err != nil { - logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest")) + logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("failed to fetch group details"), "badrequest")) return } err = proLogic.DeleteUserGroup(models.UserGroupID(gid)) diff --git a/pro/logic/user_mgmt.go b/pro/logic/user_mgmt.go index 84c5987b..1d336cc1 100644 --- a/pro/logic/user_mgmt.go +++ b/pro/logic/user_mgmt.go @@ -75,6 +75,9 @@ func UserRolesInit() { } func CreateDefaultNetworkRolesAndGroups(netID models.NetworkID) { + if netID.String() == "" { + return + } var NetworkAdminPermissionTemplate = models.UserRolePermissionTemplate{ ID: models.UserRoleID(fmt.Sprintf("%s-%s", netID, models.NetworkAdmin)), Default: true, @@ -120,7 +123,7 @@ func CreateDefaultNetworkRolesAndGroups(netID models.NetworkID) { models.UserRoleID(fmt.Sprintf("%s-%s", netID, models.NetworkAdmin)): {}, }, }, - MetaData: "The network role was automatically created by Netmaker.", + MetaData: "The network group was automatically created by Netmaker.", } var NetworkUserGroup = models.UserGroup{ ID: models.UserGroupID(fmt.Sprintf("%s-%s-grp", netID, models.NetworkUser)), @@ -129,7 +132,7 @@ func CreateDefaultNetworkRolesAndGroups(netID models.NetworkID) { models.UserRoleID(fmt.Sprintf("%s-%s", netID, models.NetworkUser)): {}, }, }, - MetaData: "The network role was automatically created by Netmaker.", + MetaData: "The network group was automatically created by Netmaker.", } d, _ = json.Marshal(NetworkAdminGroup) database.Insert(NetworkAdminGroup.ID.String(), string(d), database.USER_GROUPS_TABLE_NAME) From 3f25d5e13678c7969c1e1be3c51bbbba770733f2 Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Fri, 27 Sep 2024 16:14:28 +0400 Subject: [PATCH 2/4] remove v1 user groups --- migrate/migrate.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/migrate/migrate.go b/migrate/migrate.go index a2d9b65d..e3d339ad 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -21,11 +21,11 @@ import ( func Run() { updateEnrollmentKeys() assignSuperAdmin() + removeOldUserGrps() syncUsers() updateHosts() updateNodes() updateAcls() - } func assignSuperAdmin() { @@ -124,6 +124,24 @@ func updateEnrollmentKeys() { } } +func removeOldUserGrps() { + rows, err := database.FetchRecords(database.USER_GROUPS_TABLE_NAME) + if err != nil { + return + } + for key, row := range rows { + userG := models.UserGroup{} + err = json.Unmarshal([]byte(row), &userG) + if err == nil { + if userG.ID == "" { + database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, key) + } + } else { + database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, key) + } + } +} + func updateHosts() { rows, err := database.FetchRecords(database.HOSTS_TABLE_NAME) if err != nil { From 38be79cc8d59fcb86192cf829e088d4a08c8368b Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Fri, 27 Sep 2024 16:57:03 +0400 Subject: [PATCH 3/4] rm redundant check on user groups migration check --- migrate/migrate.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/migrate/migrate.go b/migrate/migrate.go index e3d339ad..6612d4dd 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -131,12 +131,8 @@ func removeOldUserGrps() { } for key, row := range rows { userG := models.UserGroup{} - err = json.Unmarshal([]byte(row), &userG) - if err == nil { - if userG.ID == "" { - database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, key) - } - } else { + _ = json.Unmarshal([]byte(row), &userG) + if userG.ID == "" { database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, key) } } From 1561aaf788248bdba4a64fc105625b6cce93e56a Mon Sep 17 00:00:00 2001 From: abhishek9686 Date: Sun, 29 Sep 2024 16:00:38 +0400 Subject: [PATCH 4/4] remove query unescape usage --- controllers/middleware.go | 3 +-- controllers/user.go | 3 +-- logic/security.go | 3 +-- pro/controllers/users.go | 20 ++++++++++---------- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/controllers/middleware.go b/controllers/middleware.go index bfc88aa4..fb2bef68 100644 --- a/controllers/middleware.go +++ b/controllers/middleware.go @@ -2,7 +2,6 @@ package controller import ( "net/http" - "net/url" "strings" "github.com/gorilla/mux" @@ -92,7 +91,7 @@ func userMiddleWare(handler http.Handler) http.Handler { if userID, ok := params["username"]; ok { r.Header.Set("TARGET_RSRC_ID", userID) } else { - username, _ := url.QueryUnescape(r.URL.Query().Get("username")) + username := r.URL.Query().Get("username") if username != "" { r.Header.Set("TARGET_RSRC_ID", username) } diff --git a/controllers/user.go b/controllers/user.go index e1166576..c48a1b1d 100644 --- a/controllers/user.go +++ b/controllers/user.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "net/http" - "net/url" "reflect" "github.com/gorilla/mux" @@ -240,7 +239,7 @@ func getUser(w http.ResponseWriter, r *http.Request) { func getUserV1(w http.ResponseWriter, r *http.Request) { // set header. w.Header().Set("Content-Type", "application/json") - usernameFetched, _ := url.QueryUnescape(r.URL.Query().Get("username")) + usernameFetched := r.URL.Query().Get("username") if usernameFetched == "" { logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("username is required"), "badrequest")) return diff --git a/logic/security.go b/logic/security.go index 84f7a3cf..f4c8a23e 100644 --- a/logic/security.go +++ b/logic/security.go @@ -2,7 +2,6 @@ package logic import ( "net/http" - "net/url" "strings" "github.com/gorilla/mux" @@ -97,7 +96,7 @@ func ContinueIfUserMatch(next http.Handler) http.HandlerFunc { var params = mux.Vars(r) var requestedUser = params["username"] if requestedUser == "" { - requestedUser, _ = url.QueryUnescape(r.URL.Query().Get("username")) + requestedUser = r.URL.Query().Get("username") } if requestedUser != r.Header.Get("user") { ReturnErrorResponse(w, r, errorResponse) diff --git a/pro/controllers/users.go b/pro/controllers/users.go index 0c6c4093..c8119b79 100644 --- a/pro/controllers/users.go +++ b/pro/controllers/users.go @@ -71,8 +71,8 @@ func UserHandlers(r *mux.Router) { // Responses: // 200: ReturnSuccessResponse func userInviteSignUp(w http.ResponseWriter, r *http.Request) { - email, _ := url.QueryUnescape(r.URL.Query().Get("email")) - code, _ := url.QueryUnescape(r.URL.Query().Get("invite_code")) + email := r.URL.Query().Get("email") + code := r.URL.Query().Get("invite_code") in, err := logic.GetUserInvite(email) if err != nil { logger.Log(0, "failed to fetch users: ", err.Error()) @@ -133,8 +133,8 @@ func userInviteSignUp(w http.ResponseWriter, r *http.Request) { // Responses: // 200: ReturnSuccessResponse func userInviteVerify(w http.ResponseWriter, r *http.Request) { - email, _ := url.QueryUnescape(r.URL.Query().Get("email")) - code, _ := url.QueryUnescape(r.URL.Query().Get("invite_code")) + email := r.URL.Query().Get("email") + code := r.URL.Query().Get("invite_code") err := logic.ValidateAndApproveUserInvite(email, code) if err != nil { logger.Log(0, "failed to fetch users: ", err.Error()) @@ -299,7 +299,7 @@ func listUserInvites(w http.ResponseWriter, r *http.Request) { // Responses: // 200: ReturnSuccessResponse func deleteUserInvite(w http.ResponseWriter, r *http.Request) { - email, _ := url.QueryUnescape(r.URL.Query().Get("invitee_email")) + email := r.URL.Query().Get("invitee_email") err := logic.DeleteUserInvite(email) if err != nil { logger.Log(0, "failed to delete user invite: ", email, err.Error()) @@ -365,7 +365,7 @@ func listUserGroups(w http.ResponseWriter, r *http.Request) { // 200: userBodyResponse func getUserGroup(w http.ResponseWriter, r *http.Request) { - gid, _ := url.QueryUnescape(r.URL.Query().Get("group_id")) + gid := r.URL.Query().Get("group_id") if gid == "" { logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("group id is required"), "badrequest")) return @@ -486,7 +486,7 @@ func updateUserGroup(w http.ResponseWriter, r *http.Request) { // @Failure 500 {object} models.ErrorResponse func deleteUserGroup(w http.ResponseWriter, r *http.Request) { - gid, _ := url.QueryUnescape(r.URL.Query().Get("group_id")) + gid := r.URL.Query().Get("group_id") if gid == "" { logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("group id is required"), "badrequest")) return @@ -512,7 +512,7 @@ func deleteUserGroup(w http.ResponseWriter, r *http.Request) { // @Success 200 {object} []models.UserRolePermissionTemplate // @Failure 500 {object} models.ErrorResponse func ListRoles(w http.ResponseWriter, r *http.Request) { - platform, _ := url.QueryUnescape(r.URL.Query().Get("platform")) + platform := r.URL.Query().Get("platform") var roles []models.UserRolePermissionTemplate var err error if platform == "true" { @@ -538,7 +538,7 @@ func ListRoles(w http.ResponseWriter, r *http.Request) { // @Success 200 {object} models.UserRolePermissionTemplate // @Failure 500 {object} models.ErrorResponse func getRole(w http.ResponseWriter, r *http.Request) { - rid, _ := url.QueryUnescape(r.URL.Query().Get("role_id")) + rid := r.URL.Query().Get("role_id") if rid == "" { logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest")) return @@ -628,7 +628,7 @@ func updateRole(w http.ResponseWriter, r *http.Request) { // @Failure 500 {object} models.ErrorResponse func deleteRole(w http.ResponseWriter, r *http.Request) { - rid, _ := url.QueryUnescape(r.URL.Query().Get("role_id")) + rid := r.URL.Query().Get("role_id") if rid == "" { logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest")) return