From e2f5e985f4a8a20eb89db4384e0ab40b23ec0397 Mon Sep 17 00:00:00 2001 From: "Richard T. Carback III" <rick.carback@gmail.com> Date: Fri, 27 Aug 2021 19:30:16 +0000 Subject: [PATCH] Add event reports for auth requests/confirm/etc --- api/utilsInterfaces_test.go | 6 ++++ auth/callback.go | 53 +++++++++++++++++++++++++++-------- auth/confirm.go | 11 ++++++-- auth/request.go | 5 +++- groupChat/utils_test.go | 7 +++++ interfaces/networkManager.go | 1 + keyExchange/utils_test.go | 10 +++++++ network/ephemeral/testutil.go | 7 +++++ network/manager.go | 5 ++++ single/manager_test.go | 7 +++++ ud/register.go | 3 +- 11 files changed, 99 insertions(+), 16 deletions(-) diff --git a/api/utilsInterfaces_test.go b/api/utilsInterfaces_test.go index ad97286b7..566dd9a26 100644 --- a/api/utilsInterfaces_test.go +++ b/api/utilsInterfaces_test.go @@ -82,6 +82,12 @@ type testNetworkManagerGeneric struct { instance *network.Instance sender *gateway.Sender } +type dummyEventMgr struct{} + +func (d *dummyEventMgr) Report(p int, a, b, c string) {} +func (t *testNetworkManagerGeneric) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} /* Below methods built for interface adherence */ func (t *testNetworkManagerGeneric) GetHealthTracker() interfaces.HealthTracker { diff --git a/auth/callback.go b/auth/callback.go index b713ce5ab..4a5fba05b 100644 --- a/auth/callback.go +++ b/auth/callback.go @@ -8,6 +8,7 @@ package auth import ( + "fmt" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" @@ -128,8 +129,11 @@ func (m *Manager) handleRequest(cmixMsg format.Message, return } - jww.INFO.Printf("Received AuthRequest from %s,"+ + events := m.net.GetEventManager() + em := fmt.Sprintf("Received AuthRequest from %s,"+ " msgDigest: %s", partnerID, cmixMsg.Digest()) + jww.INFO.Print(em) + events.Report(1, "Auth", "RequestReceived", em) /*do state edge checks*/ // check if a relationship already exists. @@ -137,8 +141,10 @@ func (m *Manager) handleRequest(cmixMsg format.Message, // confirmation in case there are state issues. // do not store if _, err := m.storage.E2e().GetPartner(partnerID); err == nil { - jww.WARN.Printf("Received Auth request for %s, "+ + em := fmt.Sprintf("Received Auth request for %s, "+ "channel already exists. Ignoring", partnerID) + jww.WARN.Print(em) + events.Report(5, "Auth", "RequestIgnored", em) //exit return } else { @@ -146,17 +152,21 @@ func (m *Manager) handleRequest(cmixMsg format.Message, rType, sr2, _, err := m.storage.Auth().GetRequest(partnerID) if err != nil && !strings.Contains(err.Error(), auth.NoRequest) { // if another error is received, print it and exit - jww.WARN.Printf("Received new Auth request for %s, "+ + em := fmt.Sprintf("Received new Auth request for %s, "+ "internal lookup produced bad result: %+v", partnerID, err) + jww.ERROR.Print(em) + events.Report(10, "Auth", "RequestError", em) return } else { //handle the events where the relationship already exists switch rType { // if this is a duplicate, ignore the message case auth.Receive: - jww.WARN.Printf("Received new Auth request for %s, "+ + em := fmt.Sprintf("Received new Auth request for %s, "+ "is a duplicate", partnerID) + jww.WARN.Print(em) + events.Report(5, "Auth", "DuplicateRequest", em) return // if we sent a request, then automatically confirm // then exit, nothing else needed @@ -167,8 +177,11 @@ func (m *Manager) handleRequest(cmixMsg format.Message, // do the confirmation if err := m.doConfirm(sr2, grp, partnerPubKey, m.storage.E2e().GetDHPrivateKey(), sr2.GetPartnerHistoricalPubKey(), ecrFmt.GetOwnership()); err != nil { - jww.WARN.Printf("Auto Confirmation with %s failed: %s", + em := fmt.Sprintf("Auto Confirmation with %s failed: %s", partnerID, err) + jww.WARN.Print(em) + events.Report(10, "Auth", + "RequestError", em) } //exit return @@ -180,8 +193,10 @@ func (m *Manager) handleRequest(cmixMsg format.Message, facts, msg, err := fact.UnstringifyFactList( string(requestFmt.msgPayload)) if err != nil { - jww.WARN.Printf("failed to parse facts and message "+ + em := fmt.Sprintf("failed to parse facts and message "+ "from Auth Request: %s", err) + jww.WARN.Print(em) + events.Report(10, "Auth", "RequestError", em) return } @@ -197,8 +212,10 @@ func (m *Manager) handleRequest(cmixMsg format.Message, // crash occurs after the store but before the conclusion of the callback //create the auth storage if err = m.storage.Auth().AddReceived(c); err != nil { - jww.WARN.Printf("failed to store contact Auth "+ + em := fmt.Sprintf("failed to store contact Auth "+ "Request: %s", err) + jww.WARN.Print(em) + events.Report(10, "Auth", "RequestError", em) return } @@ -214,10 +231,14 @@ func (m *Manager) handleRequest(cmixMsg format.Message, func (m *Manager) handleConfirm(cmixMsg format.Message, sr *auth.SentRequest, grp *cyclic.Group) { + events := m.net.GetEventManager() + // check if relationship already exists if mgr, err := m.storage.E2e().GetPartner(sr.GetPartner()); mgr != nil || err == nil { - jww.WARN.Printf("Cannot confirm auth for %s, channel already "+ + em := fmt.Sprintf("Cannot confirm auth for %s, channel already "+ "exists.", sr.GetPartner()) + jww.WARN.Print(em) + events.Report(10, "Auth", "ConfirmError", em) m.storage.Auth().Done(sr.GetPartner()) return } @@ -225,7 +246,9 @@ func (m *Manager) handleConfirm(cmixMsg format.Message, sr *auth.SentRequest, // extract the message baseFmt, partnerPubKey, err := handleBaseFormat(cmixMsg, grp) if err != nil { - jww.WARN.Printf("Failed to handle auth confirm: %s", err) + em := fmt.Sprintf("Failed to handle auth confirm: %s", err) + jww.WARN.Print(em) + events.Report(10, "Auth", "ConfirmError", em) m.storage.Auth().Done(sr.GetPartner()) return } @@ -242,16 +265,20 @@ func (m *Manager) handleConfirm(cmixMsg format.Message, sr *auth.SentRequest, cmixMsg.GetMac(), grp) if !success { - jww.WARN.Printf("Received auth confirmation failed its mac " + + em := fmt.Sprintf("Received auth confirmation failed its mac " + "check") + jww.WARN.Print(em) + events.Report(10, "Auth", "ConfirmError", em) m.storage.Auth().Done(sr.GetPartner()) return } ecrFmt, err := unmarshalEcrFormat(payload) if err != nil { - jww.WARN.Printf("Failed to unmarshal auth confirmation's "+ + em := fmt.Sprintf("Failed to unmarshal auth confirmation's "+ "encrypted payload: %s", err) + jww.WARN.Print(em) + events.Report(10, "Auth", "ConfirmError", em) m.storage.Auth().Done(sr.GetPartner()) return } @@ -259,7 +286,9 @@ func (m *Manager) handleConfirm(cmixMsg format.Message, sr *auth.SentRequest, // finalize the confirmation if err := m.doConfirm(sr, grp, partnerPubKey, sr.GetMyPrivKey(), sr.GetPartnerHistoricalPubKey(), ecrFmt.GetOwnership()); err != nil { - jww.WARN.Printf("Confirmation failed: %s", err) + em := fmt.Sprintf("Confirmation failed: %s", err) + jww.WARN.Print(em) + events.Report(10, "Auth", "ConfirmError", em) m.storage.Auth().Done(sr.GetPartner()) return } diff --git a/auth/confirm.go b/auth/confirm.go index 30a51181c..f13d3871d 100644 --- a/auth/confirm.go +++ b/auth/confirm.go @@ -8,6 +8,7 @@ package auth import ( + "fmt" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" @@ -100,13 +101,17 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader, // the second does not or the two occur and the storage into critical // messages does not occur + events := net.GetEventManager() + //create local relationship p := storage.E2e().GetE2ESessionParams() if err := storage.E2e().AddPartner(partner.ID, partner.DhPubKey, newPrivKey, p, p); err != nil { - jww.WARN.Printf("Failed to create channel with partner (%s) "+ + em := fmt.Sprintf("Failed to create channel with partner (%s) "+ "on confirmation, this is likley a replay: %s", partner.ID, err.Error()) + jww.WARN.Print(em) + events.Report(10, "Auth", "SendConfirmError", em) } // delete the in progress negotiation @@ -131,8 +136,10 @@ func ConfirmRequestAuth(partner contact.Contact, rng io.Reader, return 0, errors.WithMessage(err, "Auth Confirm Failed to transmit") } - jww.INFO.Printf("Confirm Request with %s (msgDigest: %s) sent on round %d", + em := fmt.Sprintf("Confirm Request with %s (msgDigest: %s) sent on round %d", partner.ID, cmixMsg.Digest(), round) + jww.INFO.Print(em) + events.Report(1, "Auth", "SendConfirm", em) return round, nil } diff --git a/auth/request.go b/auth/request.go index add36835b..1be240891 100644 --- a/auth/request.go +++ b/auth/request.go @@ -8,6 +8,7 @@ package auth import ( + "fmt" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" "gitlab.com/elixxir/client/interfaces" @@ -169,8 +170,10 @@ func RequestAuth(partner, me contact.Contact, message string, rng io.Reader, cmixMsg.Digest(), err) } - jww.INFO.Printf("Auth Request with %s (msgDigest: %s) sent"+ + em := fmt.Sprintf("Auth Request with %s (msgDigest: %s) sent"+ " on round %d", partner.ID, cmixMsg.Digest(), round) + jww.INFO.Print(em) + net.GetEventManager().Report(1, "Auth", "RequestSent", em) return round, nil } diff --git a/groupChat/utils_test.go b/groupChat/utils_test.go index bdf58edfa..f4b5d7e18 100644 --- a/groupChat/utils_test.go +++ b/groupChat/utils_test.go @@ -277,6 +277,13 @@ func (tnm *testNetworkManager) SendManyCMIX(messages map[id.ID]format.Message, _ return 0, nil, nil } +type dummyEventMgr struct{} + +func (d *dummyEventMgr) Report(p int, a, b, c string) {} +func (t *testNetworkManager) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} + func (tnm *testNetworkManager) GetInstance() *network.Instance { return tnm.instance } func (tnm *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } func (tnm *testNetworkManager) Follow(interfaces.ClientErrorReport) (stoppable.Stoppable, error) { diff --git a/interfaces/networkManager.go b/interfaces/networkManager.go index c3bc9f49d..e518ae014 100644 --- a/interfaces/networkManager.go +++ b/interfaces/networkManager.go @@ -27,6 +27,7 @@ type NetworkManager interface { SendManyCMIX(messages map[id.ID]format.Message, p params.CMIX) (id.Round, []ephemeral.Id, error) GetInstance() *network.Instance GetHealthTracker() HealthTracker + GetEventManager() EventManager GetSender() *gateway.Sender Follow(report ClientErrorReport) (stoppable.Stoppable, error) CheckGarbledMessages() diff --git a/keyExchange/utils_test.go b/keyExchange/utils_test.go index cb0518466..f15112279 100644 --- a/keyExchange/utils_test.go +++ b/keyExchange/utils_test.go @@ -93,6 +93,10 @@ func (t *testNetworkManagerGeneric) GetInstance() *network.Instance { } +func (t *testNetworkManagerGeneric) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} + func (t *testNetworkManagerGeneric) RegisterWithPermissioning(string) ([]byte, error) { return nil, nil } @@ -153,6 +157,12 @@ func InitTestingContextGeneric(i interface{}) (*storage.Session, interfaces.Netw type testNetworkManagerFullExchange struct { instance *network.Instance } +type dummyEventMgr struct{} + +func (d *dummyEventMgr) Report(p int, a, b, c string) {} +func (t *testNetworkManagerFullExchange) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} func (t *testNetworkManagerFullExchange) GetHealthTracker() interfaces.HealthTracker { return nil diff --git a/network/ephemeral/testutil.go b/network/ephemeral/testutil.go index 3b443dfe3..fb20cf8bd 100644 --- a/network/ephemeral/testutil.go +++ b/network/ephemeral/testutil.go @@ -70,6 +70,13 @@ func (t *testNetworkManager) GetInstance() *network.Instance { return t.instance } +type dummyEventMgr struct{} + +func (d *dummyEventMgr) Report(p int, a, b, c string) {} +func (t *testNetworkManager) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} + func (t *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } diff --git a/network/manager.go b/network/manager.go index 55e8b4a4b..3ebc1d1d9 100644 --- a/network/manager.go +++ b/network/manager.go @@ -166,6 +166,11 @@ func (m *manager) Follow(report interfaces.ClientErrorReport) (stoppable.Stoppab return multi, nil } +// GetEventManager returns the health tracker +func (m *manager) GetEventManager() interfaces.EventManager { + return m.events +} + // GetHealthTracker returns the health tracker func (m *manager) GetHealthTracker() interfaces.HealthTracker { return m.Health diff --git a/single/manager_test.go b/single/manager_test.go index 1a62edf84..0746e0f7f 100644 --- a/single/manager_test.go +++ b/single/manager_test.go @@ -327,6 +327,13 @@ func (tnm *testNetworkManager) GetInstance() *network.Instance { return tnm.instance } +type dummyEventMgr struct{} + +func (d *dummyEventMgr) Report(p int, a, b, c string) {} +func (t *testNetworkManager) GetEventManager() interfaces.EventManager { + return &dummyEventMgr{} +} + func (tnm *testNetworkManager) GetHealthTracker() interfaces.HealthTracker { return nil } diff --git a/ud/register.go b/ud/register.go index 4fe9e2d67..8a25bafc0 100644 --- a/ud/register.go +++ b/ud/register.go @@ -88,7 +88,8 @@ func (m *Manager) register(username string, comm registerUserComms) error { err = m.setRegistered() if m.client != nil { m.client.ReportEvent(1, "UserDiscovery", "Registration", - fmt.Sprintf("User Registered with UD: %s", user)) + fmt.Sprintf("User Registered with UD: %+v", + user)) } } -- GitLab