@@ -28,9 +28,12 @@ import (
28
28
"github.com/devtron-labs/devtron/pkg/plugin/bean"
29
29
"github.com/devtron-labs/devtron/util/rbac"
30
30
"github.com/gorilla/mux"
31
+ "github.com/gorilla/schema"
31
32
"go.uber.org/zap"
33
+ "io"
32
34
"net/http"
33
35
"strconv"
36
+ "strings"
34
37
)
35
38
36
39
type GlobalPluginRestHandler interface {
@@ -310,12 +313,13 @@ func (handler *GlobalPluginRestHandlerImpl) GetAllUniqueTags(w http.ResponseWrit
310
313
311
314
func (handler * GlobalPluginRestHandlerImpl ) GetPluginDetailByIds (w http.ResponseWriter , r * http.Request ) {
312
315
token := r .Header .Get ("token" )
313
- appId , err := common . ExtractIntQueryParam ( w , r , "appId" , 0 )
316
+ request , err := handler . getPluginDetailsRequestDto ( r )
314
317
if err != nil {
318
+ common .WriteJsonResp (w , err , err .Error (), http .StatusBadRequest )
315
319
return
316
320
}
317
321
318
- ok , err := handler .IsUserAuthorized (token , appId )
322
+ ok , err := handler .IsUserAuthorized (token , request . AppId )
319
323
if err != nil {
320
324
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
321
325
return
@@ -325,15 +329,9 @@ func (handler *GlobalPluginRestHandlerImpl) GetPluginDetailByIds(w http.Response
325
329
return
326
330
}
327
331
328
- pluginIds , parentPluginIds , fetchAllVersionDetails , err := handler .extractQueryParamsForPluginDetail ( r )
332
+ pluginDetail , err := handler .globalPluginService . GetPluginDetailV2 ( request )
329
333
if err != nil {
330
- common .WriteJsonResp (w , err , err .Error (), http .StatusBadRequest )
331
- return
332
- }
333
-
334
- pluginDetail , err := handler .globalPluginService .GetPluginDetailV2 (pluginIds , parentPluginIds , fetchAllVersionDetails )
335
- if err != nil {
336
- handler .logger .Errorw ("error in getting plugin detail" , "pluginIds" , pluginIds , "parentPluginIds" , parentPluginIds , "fetchAllVersionDetails" , fetchAllVersionDetails , "err" , err )
334
+ handler .logger .Errorw ("error in getting plugin detail" , "request" , request , "err" , err )
337
335
common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
338
336
return
339
337
}
@@ -376,22 +374,27 @@ func (handler *GlobalPluginRestHandlerImpl) getListFilterFromQueryParam(w http.R
376
374
return listFilter , nil
377
375
}
378
376
379
- func (handler * GlobalPluginRestHandlerImpl ) extractQueryParamsForPluginDetail (r * http.Request ) ([]int , []int , bool , error ) {
380
- pluginIds , parentPluginIds := make ([]int , 0 ), make ([]int , 0 )
381
-
382
- pluginIds , err := common .ExtractIntArrayFromQueryParam (r , "pluginId" )
383
- if err != nil {
384
- return nil , nil , false , errors .New ("invalid pluginId" )
385
- }
386
- parentPluginIds , err = common .ExtractIntArrayFromQueryParam (r , "parentPluginId" )
387
- if err != nil {
388
- return nil , nil , false , errors .New ("invalid parentPluginId" )
389
- }
390
- fetchAllVersionDetails , err := common .ExtractBoolQueryParam (r , "fetchAllVersionDetails" )
391
- if err != nil {
392
- return nil , nil , fetchAllVersionDetails , errors .New ("invalid fetchAllVersionDetails value" )
377
+ func (handler * GlobalPluginRestHandlerImpl ) getPluginDetailsRequestDto (r * http.Request ) (bean.GlobalPluginDetailsRequest , error ) {
378
+ request := bean.GlobalPluginDetailsRequest {}
379
+ jsonDecoder := json .NewDecoder (r .Body )
380
+ err := jsonDecoder .Decode (& request )
381
+ if err != nil && err != io .EOF {
382
+ handler .logger .Errorw ("request err, CreateOrUpdateGlobalPolicy" , "err" , err , "payload" , request )
383
+ return request , err
384
+ } else if err == io .EOF {
385
+ var schemaDecoder = schema .NewDecoder ()
386
+ schemaDecoder .IgnoreUnknownKeys (true )
387
+ err = schemaDecoder .Decode (& request , r .URL .Query ())
388
+ if err != nil {
389
+ handler .logger .Errorw ("error in parsing query param" , "err" , err )
390
+ return request , err
391
+ }
392
+ parentPluginIdentifiers := strings .Split (request .ParentPluginIdentifier , "," )
393
+ for _ , identifiers := range parentPluginIdentifiers {
394
+ request .ParentPluginIdentifiers = append (request .ParentPluginIdentifiers , strings .TrimSpace (identifiers ))
395
+ }
393
396
}
394
- return pluginIds , parentPluginIds , fetchAllVersionDetails , nil
397
+ return request , nil
395
398
}
396
399
397
400
func (handler * GlobalPluginRestHandlerImpl ) IsUserAuthorized (token string , appId int ) (bool , error ) {
@@ -465,21 +468,31 @@ func (handler *GlobalPluginRestHandlerImpl) CreatePlugin(w http.ResponseWriter,
465
468
466
469
func (handler * GlobalPluginRestHandlerImpl ) GetAllPluginMinData (w http.ResponseWriter , r * http.Request ) {
467
470
token := r .Header .Get ("token" )
468
- appId , err := common .ExtractIntQueryParam (w , r , "appId" , 0 )
471
+ v := r .URL .Query ()
472
+ var schemaDecoder = schema .NewDecoder ()
473
+ schemaDecoder .IgnoreUnknownKeys (true )
474
+ queryParams := bean.PluginDetailsMinQuery {}
475
+ err := schemaDecoder .Decode (& queryParams , v )
469
476
if err != nil {
477
+ handler .logger .Errorw ("error in parsing query param" , "err" , err )
478
+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
470
479
return
471
480
}
472
- ok , err := handler .IsUserAuthorized (token , appId )
481
+ ok , err := handler .IsUserAuthorized (token , queryParams . AppId )
473
482
if err != nil {
483
+ handler .logger .Errorw ("error in verifying rbac" , "appId" , queryParams .AppId , "err" , err )
474
484
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
475
485
return
476
486
}
477
487
if ! ok {
478
488
common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
479
489
return
480
490
}
481
-
482
- pluginDetail , err := handler .globalPluginService .GetAllPluginMinData ()
491
+ if ! queryParams .IsValidPluginType () {
492
+ common .WriteJsonResp (w , fmt .Errorf ("invalid query param 'type'" ), "invalid query param 'type'" , http .StatusBadRequest )
493
+ return
494
+ }
495
+ pluginDetail , err := handler .globalPluginService .GetAllPluginMinData (queryParams .GetPluginType ())
483
496
if err != nil {
484
497
handler .logger .Errorw ("error in getting all unique tags" , "err" , err )
485
498
common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
0 commit comments