111 lines
2.3 KiB
Go
111 lines
2.3 KiB
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"gitea.cdlsxd.cn/sdk/plugin/dctw/v1/api/direct"
|
|
"gitea.cdlsxd.cn/sdk/plugin/proto"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// 插件通信信息,若不对应则会报错panic
|
|
const (
|
|
Tag = "zltx_v1"
|
|
Version = 1
|
|
CookieKey = "zltx_v1"
|
|
CookieValue = "zltx_v1"
|
|
)
|
|
|
|
type ZLTXV1Service struct{}
|
|
|
|
func (p *ZLTXV1Service) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
|
|
c, err := transConfig(request.Config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
server, err := c.server()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
req, err := c.orderReq(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
a := &direct.Direct{DctWServer: server}
|
|
resp, err := a.Order(ctx, req)
|
|
if err != nil {
|
|
if proto.IsResponseFail(err) {
|
|
return &proto.OrderResponse{Result: Result(err.Error())}, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
if !resp.GetCode().IsSuccess() {
|
|
return nil, proto.ErrorRequestFail(resp.Message)
|
|
}
|
|
|
|
return orderResp(request, resp), nil
|
|
}
|
|
|
|
func (p *ZLTXV1Service) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
|
|
c, err := transConfig(request.Config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
server, err := c.server()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
a := &direct.Direct{DctWServer: server}
|
|
resp, err := a.Query(ctx, c.queryReq(request))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !resp.GetCode().IsSuccess() {
|
|
return nil, proto.ErrorRequestFail(resp.Message)
|
|
}
|
|
|
|
return queryResp(request, resp)
|
|
}
|
|
|
|
func (p *ZLTXV1Service) Notify(ctx context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) {
|
|
c, err := transConfig(request.Config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
server, err := c.server()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
httpHeaders := make(http.Header)
|
|
if err = json.Unmarshal(request.Headers, &httpHeaders); err != nil {
|
|
return nil, proto.ErrorParamFail(fmt.Sprintf("headers Unmarshal err [%v]", err))
|
|
}
|
|
newHeaders := make(http.Header)
|
|
for key, values := range httpHeaders {
|
|
newHeaders[key] = values
|
|
}
|
|
|
|
req := &http.Request{
|
|
Header: newHeaders,
|
|
Body: io.NopCloser(bytes.NewBuffer(request.Body)),
|
|
}
|
|
|
|
a := &direct.Direct{DctWServer: server}
|
|
resp, err := a.Notify(ctx, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return notifyResp(resp)
|
|
}
|