@@ -25,6 +25,7 @@ import (
2525 "github.com/devtron-labs/devtron/pkg/pipeline/types"
2626 resourceGroup "github.com/devtron-labs/devtron/pkg/resourceGroup"
2727 util2 "github.com/devtron-labs/devtron/util"
28+ "github.com/devtron-labs/devtron/util/response"
2829 "github.com/go-pg/pg"
2930 "github.com/gorilla/mux"
3031 "go.opentelemetry.io/otel"
@@ -51,6 +52,7 @@ type DevtronAppBuildRestHandler interface {
5152 TriggerCiPipeline (w http.ResponseWriter , r * http.Request )
5253 GetCiPipelineMin (w http.ResponseWriter , r * http.Request )
5354 GetCIPipelineById (w http.ResponseWriter , r * http.Request )
55+ GetCIPipelineByPipelineId (w http.ResponseWriter , r * http.Request )
5456 HandleWorkflowWebhook (w http.ResponseWriter , r * http.Request )
5557 GetBuildLogs (w http.ResponseWriter , r * http.Request )
5658 FetchWorkflowDetails (w http.ResponseWriter , r * http.Request )
@@ -1170,6 +1172,69 @@ func (handler PipelineConfigRestHandlerImpl) GetCIPipelineById(w http.ResponseWr
11701172 common .WriteJsonResp (w , err , ciPipeline , http .StatusOK )
11711173}
11721174
1175+ func (handler PipelineConfigRestHandlerImpl ) GetCIPipelineByPipelineId (w http.ResponseWriter , r * http.Request ) {
1176+ token := r .Header .Get ("token" )
1177+ var ciPipelineId int
1178+ var err error
1179+ v := r .URL .Query ()
1180+ pipelineId := v .Get ("pipelineId" )
1181+ if len (pipelineId ) != 0 {
1182+ ciPipelineId , err = strconv .Atoi (pipelineId )
1183+ if err != nil {
1184+ handler .Logger .Errorw ("request err, GetCIPipelineByPipelineId" , "err" , err , "pipelineIdParam" , pipelineId )
1185+ response .WriteResponse (http .StatusBadRequest , "please send valid pipelineId" , w , errors .New ("pipelineId id invalid" ))
1186+ return
1187+ }
1188+ } else {
1189+ response .WriteResponse (http .StatusBadRequest , "please send valid pipelineId" , w , errors .New ("pipelineId id invalid" ))
1190+ return
1191+ }
1192+
1193+ handler .Logger .Infow ("request payload, GetCIPipelineByPipelineId" , "pipelineId" , pipelineId )
1194+
1195+ ciPipeline , err := handler .pipelineBuilder .GetCiPipelineById (ciPipelineId )
1196+ if err != nil {
1197+ handler .Logger .Infow ("service error, GetCIPipelineById" , "err" , err , "pipelineId" , pipelineId )
1198+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
1199+ return
1200+ }
1201+
1202+ app , err := handler .pipelineBuilder .GetApp (ciPipeline .AppId )
1203+ if err != nil {
1204+ handler .Logger .Infow ("service error, GetCIPipelineByPipelineId" , "err" , err , "appId" , ciPipeline .AppId , "pipelineId" , pipelineId )
1205+ common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
1206+ return
1207+ }
1208+ ciPipeline .AppName = app .AppName
1209+ ciPipeline .AppType = app .AppType
1210+
1211+ resourceName := handler .enforcerUtil .GetAppRBACNameByAppId (app .Id )
1212+ if ok := handler .enforcer .Enforce (token , casbin .ResourceApplications , casbin .ActionGet , resourceName ); ! ok {
1213+ common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
1214+ return
1215+ }
1216+
1217+ pipelineData , err := handler .pipelineRepository .FindActiveByAppIdAndPipelineId (ciPipeline .AppId , ciPipelineId )
1218+ if err != nil {
1219+ common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
1220+ return
1221+ }
1222+ var environmentIds []int
1223+ for _ , pipeline := range pipelineData {
1224+ environmentIds = append (environmentIds , pipeline .EnvironmentId )
1225+ }
1226+ if handler .appWorkflowService .CheckCdPipelineByCiPipelineId (ciPipelineId ) {
1227+ for _ , envId := range environmentIds {
1228+ envObject := handler .enforcerUtil .GetEnvRBACNameByCiPipelineIdAndEnvId (ciPipelineId , envId )
1229+ if ok := handler .enforcer .Enforce (token , casbin .ResourceEnvironment , casbin .ActionUpdate , envObject ); ! ok {
1230+ common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), "Unauthorized User" , http .StatusForbidden )
1231+ return
1232+ }
1233+ }
1234+ }
1235+ common .WriteJsonResp (w , err , ciPipeline , http .StatusOK )
1236+ }
1237+
11731238func (handler PipelineConfigRestHandlerImpl ) CreateMaterial (w http.ResponseWriter , r * http.Request ) {
11741239 token := r .Header .Get ("token" )
11751240 decoder := json .NewDecoder (r .Body )
0 commit comments