@@ -19,11 +19,13 @@ package restHandler
1919import (
2020 "encoding/json"
2121 "fmt"
22+ bean4 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
2223 "github.com/devtron-labs/devtron/pkg/build/git/gitMaterial/repository"
2324 "github.com/devtron-labs/devtron/pkg/build/git/gitProvider"
2425 "github.com/devtron-labs/devtron/pkg/bulkAction/bean"
2526 "github.com/devtron-labs/devtron/pkg/bulkAction/service"
2627 "github.com/devtron-labs/devtron/pkg/cluster/environment"
28+ "github.com/devtron-labs/devtron/util"
2729 "net/http"
2830 "strconv"
2931 "strings"
@@ -181,22 +183,26 @@ func (handler BulkUpdateRestHandlerImpl) GetImpactedAppsName(w http.ResponseWrit
181183 ok := handler .CheckAuthForImpactedObjects (deploymentTemplateImpactedApp .AppId , deploymentTemplateImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
182184 if ! ok {
183185 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
186+ return
184187 }
185188 }
186189 for _ , configMapImpactedApp := range impactedApps .ConfigMap {
187190 ok := handler .CheckAuthForImpactedObjects (configMapImpactedApp .AppId , configMapImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
188191 if ! ok {
189192 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
193+ return
190194 }
191195 }
192196 for _ , secretImpactedApp := range impactedApps .Secret {
193197 ok := handler .CheckAuthForImpactedObjects (secretImpactedApp .AppId , secretImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
194198 if ! ok {
195199 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
200+ return
196201 }
197202 }
198203 common .WriteJsonResp (w , err , impactedApps , http .StatusOK )
199204}
205+
200206func (handler BulkUpdateRestHandlerImpl ) CheckAuthForBulkUpdate (AppId int , EnvId int , AppName string , rbacObjects map [int ]string , token string ) bool {
201207 resourceName := rbacObjects [AppId ]
202208 if ok := handler .enforcer .Enforce (token , casbin .ResourceApplications , casbin .ActionUpdate , resourceName ); ! ok {
@@ -212,9 +218,14 @@ func (handler BulkUpdateRestHandlerImpl) CheckAuthForBulkUpdate(AppId int, EnvId
212218
213219}
214220func (handler BulkUpdateRestHandlerImpl ) BulkUpdate (w http.ResponseWriter , r * http.Request ) {
221+ userId , err := handler .userAuthService .GetLoggedInUser (r )
222+ if userId == 0 || err != nil {
223+ common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
224+ return
225+ }
215226 decoder := json .NewDecoder (r .Body )
216227 var script bean.BulkUpdateScript
217- err : = decoder .Decode (& script )
228+ err = decoder .Decode (& script )
218229 if err != nil {
219230 common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
220231 return
@@ -236,22 +247,31 @@ func (handler BulkUpdateRestHandlerImpl) BulkUpdate(w http.ResponseWriter, r *ht
236247 ok := handler .CheckAuthForBulkUpdate (deploymentTemplateImpactedApp .AppId , deploymentTemplateImpactedApp .EnvId , deploymentTemplateImpactedApp .AppName , rbacObjects , token )
237248 if ! ok {
238249 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
250+ return
239251 }
240252 }
241253 for _ , configMapImpactedApp := range impactedApps .ConfigMap {
242254 ok := handler .CheckAuthForBulkUpdate (configMapImpactedApp .AppId , configMapImpactedApp .EnvId , configMapImpactedApp .AppName , rbacObjects , token )
243255 if ! ok {
244256 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
257+ return
245258 }
246259 }
247260 for _ , secretImpactedApp := range impactedApps .Secret {
248261 ok := handler .CheckAuthForBulkUpdate (secretImpactedApp .AppId , secretImpactedApp .EnvId , secretImpactedApp .AppName , rbacObjects , token )
249262 if ! ok {
250263 common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
264+ return
251265 }
252266 }
253-
254- response := handler .bulkUpdateService .BulkUpdate (script .Spec )
267+ isSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionCreate , "*" )
268+ userEmail := util .GetEmailFromContext (r .Context ())
269+ userMetadata := & bean4.UserMetadata {
270+ UserEmailId : userEmail ,
271+ IsUserSuperAdmin : isSuperAdmin ,
272+ UserId : userId ,
273+ }
274+ response := handler .bulkUpdateService .BulkUpdate (script .Spec , userMetadata )
255275 common .WriteJsonResp (w , nil , response , http .StatusOK )
256276}
257277
@@ -261,7 +281,15 @@ func (handler BulkUpdateRestHandlerImpl) BulkHibernate(w http.ResponseWriter, r
261281 return // response already written by the helper on error.
262282 }
263283 token := r .Header .Get ("token" )
264- response , err := handler .bulkUpdateService .BulkHibernate (request , r .Context (), w , token , handler .checkAuthForBulkHibernateAndUnhibernate )
284+ isSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionCreate , "*" )
285+ userEmail := util .GetEmailFromContext (r .Context ())
286+ userMetadata := & bean4.UserMetadata {
287+ UserEmailId : userEmail ,
288+ IsUserSuperAdmin : isSuperAdmin ,
289+ UserId : request .UserId ,
290+ }
291+
292+ response , err := handler .bulkUpdateService .BulkHibernate (r .Context (), request , handler .checkAuthForBulkHibernateAndUnhibernate , userMetadata )
265293 if err != nil {
266294 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
267295 return
@@ -298,7 +326,14 @@ func (handler BulkUpdateRestHandlerImpl) BulkUnHibernate(w http.ResponseWriter,
298326 return // response already written by the helper on error.
299327 }
300328 token := r .Header .Get ("token" )
301- response , err := handler .bulkUpdateService .BulkUnHibernate (request , r .Context (), w , token , handler .checkAuthForBulkHibernateAndUnhibernate )
329+ isSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionCreate , "*" )
330+ userEmail := util .GetEmailFromContext (r .Context ())
331+ userMetadata := & bean4.UserMetadata {
332+ UserEmailId : userEmail ,
333+ IsUserSuperAdmin : isSuperAdmin ,
334+ UserId : request .UserId ,
335+ }
336+ response , err := handler .bulkUpdateService .BulkUnHibernate (r .Context (), request , handler .checkAuthForBulkHibernateAndUnhibernate , userMetadata )
302337 if err != nil {
303338 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
304339 return
@@ -326,7 +361,14 @@ func (handler BulkUpdateRestHandlerImpl) BulkDeploy(w http.ResponseWriter, r *ht
326361 common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
327362 return
328363 }
329- response , err := handler .bulkUpdateService .BulkDeploy (& request , token , handler .checkAuthBatch )
364+ isSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionCreate , "*" )
365+ userEmail := util .GetEmailFromContext (r .Context ())
366+ userMetadata := & bean4.UserMetadata {
367+ UserEmailId : userEmail ,
368+ IsUserSuperAdmin : isSuperAdmin ,
369+ UserId : userId ,
370+ }
371+ response , err := handler .bulkUpdateService .BulkDeploy (& request , token , handler .checkAuthBatch , userMetadata )
330372 if err != nil {
331373 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
332374 return
0 commit comments