@@ -28,8 +28,9 @@ import (
2828 "github.com/devtron-labs/devtron/client/argocdServer/application"
2929 "github.com/devtron-labs/devtron/internal/constants"
3030 "github.com/devtron-labs/devtron/internal/util"
31- appStore "github.com/devtron-labs/devtron/pkg/appStore"
31+ "github.com/devtron-labs/devtron/pkg/appStore"
3232 appStoreBean "github.com/devtron-labs/devtron/pkg/appStore/bean"
33+ appStoreDeployment "github.com/devtron-labs/devtron/pkg/appStore/deployment"
3334 "github.com/devtron-labs/devtron/pkg/cluster"
3435 "github.com/devtron-labs/devtron/pkg/user"
3536 "github.com/devtron-labs/devtron/pkg/user/casbin"
@@ -45,112 +46,45 @@ import (
4546)
4647
4748type InstalledAppRestHandler interface {
48- CreateInstalledApp (w http.ResponseWriter , r * http.Request )
4949 UpdateInstalledApp (w http.ResponseWriter , r * http.Request )
5050 GetAllInstalledApp (w http.ResponseWriter , r * http.Request )
51- GetInstalledAppsByAppStoreId (w http.ResponseWriter , r * http.Request )
5251 GetInstalledAppVersion (w http.ResponseWriter , r * http.Request )
53- DeleteInstalledApp (w http.ResponseWriter , r * http.Request )
5452 DeployBulk (w http.ResponseWriter , r * http.Request )
5553 CheckAppExists (w http.ResponseWriter , r * http.Request )
5654 DefaultComponentInstallation (w http.ResponseWriter , r * http.Request )
5755 FetchAppDetailsForInstalledApp (w http.ResponseWriter , r * http.Request )
5856}
5957
6058type InstalledAppRestHandlerImpl struct {
61- Logger * zap.SugaredLogger
62- userAuthService user.UserService
63- enforcer casbin.Enforcer
64- enforcerUtil rbac.EnforcerUtil
65- installedAppService appStore.InstalledAppService
66- validator * validator.Validate
67- clusterService cluster.ClusterService
68- acdServiceClient application.ServiceClient
59+ Logger * zap.SugaredLogger
60+ userAuthService user.UserService
61+ enforcer casbin.Enforcer
62+ enforcerUtil rbac.EnforcerUtil
63+ installedAppService appStore.InstalledAppService
64+ validator * validator.Validate
65+ clusterService cluster.ClusterService
66+ acdServiceClient application.ServiceClient
67+ appStoreDeploymentService appStoreDeployment.AppStoreDeploymentService
6968}
7069
7170func NewInstalledAppRestHandlerImpl (Logger * zap.SugaredLogger , userAuthService user.UserService ,
7271 enforcer casbin.Enforcer , enforcerUtil rbac.EnforcerUtil , installedAppService appStore.InstalledAppService ,
7372 validator * validator.Validate , clusterService cluster.ClusterService , acdServiceClient application.ServiceClient ,
73+ appStoreDeploymentService appStoreDeployment.AppStoreDeploymentService ,
7474) * InstalledAppRestHandlerImpl {
7575 return & InstalledAppRestHandlerImpl {
76- Logger : Logger ,
77- userAuthService : userAuthService ,
78- enforcer : enforcer ,
79- enforcerUtil : enforcerUtil ,
80- installedAppService : installedAppService ,
81- validator : validator ,
82- clusterService : clusterService ,
83- acdServiceClient : acdServiceClient ,
76+ Logger : Logger ,
77+ userAuthService : userAuthService ,
78+ enforcer : enforcer ,
79+ enforcerUtil : enforcerUtil ,
80+ installedAppService : installedAppService ,
81+ validator : validator ,
82+ clusterService : clusterService ,
83+ acdServiceClient : acdServiceClient ,
84+ appStoreDeploymentService : appStoreDeploymentService ,
8485 }
8586}
8687
87- func (handler InstalledAppRestHandlerImpl ) CreateInstalledApp (w http.ResponseWriter , r * http.Request ) {
88- decoder := json .NewDecoder (r .Body )
89- userId , err := handler .userAuthService .GetLoggedInUser (r )
90- if userId == 0 || err != nil {
91- common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
92- return
93- }
94- var request appStoreBean.InstallAppVersionDTO
95-
96- err = decoder .Decode (& request )
97- if err != nil {
98- handler .Logger .Errorw ("request err, CreateInstalledApp" , "err" , err , "payload" , request )
99- common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
100- return
101- }
102- err = handler .validator .Struct (request )
103- if err != nil {
104- handler .Logger .Errorw ("validation err, CreateInstalledApp" , "err" , err , "payload" , request )
105- common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
106- return
107- }
108- token := r .Header .Get ("token" )
109- //rbac block starts from here
110- object := handler .enforcerUtil .GetHelmObjectByAppNameAndEnvId (request .AppName , request .EnvironmentId )
111- if ok := handler .enforcer .Enforce (token , casbin .ResourceHelmApp , casbin .ActionCreate , object ); ! ok {
112- common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), nil , http .StatusForbidden )
113- return
114- }
115- //rback block ends here
116-
117- isChartRepoActive , err := handler .installedAppService .IsChartRepoActive (request .AppStoreVersion )
118- if err != nil {
119- handler .Logger .Errorw ("service err, CreateInstalledApp" , "err" , err , "payload" , request )
120- common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
121- return
122- }
123- if ! isChartRepoActive {
124- common .WriteJsonResp (w , fmt .Errorf ("chart repo is disabled" ), nil , http .StatusNotAcceptable )
125- return
126- }
127-
128- request .UserId = userId
129- handler .Logger .Infow ("request payload, CreateInstalledApp" , "payload" , request )
130- ctx , cancel := context .WithCancel (r .Context ())
131- if cn , ok := w .(http.CloseNotifier ); ok {
132- go func (done <- chan struct {}, closed <- chan bool ) {
133- select {
134- case <- done :
135- case <- closed :
136- cancel ()
137- }
138- }(ctx .Done (), cn .CloseNotify ())
139- }
140- ctx = context .WithValue (r .Context (), "token" , token )
141- defer cancel ()
142- res , err := handler .installedAppService .CreateInstalledAppV2 (& request , ctx )
143- if err != nil {
144- if strings .Contains (err .Error (), "application spec is invalid" ) {
145- err = & util.ApiError {Code : "400" , HttpStatusCode : 400 , UserMessage : "application spec is invalid, please check provided chart values" }
146- }
147- handler .Logger .Errorw ("service err, CreateInstalledApp" , "err" , err , "payload" , request )
148- common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
149- return
150- }
151- common .WriteJsonResp (w , err , res , http .StatusOK )
152- }
153-
15488func (handler InstalledAppRestHandlerImpl ) UpdateInstalledApp (w http.ResponseWriter , r * http.Request ) {
15589 decoder := json .NewDecoder (r .Body )
15690 userId , err := handler .userAuthService .GetLoggedInUser (r )
@@ -173,7 +107,7 @@ func (handler InstalledAppRestHandlerImpl) UpdateInstalledApp(w http.ResponseWri
173107 }
174108 token := r .Header .Get ("token" )
175109 handler .Logger .Infow ("request payload, UpdateInstalledApp" , "payload" , request )
176- installedApp , err := handler .installedAppService .GetInstalledApp (request .InstalledAppId )
110+ installedApp , err := handler .appStoreDeploymentService .GetInstalledApp (request .InstalledAppId )
177111 if err != nil {
178112 handler .Logger .Errorw ("service err, UpdateInstalledApp" , "err" , err , "payload" , request )
179113 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
@@ -309,43 +243,6 @@ func (handler InstalledAppRestHandlerImpl) GetAllInstalledApp(w http.ResponseWri
309243 common .WriteJsonResp (w , err , res , http .StatusOK )
310244}
311245
312- func (handler InstalledAppRestHandlerImpl ) GetInstalledAppsByAppStoreId (w http.ResponseWriter , r * http.Request ) {
313- userId , err := handler .userAuthService .GetLoggedInUser (r )
314- if userId == 0 || err != nil {
315- common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
316- return
317- }
318-
319- vars := mux .Vars (r )
320- appStoreId , err := strconv .Atoi (vars ["appStoreId" ])
321- if err != nil {
322- handler .Logger .Errorw ("request err, GetInstalledAppsByAppStoreId" , "err" , err , "appStoreId" , appStoreId )
323- common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
324- return
325- }
326- token := r .Header .Get ("token" )
327- handler .Logger .Infow ("request payload, GetInstalledAppsByAppStoreId" , "appStoreId" , appStoreId )
328- res , err := handler .installedAppService .GetAllInstalledAppsByAppStoreId (w , r , token , appStoreId )
329- if err != nil {
330- handler .Logger .Errorw ("service err, GetInstalledAppsByAppStoreId" , "err" , err , "appStoreId" , appStoreId )
331- common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
332- return
333- }
334-
335- var installedAppsResponse []appStoreBean.InstalledAppsResponse
336- for _ , app := range res {
337- //rbac block starts from here
338- object := handler .enforcerUtil .GetHelmObjectByAppNameAndEnvId (app .AppName , app .EnvironmentId )
339- if ok := handler .enforcer .Enforce (token , casbin .ResourceHelmApp , casbin .ActionGet , object ); ! ok {
340- continue
341- }
342- //rback block ends here
343- installedAppsResponse = append (installedAppsResponse , app )
344- }
345-
346- common .WriteJsonResp (w , err , installedAppsResponse , http .StatusOK )
347- }
348-
349246func (handler InstalledAppRestHandlerImpl ) GetInstalledAppVersion (w http.ResponseWriter , r * http.Request ) {
350247 userId , err := handler .userAuthService .GetLoggedInUser (r )
351248 if userId == 0 || err != nil {
@@ -379,72 +276,6 @@ func (handler InstalledAppRestHandlerImpl) GetInstalledAppVersion(w http.Respons
379276 common .WriteJsonResp (w , err , dto , http .StatusOK )
380277}
381278
382- func (handler InstalledAppRestHandlerImpl ) DeleteInstalledApp (w http.ResponseWriter , r * http.Request ) {
383- userId , err := handler .userAuthService .GetLoggedInUser (r )
384- if userId == 0 || err != nil {
385- common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
386- return
387- }
388- vars := mux .Vars (r )
389- installAppId , err := strconv .Atoi (vars ["id" ])
390- if err != nil {
391- handler .Logger .Errorw ("request err, DeleteInstalledApp" , "err" , err , "installAppId" , installAppId )
392- common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
393- return
394- }
395-
396- v := r .URL .Query ()
397- forceDelete := false
398- force := v .Get ("force" )
399- if len (force ) > 0 {
400- forceDelete , err = strconv .ParseBool (force )
401- if err != nil {
402- handler .Logger .Errorw ("request err, DeleteInstalledApp" , "err" , err , "installAppId" , installAppId )
403- common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
404- return
405- }
406- }
407- handler .Logger .Infow ("request payload, DeleteInstalledApp" , "installAppId" , installAppId )
408- token := r .Header .Get ("token" )
409- //rbac block starts from here
410- installedApp , err := handler .installedAppService .GetInstalledApp (installAppId )
411- if err != nil {
412- handler .Logger .Error (err )
413- common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
414- return
415- }
416- object := handler .enforcerUtil .GetHelmObjectByAppNameAndEnvId (installedApp .AppName , installedApp .EnvironmentId )
417- if ok := handler .enforcer .Enforce (token , casbin .ResourceHelmApp , casbin .ActionDelete , object ); ! ok {
418- common .WriteJsonResp (w , fmt .Errorf ("unauthorized user" ), nil , http .StatusForbidden )
419- return
420- }
421- //rback block ends here
422- request := appStoreBean.InstallAppVersionDTO {}
423- request .InstalledAppId = installAppId
424- request .AppId = installedApp .AppId
425- request .EnvironmentId = installedApp .EnvironmentId
426- request .UserId = userId
427- request .ForceDelete = forceDelete
428- ctx , cancel := context .WithCancel (r .Context ())
429- if cn , ok := w .(http.CloseNotifier ); ok {
430- go func (done <- chan struct {}, closed <- chan bool ) {
431- select {
432- case <- done :
433- case <- closed :
434- cancel ()
435- }
436- }(ctx .Done (), cn .CloseNotify ())
437- }
438- ctx = context .WithValue (r .Context (), "token" , token )
439- res , err := handler .installedAppService .DeleteInstalledApp (ctx , & request )
440- if err != nil {
441- handler .Logger .Errorw ("service err, DeleteInstalledApp" , "err" , err , "installAppId" , installAppId )
442- common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
443- return
444- }
445- common .WriteJsonResp (w , err , res , http .StatusOK )
446- }
447-
448279func (handler * InstalledAppRestHandlerImpl ) DeployBulk (w http.ResponseWriter , r * http.Request ) {
449280 userId , err := handler .userAuthService .GetLoggedInUser (r )
450281 if userId == 0 || err != nil {
@@ -477,7 +308,7 @@ func (handler *InstalledAppRestHandlerImpl) DeployBulk(w http.ResponseWriter, r
477308 //RBAC block ends here
478309
479310 for _ , item := range request .ChartGroupInstallChartRequest {
480- isChartRepoActive , err := handler .installedAppService .IsChartRepoActive (item .AppStoreVersion )
311+ isChartRepoActive , err := handler .appStoreDeploymentService .IsChartRepoActive (item .AppStoreVersion )
481312 if err != nil {
482313 handler .Logger .Errorw ("service err, CreateInstalledApp" , "err" , err , "payload" , request )
483314 common .WriteJsonResp (w , err , nil , http .StatusInternalServerError )
0 commit comments