@@ -19,11 +19,13 @@ package restHandler
19
19
import (
20
20
"encoding/json"
21
21
"fmt"
22
+ bean4 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
22
23
"github.com/devtron-labs/devtron/pkg/build/git/gitMaterial/repository"
23
24
"github.com/devtron-labs/devtron/pkg/build/git/gitProvider"
24
25
"github.com/devtron-labs/devtron/pkg/bulkAction/bean"
25
26
"github.com/devtron-labs/devtron/pkg/bulkAction/service"
26
27
"github.com/devtron-labs/devtron/pkg/cluster/environment"
28
+ "github.com/devtron-labs/devtron/util"
27
29
"net/http"
28
30
"strconv"
29
31
"strings"
@@ -181,22 +183,26 @@ func (handler BulkUpdateRestHandlerImpl) GetImpactedAppsName(w http.ResponseWrit
181
183
ok := handler .CheckAuthForImpactedObjects (deploymentTemplateImpactedApp .AppId , deploymentTemplateImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
182
184
if ! ok {
183
185
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
186
+ return
184
187
}
185
188
}
186
189
for _ , configMapImpactedApp := range impactedApps .ConfigMap {
187
190
ok := handler .CheckAuthForImpactedObjects (configMapImpactedApp .AppId , configMapImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
188
191
if ! ok {
189
192
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
193
+ return
190
194
}
191
195
}
192
196
for _ , secretImpactedApp := range impactedApps .Secret {
193
197
ok := handler .CheckAuthForImpactedObjects (secretImpactedApp .AppId , secretImpactedApp .EnvId , appResourceObjects , envResourceObjects , token )
194
198
if ! ok {
195
199
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
200
+ return
196
201
}
197
202
}
198
203
common .WriteJsonResp (w , err , impactedApps , http .StatusOK )
199
204
}
205
+
200
206
func (handler BulkUpdateRestHandlerImpl ) CheckAuthForBulkUpdate (AppId int , EnvId int , AppName string , rbacObjects map [int ]string , token string ) bool {
201
207
resourceName := rbacObjects [AppId ]
202
208
if ok := handler .enforcer .Enforce (token , casbin .ResourceApplications , casbin .ActionUpdate , resourceName ); ! ok {
@@ -212,9 +218,14 @@ func (handler BulkUpdateRestHandlerImpl) CheckAuthForBulkUpdate(AppId int, EnvId
212
218
213
219
}
214
220
func (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
+ }
215
226
decoder := json .NewDecoder (r .Body )
216
227
var script bean.BulkUpdateScript
217
- err : = decoder .Decode (& script )
228
+ err = decoder .Decode (& script )
218
229
if err != nil {
219
230
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
220
231
return
@@ -236,22 +247,31 @@ func (handler BulkUpdateRestHandlerImpl) BulkUpdate(w http.ResponseWriter, r *ht
236
247
ok := handler .CheckAuthForBulkUpdate (deploymentTemplateImpactedApp .AppId , deploymentTemplateImpactedApp .EnvId , deploymentTemplateImpactedApp .AppName , rbacObjects , token )
237
248
if ! ok {
238
249
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
250
+ return
239
251
}
240
252
}
241
253
for _ , configMapImpactedApp := range impactedApps .ConfigMap {
242
254
ok := handler .CheckAuthForBulkUpdate (configMapImpactedApp .AppId , configMapImpactedApp .EnvId , configMapImpactedApp .AppName , rbacObjects , token )
243
255
if ! ok {
244
256
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
257
+ return
245
258
}
246
259
}
247
260
for _ , secretImpactedApp := range impactedApps .Secret {
248
261
ok := handler .CheckAuthForBulkUpdate (secretImpactedApp .AppId , secretImpactedApp .EnvId , secretImpactedApp .AppName , rbacObjects , token )
249
262
if ! ok {
250
263
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
264
+ return
251
265
}
252
266
}
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 )
255
275
common .WriteJsonResp (w , nil , response , http .StatusOK )
256
276
}
257
277
@@ -261,7 +281,15 @@ func (handler BulkUpdateRestHandlerImpl) BulkHibernate(w http.ResponseWriter, r
261
281
return // response already written by the helper on error.
262
282
}
263
283
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 )
265
293
if err != nil {
266
294
common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
267
295
return
@@ -298,7 +326,14 @@ func (handler BulkUpdateRestHandlerImpl) BulkUnHibernate(w http.ResponseWriter,
298
326
return // response already written by the helper on error.
299
327
}
300
328
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 )
302
337
if err != nil {
303
338
common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
304
339
return
@@ -326,7 +361,14 @@ func (handler BulkUpdateRestHandlerImpl) BulkDeploy(w http.ResponseWriter, r *ht
326
361
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
327
362
return
328
363
}
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 )
330
372
if err != nil {
331
373
common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
332
374
return
0 commit comments