代码拉取完成,页面将自动刷新
package process_admin
import (
"encoding/json"
"fmt"
"io"
"mime"
"net/http"
"gitee.com/meng_mengs_boys/eosc"
"gitee.com/meng_mengs_boys/eosc/log"
open_api "gitee.com/meng_mengs_boys/eosc/open-api"
"github.com/julienschmidt/httprouter"
)
type ExtenderOpenApi struct {
extenders *ExtenderData
}
func NewExtenderOpenApi(extenders *ExtenderData) *ExtenderOpenApi {
return &ExtenderOpenApi{extenders: extenders}
}
func (oe *ExtenderOpenApi) Register(router *httprouter.Router) {
router.Handle(http.MethodGet, "/extender", open_api.CreateHandleFunc(oe.List))
router.Handle(http.MethodGet, "/extender/:id", open_api.CreateHandleFunc(oe.Info))
router.Handle(http.MethodGet, "/extender/:id/:name", open_api.CreateHandleFunc(oe.Render))
router.Handle(http.MethodPut, "/extender", open_api.CreateHandleFunc(oe.SET))
router.Handle(http.MethodPost, "/extender", open_api.CreateHandleFunc(oe.SET))
router.Handle(http.MethodDelete, "/extender/:id", open_api.CreateHandleFunc(oe.Delete))
}
func (oe *ExtenderOpenApi) Delete(r *http.Request, params httprouter.Params) (status int, header http.Header, events []*open_api.EventResponse, body interface{}) {
id := params.ByName("id")
group, project := readProject(id)
version := r.URL.Query().Get("v")
projectInfo, err := oe.extenders.Delete(group, project, version)
if err != nil {
return 0, nil, nil, err.Error()
}
return 200, nil, []*open_api.EventResponse{{
Event: eosc.EventDel,
Namespace: eosc.NamespaceExtender,
Key: id,
Data: nil,
}}, projectInfo.toInfo()
}
func (oe *ExtenderOpenApi) SET(r *http.Request, params httprouter.Params) (status int, header http.Header, events []*open_api.EventResponse, body interface{}) {
mediaType, _, err := mime.ParseMediaType(r.Header.Get("Content-Type"))
log.Debug("Content-Type:", r.Header.Get("Content-Type"))
log.Debug("mediaType:", mediaType, err)
if err != nil {
return http.StatusInternalServerError, nil, nil, fmt.Sprintf("Content-Type must application/json")
}
if mediaType != "application/json" {
return http.StatusInternalServerError, nil, nil, fmt.Sprintf("Content-Type must application/json")
}
data, err := io.ReadAll(r.Body)
if err != nil {
log.Debug(err)
return http.StatusInternalServerError, nil, nil, err.Error()
}
r.Body.Close()
log.Debug("body:", string(data))
type ParamSet struct {
Group string `json:"group"`
Project string `json:"project"`
Version string `json:"version"`
}
p := new(ParamSet)
err = json.Unmarshal(data, p)
if err != nil {
log.Debug(err)
return http.StatusInternalServerError, nil, nil, err.Error()
}
log.Debug(p)
projectInfo, ok, err := oe.extenders.SetVersion(p.Group, p.Project, p.Version)
if err != nil {
log.Debug(err)
return http.StatusInternalServerError, nil, nil, err.Error()
}
if ok {
return 200, nil, []*open_api.EventResponse{{
Event: eosc.EventSet,
Namespace: eosc.NamespaceExtender,
Key: fmt.Sprint(p.Group, ":", p.Project),
Data: []byte(p.Version),
}}, projectInfo.toInfo()
} else {
return 200, nil, nil, projectInfo.toInfo()
}
}
func (oe *ExtenderOpenApi) List(r *http.Request, params httprouter.Params) (status int, header http.Header, events []*open_api.EventResponse, body interface{}) {
return 200, nil, nil, oe.extenders.List()
}
func (oe *ExtenderOpenApi) Info(r *http.Request, params httprouter.Params) (status int, header http.Header, events []*open_api.EventResponse, body interface{}) {
id := params.ByName("id")
info, ok := oe.extenders.GetInfo(readProject(id))
if !ok {
return 404, nil, nil, fmt.Sprintf("extender{%s} not install", id)
}
return 200, nil, nil, info
}
func (oe *ExtenderOpenApi) Render(r *http.Request, params httprouter.Params) (status int, header http.Header, events []*open_api.EventResponse, body interface{}) {
id := params.ByName("id")
name := params.ByName("name")
group, project := readProject(id)
info, ok := oe.extenders.GetRender(group, project, name)
if !ok {
return 404, nil, nil, fmt.Sprintf("extender{%s} not install", id)
}
if info.Render == nil {
return http.StatusServiceUnavailable, nil, nil, fmt.Sprintf("extender{%s:%s:%s} not work", group, project, name)
}
return 200, nil, nil, info
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。