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

Method HandleKnockRequest

endpoints/server/nhpauth.go:14–129  ·  view source on GitHub ↗

HandleKnockRequest Server will respond with success or error with NHP_ACK message

(ppd *core.PacketParserData)

Source from the content-addressed store, hash-verified

12// HandleKnockRequest
13// Server will respond with success or error with NHP_ACK message
14func (s *UdpServer) HandleKnockRequest(ppd *core.PacketParserData) (err error) {
15 defer s.wg.Done()
16 s.wg.Add(1)
17
18 transactionId := ppd.SenderTrxId
19 // For relay-forwarded connections, use the real client address
20 // (the browser behind the relay) for auth and logging.
21 clientAddr := ppd.ConnData.RemoteAddr
22 if ppd.ConnData.RealRemoteAddr != nil {
23 clientAddr = ppd.ConnData.RealRemoteAddr
24 }
25 addrStr := clientAddr.String()
26 knkMsg := &common.AgentKnockMsg{}
27 dhpKnkMsg := &common.DHPKnockMsg{}
28 ackMsg := &common.ServerKnockAckMsg{
29 AgentAddr: addrStr, // optional, to tell agent its own outwards ip address
30 }
31 dhpAckMsg := &common.ServerDHPKnockAckMsg{
32 OpenTime: 30, // currently, use fixed value, unit is seconds.
33 }
34
35 func() {
36 // parse knockMsg
37 if ppd.HeaderType == core.DHP_KNK { // dhp knock
38 err = json.Unmarshal(ppd.BodyMessage, dhpKnkMsg)
39 } else {
40 err = json.Unmarshal(ppd.BodyMessage, knkMsg)
41 }
42
43 if err != nil {
44 log.Error("server-agent(#%d@%s)[HandleKnockRequest] failed to parse %s message: %v", transactionId, addrStr, core.HeaderTypeToString(ppd.HeaderType), err)
45 ackMsg.ErrCode = common.ErrJsonParseFailed.ErrorCode()
46 ackMsg.ErrMsg = err.Error()
47 return
48 }
49
50 // dhp knock
51 if ppd.HeaderType == core.DHP_KNK {
52 log.Info("server-agent(%s#%d@%s)[HandleKnockRequest] start to verify evidence for dhp knock", knkMsg.UserId, transactionId, addrStr)
53 if s.AppraiseEvidence(dhpKnkMsg.Evidence) {
54 dhpAckMsg.ErrCode = common.ErrSuccess.ErrorCode()
55 } else {
56 dhpAckMsg.ErrCode = common.ErrEvidenceAppraisalFailed.ErrorCode()
57 }
58 return
59 }
60
61 // determine knock type
62 knkMsg.HeaderType = ppd.HeaderType
63
64 // find out auth service provider
65 aspData := s.FindAuthSvcProvider(knkMsg.AuthServiceId)
66 if aspData == nil {
67 err = common.ErrAuthServiceProviderNotFound
68 ackMsg.ErrCode = common.ErrAuthServiceProviderNotFound.ErrorCode()
69 ackMsg.ErrMsg = err.Error()
70 return
71 }

Callers 1

recvMessageRoutineMethod · 0.95

Calls 10

AppraiseEvidenceMethod · 0.95
FindAuthSvcProviderMethod · 0.95
FindPluginHandlerMethod · 0.95
NewNhpServerHelperMethod · 0.95
FindRemoteTransactionMethod · 0.80
AddMethod · 0.65
ErrorMethod · 0.65
ErrorCodeMethod · 0.65
AuthWithNHPMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected