MCPcopy
hub / github.com/OpenNHP/opennhp / handleHttpOpenResource

Method handleHttpOpenResource

endpoints/server/httpserver.go:324–439  ·  view source on GitHub ↗
(req *common.HttpKnockRequest, res *common.ResourceData)

Source from the content-addressed store, hash-verified

322}
323
324func (hs *HttpServer) handleHttpOpenResource(req *common.HttpKnockRequest, res *common.ResourceData) (ack *common.ServerKnockAckMsg, err error) {
325 defer hs.wg.Done()
326 hs.wg.Add(1)
327 s := hs.udpServer
328 srcIp := req.SrcIp
329
330 knkMsg := &common.AgentKnockMsg{
331 UserId: req.UserId,
332 DeviceId: req.DeviceId,
333 OrganizationId: req.OrganizationId,
334 AuthServiceId: req.AuthServiceId,
335 ResourceId: res.ResourceId,
336 }
337
338 if req.Command == "exit" {
339 knkMsg.HeaderType = core.NHP_EXT
340 }
341
342 ackMsg := &common.ServerKnockAckMsg{
343 AuthProviderToken: req.Token,
344 AgentAddr: srcIp,
345 OpenTime: res.OpenTime,
346 }
347
348 if len(res.Resources) == 0 {
349 err = common.ErrResourceNotFound
350 ackMsg.ErrCode = common.ErrResourceNotFound.ErrorCode()
351 ackMsg.ErrMsg = err.Error()
352 return
353 }
354
355 // PART II: determine knock src ip address and resource dst ip addresses
356 srcAddr := &common.NetAddress{Ip: srcIp}
357
358 acDstIpMap := make(map[string][]*common.NetAddress)
359 for resName, info := range res.Resources {
360 addrs, exist := acDstIpMap[resName]
361 if exist {
362 addrs = append(addrs, info.Addr)
363 acDstIpMap[resName] = addrs
364 } else {
365 acDstIpMap[resName] = []*common.NetAddress{info.Addr}
366 }
367 }
368
369 // PART III: request ac operation for each resource and block for response
370 var acWg sync.WaitGroup
371 var artMsgsMutex sync.Mutex
372 artMsgs := make(map[string]*common.ACOpsResultMsg)
373 ackMsg.ResourceHost = make(map[string]string)
374 ackMsg.ACTokens = make(map[string]string)
375 ackMsg.PreAccessActions = make(map[string]*common.PreAccessInfo)
376
377 for resName, addrs := range acDstIpMap {
378 resInfo := res.Resources[resName]
379 if resInfo == nil {
380 continue
381 }

Callers 1

NewHttpServerHelperMethod · 0.95

Calls 5

processACOperationMethod · 0.80
DestHostMethod · 0.80
AddMethod · 0.65
ErrorCodeMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected