(req *common.HttpKnockRequest, res *common.ResourceData)
| 322 | } |
| 323 | |
| 324 | func (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 | } |
no test coverage detected