Skip to content
Snippets Groups Projects
Commit e2f5e985 authored by Richard T. Carback III's avatar Richard T. Carback III
Browse files

Add event reports for auth requests/confirm/etc

parent cea80688
No related branches found
No related tags found
3 merge requests!23Release,!13Hotfix/no host cooldown + return sende2e TS,!11Client Event Reporting API
......@@ -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 {
......
......@@ -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
}
......
......@@ -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
}
......@@ -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
}
......@@ -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) {
......
......@@ -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()
......
......@@ -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
......
......@@ -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
}
......
......@@ -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
......
......@@ -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
}
......
......@@ -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))
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment