-
Notifications
You must be signed in to change notification settings - Fork 129
/
create_tunnel_api_session.go
92 lines (75 loc) · 2.51 KB
/
create_tunnel_api_session.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package handler_edge_ctrl
import (
"github.com/openziti/channel/v2"
"github.com/openziti/ziti/common/pb/edge_ctrl_pb"
"github.com/openziti/ziti/controller/env"
"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
)
type createApiSessionHandler struct {
baseRequestHandler
*TunnelState
}
func NewCreateApiSessionHandler(appEnv *env.AppEnv, ch channel.Channel, tunnelState *TunnelState) channel.TypedReceiveHandler {
return &createApiSessionHandler{
baseRequestHandler: baseRequestHandler{ch: ch, appEnv: appEnv},
TunnelState: tunnelState,
}
}
func (self *createApiSessionHandler) getTunnelState() *TunnelState {
return self.TunnelState
}
func (self *createApiSessionHandler) ContentType() int32 {
return int32(edge_ctrl_pb.ContentType_CreateApiSessionRequestType)
}
func (self *createApiSessionHandler) Label() string {
return "tunnel.create.api_session"
}
func (self *createApiSessionHandler) HandleReceive(msg *channel.Message, _ channel.Channel) {
req := &edge_ctrl_pb.CreateApiSessionRequest{}
if err := proto.Unmarshal(msg.Body, req); err != nil {
logrus.WithField("router", self.ch.Id()).WithError(err).Error("could not unmarshal CreateApiSessionRequest")
return
}
logrus.WithField("router", self.ch.Id()).Debug("create api session request received")
ctx := &createApiSessionRequestContext{
baseTunnelRequestContext: baseTunnelRequestContext{
baseSessionRequestContext: baseSessionRequestContext{handler: self, msg: msg, env: self.appEnv},
},
req: req,
}
go self.createApiSession(ctx)
}
func (self *createApiSessionHandler) createApiSession(ctx *createApiSessionRequestContext) {
if !ctx.loadRouter() {
return
}
ctx.loadIdentity()
ctx.ensureApiSession(ctx.req.ConfigTypes)
ctx.updateIdentityInfo(ctx.req.EnvInfo, ctx.req.SdkInfo)
if ctx.err != nil {
self.returnError(ctx, ctx.err)
return
}
result, err := ctx.getCreateApiSessionResponse()
if err != nil {
self.returnError(ctx, internalError(err))
return
}
body, err := proto.Marshal(result)
if err != nil {
self.returnError(ctx, internalError(err))
return
}
responseMsg := channel.NewMessage(int32(edge_ctrl_pb.ContentType_CreateApiSessionResponseType), body)
responseMsg.ReplyTo(ctx.msg)
if err = self.ch.Send(responseMsg); err != nil {
logrus.WithError(err).Error("failed to send response")
} else {
logrus.WithField("router", self.ch.Id()).Debug("create api session response sent")
}
}
type createApiSessionRequestContext struct {
baseTunnelRequestContext
req *edge_ctrl_pb.CreateApiSessionRequest
}