57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
/*
|
|
* 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)
|
|
}
|
|
}
|