Skip to content

Commit c2c5fb5

Browse files
Merge branch 'main' into feat-active-inactive-user-phase-1
2 parents d1ad254 + 30618a2 commit c2c5fb5

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

api/restHandler/app/BuildPipelineRestHandler.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
11731238
func (handler PipelineConfigRestHandlerImpl) CreateMaterial(w http.ResponseWriter, r *http.Request) {
11741239
token := r.Header.Get("token")
11751240
decoder := json.NewDecoder(r.Body)

api/router/PipelineConfigRouter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ func (router PipelineConfigRouterImpl) initPipelineConfigRouter(configRouter *mu
8181
configRouter.Path("/env").HandlerFunc(router.restHandler.EnvConfigOverrideUpdate).Methods("PUT")
8282
configRouter.Path("/env/{appId}/{environmentId}/{chartRefId}").HandlerFunc(router.restHandler.GetEnvConfigOverride).Methods("GET")
8383

84+
configRouter.Path("/ci-pipeline").HandlerFunc(router.restHandler.GetCIPipelineByPipelineId).Methods("GET")
8485
configRouter.Path("/ci-pipeline").HandlerFunc(router.restHandler.CreateCiConfig).Methods("POST")
8586
configRouter.Path("/ci-pipeline/{appId}").HandlerFunc(router.restHandler.GetCiPipeline).Methods("GET")
8687
configRouter.Path("/external-ci/{appId}").HandlerFunc(router.restHandler.GetExternalCi).Methods("GET")

pkg/bean/app.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ type CiPipeline struct {
100100
ParentCiPipeline int `json:"parentCiPipeline"`
101101
ParentAppId int `json:"parentAppId"`
102102
AppId int `json:"appId"`
103+
AppName string `json:"appName,omitempty"`
104+
AppType helper.AppType `json:"appType,omitempty"`
103105
ExternalCiConfig ExternalCiConfig `json:"externalCiConfig"`
104106
CiMaterial []*CiMaterial `json:"ciMaterial,omitempty" validate:"dive,min=1"`
105107
Name string `json:"name,omitempty" validate:"name-component,max=100"` //name suffix of corresponding pipeline. required, unique, validation corresponding to gocd pipelineName will be applicable

0 commit comments

Comments
 (0)