/* * Copyright 2024 the KubeSphere Authors. * Please refer to the LICENSE file in the root directory of the project. * https://github.com/kubesphere/kubesphere/blob/master/LICENSE */ package runtime import ( "strings" "github.com/emicklei/go-restful/v3" "k8s.io/apimachinery/pkg/runtime/schema" ) const ( ApiRootPath = "/kapis" ) // Container holds all webservice of apiserver var Container = restful.NewContainer() type ContainerBuilder []func(c *restful.Container) error const MimeMergePatchJson = "application/merge-patch+json" const MimeJsonPatchJson = "application/json-patch+json" const MimeMultipartFormData = "multipart/form-data" func init() { restful.RegisterEntityAccessor(MimeMergePatchJson, restful.NewEntityAccessorJSON(restful.MIME_JSON)) restful.RegisterEntityAccessor(MimeJsonPatchJson, restful.NewEntityAccessorJSON(restful.MIME_JSON)) } func NewWebService(gv schema.GroupVersion) *restful.WebService { webservice := restful.WebService{} // the GroupVersion might be empty, we need to remove the final / webservice.Path(strings.TrimRight(ApiRootPath+"/"+gv.String(), "/")). Produces(restful.MIME_JSON) return &webservice } func (cb *ContainerBuilder) AddToContainer(c *restful.Container) error { for _, f := range *cb { if err := f(c); err != nil { return err } } return nil } func (cb *ContainerBuilder) Register(funcs ...func(*restful.Container) error) { for _, f := range funcs { *cb = append(*cb, f) } }