@@ -89,9 +89,10 @@ type K8sApplicationRestHandlerImpl struct {
89
89
helmAppService client.HelmAppService
90
90
userService user.UserService
91
91
k8sCommonService k8s.K8sCommonService
92
+ terminalEnvVariables * util.TerminalEnvVariables
92
93
}
93
94
94
- func NewK8sApplicationRestHandlerImpl (logger * zap.SugaredLogger , k8sApplicationService application2.K8sApplicationService , pump connector.Pump , terminalSessionHandler terminal.TerminalSessionHandler , enforcer casbin.Enforcer , enforcerUtilHelm rbac.EnforcerUtilHelm , enforcerUtil rbac.EnforcerUtil , helmAppService client.HelmAppService , userService user.UserService , k8sCommonService k8s.K8sCommonService , validator * validator.Validate ) * K8sApplicationRestHandlerImpl {
95
+ func NewK8sApplicationRestHandlerImpl (logger * zap.SugaredLogger , k8sApplicationService application2.K8sApplicationService , pump connector.Pump , terminalSessionHandler terminal.TerminalSessionHandler , enforcer casbin.Enforcer , enforcerUtilHelm rbac.EnforcerUtilHelm , enforcerUtil rbac.EnforcerUtil , helmAppService client.HelmAppService , userService user.UserService , k8sCommonService k8s.K8sCommonService , validator * validator.Validate , envVariables * util. EnvironmentVariables ) * K8sApplicationRestHandlerImpl {
95
96
return & K8sApplicationRestHandlerImpl {
96
97
logger : logger ,
97
98
k8sApplicationService : k8sApplicationService ,
@@ -104,6 +105,7 @@ func NewK8sApplicationRestHandlerImpl(logger *zap.SugaredLogger, k8sApplicationS
104
105
helmAppService : helmAppService ,
105
106
userService : userService ,
106
107
k8sCommonService : k8sCommonService ,
108
+ terminalEnvVariables : envVariables .TerminalEnvVariables ,
107
109
}
108
110
}
109
111
@@ -820,6 +822,17 @@ func (handler *K8sApplicationRestHandlerImpl) requestValidationAndRBAC(w http.Re
820
822
}
821
823
}
822
824
825
+ func (handler * K8sApplicationRestHandlerImpl ) restrictTerminalAccessForNonSuperUsers (w http.ResponseWriter , token string ) bool {
826
+ // if RESTRICT_TERMINAL_ACCESS_FOR_NON_SUPER_USER is set to true, only super admins can access terminal/ephemeral containers
827
+ if handler .terminalEnvVariables .RestrictTerminalAccessForNonSuperUser {
828
+ if isSuperAdmin := handler .enforcer .Enforce (token , casbin .ResourceGlobal , casbin .ActionGet , "*" ); ! isSuperAdmin {
829
+ common .WriteJsonResp (w , errors .New ("unauthorized, only super-admins can access terminal" ), nil , http .StatusForbidden )
830
+ return true
831
+ }
832
+ }
833
+ return false
834
+ }
835
+
823
836
func (handler * K8sApplicationRestHandlerImpl ) GetTerminalSession (w http.ResponseWriter , r * http.Request ) {
824
837
token := r .Header .Get ("token" )
825
838
userId , err := handler .userService .GetLoggedInUser (r )
@@ -836,6 +849,11 @@ func (handler *K8sApplicationRestHandlerImpl) GetTerminalSession(w http.Response
836
849
return
837
850
}
838
851
request .ExternalArgoApplicationName = vars .Get ("externalArgoApplicationName" )
852
+ // check for super admin
853
+ restricted := handler .restrictTerminalAccessForNonSuperUsers (w , token )
854
+ if restricted {
855
+ return
856
+ }
839
857
if resourceRequestBean .AppIdentifier != nil {
840
858
// RBAC enforcer applying For Helm App
841
859
rbacObject , rbacObject2 := handler .enforcerUtilHelm .GetHelmObjectByClusterIdNamespaceAndAppName (resourceRequestBean .AppIdentifier .ClusterId , resourceRequestBean .AppIdentifier .Namespace , resourceRequestBean .AppIdentifier .ReleaseName )
@@ -1013,6 +1031,7 @@ func (handler *K8sApplicationRestHandlerImpl) verifyRbacForCluster(token string,
1013
1031
}
1014
1032
1015
1033
func (handler * K8sApplicationRestHandlerImpl ) CreateEphemeralContainer (w http.ResponseWriter , r * http.Request ) {
1034
+ token := r .Header .Get ("token" )
1016
1035
userId , err := handler .userService .GetLoggedInUser (r )
1017
1036
if userId == 0 || err != nil {
1018
1037
common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
@@ -1034,6 +1053,11 @@ func (handler *K8sApplicationRestHandlerImpl) CreateEphemeralContainer(w http.Re
1034
1053
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
1035
1054
return
1036
1055
}
1056
+ // check for super admin
1057
+ restricted := handler .restrictTerminalAccessForNonSuperUsers (w , token )
1058
+ if restricted {
1059
+ return
1060
+ }
1037
1061
//rbac applied in below function
1038
1062
resourceRequestBean := handler .handleEphemeralRBAC (request .PodName , request .Namespace , w , r )
1039
1063
if resourceRequestBean == nil {
@@ -1057,6 +1081,7 @@ func (handler *K8sApplicationRestHandlerImpl) CreateEphemeralContainer(w http.Re
1057
1081
}
1058
1082
1059
1083
func (handler * K8sApplicationRestHandlerImpl ) DeleteEphemeralContainer (w http.ResponseWriter , r * http.Request ) {
1084
+ token := r .Header .Get ("token" )
1060
1085
userId , err := handler .userService .GetLoggedInUser (r )
1061
1086
if userId == 0 || err != nil {
1062
1087
common .WriteJsonResp (w , err , "Unauthorized User" , http .StatusUnauthorized )
@@ -1078,6 +1103,11 @@ func (handler *K8sApplicationRestHandlerImpl) DeleteEphemeralContainer(w http.Re
1078
1103
common .WriteJsonResp (w , err , nil , http .StatusBadRequest )
1079
1104
return
1080
1105
}
1106
+ // check for super admin
1107
+ restricted := handler .restrictTerminalAccessForNonSuperUsers (w , token )
1108
+ if restricted {
1109
+ return
1110
+ }
1081
1111
//rbac applied in below function
1082
1112
resourceRequestBean := handler .handleEphemeralRBAC (request .PodName , request .Namespace , w , r )
1083
1113
if resourceRequestBean == nil {
0 commit comments