fix tenant resource list API

Signed-off-by: hongming <talonwan@yunify.com>
This commit is contained in:
hongming
2020-07-30 11:48:55 +08:00
parent b71ce47788
commit 13ffbe8968
2 changed files with 52 additions and 24 deletions

View File

@@ -5,6 +5,7 @@ import (
"github.com/emicklei/go-restful"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apiserver/pkg/authentication/user"
"k8s.io/client-go/kubernetes"
"k8s.io/klog"
"kubesphere.io/kubesphere/pkg/api"
@@ -56,9 +57,10 @@ func (h *tenantHandler) ListWorkspaces(req *restful.Request, resp *restful.Respo
}
func (h *tenantHandler) ListFederatedNamespaces(req *restful.Request, resp *restful.Response) {
user, ok := request.UserFrom(req.Request.Context())
workspace := req.PathParameter("workspace")
queryParam := query.ParseQueryParameter(req)
workspaceMember, ok := request.UserFrom(req.Request.Context())
if !ok {
err := fmt.Errorf("cannot obtain user info")
klog.Errorln(err)
@@ -66,10 +68,7 @@ func (h *tenantHandler) ListFederatedNamespaces(req *restful.Request, resp *rest
return
}
workspace := req.PathParameter("workspace")
result, err := h.tenant.ListFederatedNamespaces(user, workspace, queryParam)
result, err := h.tenant.ListFederatedNamespaces(workspaceMember, workspace, queryParam)
if err != nil {
api.HandleInternalError(resp, nil, err)
return
@@ -79,20 +78,26 @@ func (h *tenantHandler) ListFederatedNamespaces(req *restful.Request, resp *rest
}
func (h *tenantHandler) ListNamespaces(req *restful.Request, resp *restful.Response) {
user, ok := request.UserFrom(req.Request.Context())
workspace := req.PathParameter("workspace")
queryParam := query.ParseQueryParameter(req)
if !ok {
err := fmt.Errorf("cannot obtain user info")
klog.Errorln(err)
api.HandleForbidden(resp, nil, err)
return
var workspaceMember user.Info
if username := req.PathParameter("workspacemember"); username != "" {
workspaceMember = &user.DefaultInfo{
Name: username,
}
} else {
requestUser, ok := request.UserFrom(req.Request.Context())
if !ok {
err := fmt.Errorf("cannot obtain user info")
klog.Errorln(err)
api.HandleForbidden(resp, nil, err)
return
}
workspaceMember = requestUser
}
workspace := req.PathParameter("workspace")
result, err := h.tenant.ListNamespaces(user, workspace, queryParam)
result, err := h.tenant.ListNamespaces(workspaceMember, workspace, queryParam)
if err != nil {
api.HandleInternalError(resp, nil, err)
return
@@ -102,19 +107,26 @@ func (h *tenantHandler) ListNamespaces(req *restful.Request, resp *restful.Respo
}
func (h *tenantHandler) ListDevOpsProjects(req *restful.Request, resp *restful.Response) {
user, ok := request.UserFrom(req.Request.Context())
workspace := req.PathParameter("workspace")
queryParam := query.ParseQueryParameter(req)
if !ok {
err := fmt.Errorf("cannot obtain user info")
klog.Errorln(err)
api.HandleForbidden(resp, nil, err)
return
var workspaceMember user.Info
if username := req.PathParameter("workspacemember"); username != "" {
workspaceMember = &user.DefaultInfo{
Name: username,
}
} else {
requestUser, ok := request.UserFrom(req.Request.Context())
if !ok {
err := fmt.Errorf("cannot obtain user info")
klog.Errorln(err)
api.HandleForbidden(resp, nil, err)
return
}
workspaceMember = requestUser
}
workspace := req.PathParameter("workspace")
result, err := h.tenant.ListDevOpsProjects(user, workspace, queryParam)
result, err := h.tenant.ListDevOpsProjects(workspaceMember, workspace, queryParam)
if err != nil {
api.HandleInternalError(resp, nil, err)

View File

@@ -130,6 +130,14 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s
Doc("List the devops projects of the specified workspace for the current user").
Returns(http.StatusOK, api.StatusOK, api.ListResult{}).
Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag}))
ws.Route(ws.GET("/workspaces/{workspace}/workspacemembers/{workspacemember}/devops").
To(handler.ListDevOpsProjects).
Param(ws.PathParameter("workspace", "workspace name")).
Param(ws.PathParameter("workspacemember", "workspacemember username")).
Doc("List the devops projects of specified workspace for the workspace member").
Reads(corev1.Namespace{}).
Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag}))
ws.Route(ws.GET("/workspaces/{workspace}/namespaces/{namespace}").
To(handler.DescribeNamespace).
Param(ws.PathParameter("workspace", "workspace name")).
@@ -149,6 +157,14 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s
Reads(corev1.Namespace{}).
Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag}))
ws.Route(ws.GET("/workspaces/{workspace}/workspacemembers/{workspacemember}/namespaces").
To(handler.ListNamespaces).
Param(ws.PathParameter("workspace", "workspace name")).
Param(ws.PathParameter("workspacemember", "workspacemember username")).
Doc("List the namespaces of the specified workspace for the workspace member").
Reads(corev1.Namespace{}).
Returns(http.StatusOK, api.StatusOK, corev1.Namespace{}).
Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag}))
ws.Route(ws.PUT("/workspaces/{workspace}/namespaces/{namespace}").
To(handler.UpdateNamespace).
Param(ws.PathParameter("workspace", "workspace name")).