@@ -48,6 +48,7 @@ type UserRestHandler interface {
4848 GetAllV2 (w http.ResponseWriter , r * http.Request )
4949 DeleteUser (w http.ResponseWriter , r * http.Request )
5050 GetAllDetailedUsers (w http.ResponseWriter , r * http.Request )
51+ BulkDeleteUsers (w http.ResponseWriter , r * http.Request )
5152 FetchRoleGroupById (w http.ResponseWriter , r * http.Request )
5253 CreateRoleGroup (w http.ResponseWriter , r * http.Request )
5354 UpdateRoleGroup (w http.ResponseWriter , r * http.Request )
@@ -56,6 +57,7 @@ type UserRestHandler interface {
5657 FetchDetailedRoleGroups (w http.ResponseWriter , r * http.Request )
5758 FetchRoleGroupsByName (w http.ResponseWriter , r * http.Request )
5859 DeleteRoleGroup (w http.ResponseWriter , r * http.Request )
60+ BulkDeleteRoleGroups (w http.ResponseWriter , r * http.Request )
5961 CheckUserRoles (w http.ResponseWriter , r * http.Request )
6062 SyncOrchestratorToCasbin (w http.ResponseWriter , r * http.Request )
6163 UpdateTriggerPolicyForTerminalAccess (w http.ResponseWriter , r * http.Request )
@@ -360,7 +362,7 @@ func (handler UserRestHandlerImpl) GetAllV2(w http.ResponseWriter, r *http.Reque
360362 common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
361363 return
362364 }
363- req := & bean.FetchListingRequest {}
365+ req := & bean.ListingRequest {}
364366 err = decoder .Decode (req , r .URL .Query ())
365367 if err != nil {
366368 handler .logger .Errorw ("request err, GetAll" , "err" , err , "payload" , req )
@@ -519,8 +521,8 @@ func (handler UserRestHandlerImpl) DeleteUser(w http.ResponseWriter, r *http.Req
519521 }
520522 //RBAC enforcer Ends
521523 //validation
522- validated := helper .CheckIfUserDevtronManaged (int32 (id ))
523- if ! validated {
524+ validated := helper .IsSystemOrAdminUser (int32 (id ))
525+ if validated {
524526 err = & util.ApiError {Code : "400" , HttpStatusCode : 400 , UserMessage : "cannot delete system or admin user" }
525527 handler .logger .Errorw ("request err, DeleteUser, validation failed" , "id" , id , "err" , err )
526528 common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
@@ -537,6 +539,56 @@ func (handler UserRestHandlerImpl) DeleteUser(w http.ResponseWriter, r *http.Req
537539 common .WriteJsonResp (w , err , res , http .StatusOK )
538540}
539541
542+ func (handler UserRestHandlerImpl ) BulkDeleteUsers (w http.ResponseWriter , r * http.Request ) {
543+ userId , err := handler .userService .GetLoggedInUser (r )
544+ if userId == 0 || err != nil {
545+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
546+ return
547+ }
548+ decoder := json .NewDecoder (r .Body )
549+ // request decoding
550+ var request * bean.BulkDeleteRequest
551+ err = decoder .Decode (& request )
552+ if err != nil {
553+ handler .logger .Errorw ("request err, BulkDeleteUsers" , "payload" , request , "err" , err )
554+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
555+ return
556+ }
557+ handler .logger .Debugw ("request payload, BulkDeleteUsers" , "payload" , request )
558+ // setting logged in user Id for audit logs
559+ request .LoggedInUserId = userId
560+
561+ // validations for system and admin user
562+ err = helper .CheckValidationForAdminAndSystemUserId (request .Ids )
563+ if err != nil {
564+ handler .logger .Errorw ("request err, BulkDeleteUsers, validation failed" , "payload" , request , "err" , err )
565+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
566+ return
567+ }
568+
569+ // RBAC enforcer applying
570+ token := r .Header .Get ("token" )
571+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ! ok {
572+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
573+ return
574+ }
575+ // struct validation
576+ err = handler .validator .Struct (request )
577+ if err != nil {
578+ handler .logger .Errorw ("validation err, BulkDeleteUsers" , "payload" , request , "err" , err )
579+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
580+ return
581+ }
582+ // service call
583+ res , err := handler .userService .BulkDeleteUsers (request )
584+ if err != nil {
585+ handler .logger .Errorw ("service err, BulkDeleteUsers" , "payload" , request , "err" , err )
586+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
587+ return
588+ }
589+ common .WriteJsonResp (w , nil , res , http .StatusOK )
590+ }
591+
540592func (handler UserRestHandlerImpl ) FetchRoleGroupById (w http.ResponseWriter , r * http.Request ) {
541593 vars := mux .Vars (r )
542594 /* #nosec */
@@ -769,7 +821,7 @@ func (handler UserRestHandlerImpl) FetchRoleGroupsV2(w http.ResponseWriter, r *h
769821 return
770822 }
771823
772- req := & bean.FetchListingRequest {}
824+ req := & bean.ListingRequest {}
773825 err = decoder .Decode (req , r .URL .Query ())
774826 if err != nil {
775827 handler .logger .Errorw ("request err, FetchRoleGroups" , "err" , err , "payload" , req )
@@ -863,8 +915,8 @@ func (handler UserRestHandlerImpl) FetchDetailedRoleGroups(w http.ResponseWriter
863915 common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
864916 return
865917 }
866-
867- res , err := handler .roleGroupService .FetchDetailedRoleGroups ()
918+ req := & bean. ListingRequest { ShowAll : true }
919+ res , err := handler .roleGroupService .FetchDetailedRoleGroups (req )
868920 if err != nil {
869921 handler .logger .Errorw ("service err, FetchRoleGroups" , "err" , err )
870922 common .WriteJsonResp (w , err , "" , http .StatusInternalServerError )
@@ -950,6 +1002,50 @@ func (handler UserRestHandlerImpl) DeleteRoleGroup(w http.ResponseWriter, r *htt
9501002 common .WriteJsonResp (w , err , res , http .StatusOK )
9511003}
9521004
1005+ func (handler UserRestHandlerImpl ) BulkDeleteRoleGroups (w http.ResponseWriter , r * http.Request ) {
1006+ userId , err := handler .userService .GetLoggedInUser (r )
1007+ if userId == 0 || err != nil {
1008+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
1009+ return
1010+ }
1011+ decoder := json .NewDecoder (r .Body )
1012+ // request decoding
1013+ var request * bean.BulkDeleteRequest
1014+ err = decoder .Decode (& request )
1015+ if err != nil {
1016+ handler .logger .Errorw ("request err, BulkDeleteRoleGroups" , "payload" , request , "err" , err )
1017+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
1018+ return
1019+ }
1020+ handler .logger .Debugw ("request payload, BulkDeleteRoleGroups" , "payload" , request )
1021+ // setting logged in user Id for audit logs
1022+ request .LoggedInUserId = userId
1023+
1024+ // struct validation
1025+ err = handler .validator .Struct (request )
1026+ if err != nil {
1027+ handler .logger .Errorw ("validation err, BulkDeleteRoleGroups" , "payload" , request , "err" , err )
1028+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
1029+ return
1030+ }
1031+
1032+ // RBAC enforcer applying
1033+ token := r .Header .Get ("token" )
1034+ if ok := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ! ok {
1035+ common .WriteJsonResp (w , errors .New ("unauthorized" ), nil , http .StatusForbidden )
1036+ return
1037+ }
1038+
1039+ // service call
1040+ res , err := handler .roleGroupService .BulkDeleteRoleGroups (request )
1041+ if err != nil {
1042+ handler .logger .Errorw ("service err, BulkDeleteRoleGroups" , "payload" , request , "err" , err )
1043+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
1044+ return
1045+ }
1046+ common .WriteJsonResp (w , nil , res , http .StatusOK )
1047+ }
1048+
9531049func (handler UserRestHandlerImpl ) CheckUserRoles (w http.ResponseWriter , r * http.Request ) {
9541050 userId , err := handler .userService .GetLoggedInUser (r )
9551051 if userId == 0 || err != nil {
0 commit comments