diff --git a/auth/store/deletion.go b/auth/store/deletion.go index 034ec59b9b242f9a459e7904384fa720a12598d1..140a9940c8aefd9f97fd04afd0319a544ebdd636 100644 --- a/auth/store/deletion.go +++ b/auth/store/deletion.go @@ -1,9 +1,9 @@ package store import ( + "fmt" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" - util "gitlab.com/elixxir/client/storage/utility" "gitlab.com/xx_network/primitives/id" ) @@ -13,17 +13,9 @@ func (s *Store) DeleteAllRequests() error { s.mux.Lock() defer s.mux.Unlock() - for partnerId, req := range s.receivedByID { - switch req.rt { - case Sent: - s.deleteSentRequest(req) - delete(s.receivedByID, partnerId) - case Receive: - s.deleteReceiveRequest(req) - delete(s.receivedByID, partnerId) - } - - } + // Delete all requests + s.deleteSentRequests() + s.deleteReceiveRequests() if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store updated request map after "+ @@ -37,27 +29,31 @@ func (s *Store) DeleteAllRequests() error { // If the partner ID exists as a request, then the request will be deleted // and the state stored. If the partner does not exist, then an error will // be returned. -func (s *Store) DeleteRequest(partnerId *id.ID) error { +func (s *Store) DeleteRequest(partner *id.ID) error { s.mux.Lock() defer s.mux.Unlock() - req, ok := s.receivedByID[*partnerId] - if !ok { - return errors.Errorf("Request for %s does not exist", partnerId) - } + authId := makeAuthIdentity(partner, s.defaultID) - switch req.rt { - case Sent: - s.deleteSentRequest(req) - case Receive: - s.deleteReceiveRequest(req) + // Check if this is a relationship in either map + _, isReceivedRelationship := s.receivedByID[authId] + _, isSentRelationship := s.sentByID[authId] + + // If it is not a relationship in either, return an error + if !isSentRelationship && !isReceivedRelationship { + return errors.New(fmt.Sprintf("No relationship exists with "+ + "identity %s", partner)) } - delete(s.receivedByID, *partnerId) + // Delete relationship. It should exist in at least one map, + // for the other the delete operation is a no-op + delete(s.receivedByID, authId) + delete(s.sentByID, authId) + // Save to storage if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store updated request map after "+ - "deleting partner request for partner %s: %+v", partnerId, err) + "deleting partner request for partner %s: %+v", partner, err) } return nil @@ -68,15 +64,7 @@ func (s *Store) DeleteSentRequests() error { s.mux.Lock() defer s.mux.Unlock() - for partnerId, req := range s.receivedByID { - switch req.rt { - case Sent: - s.deleteSentRequest(req) - delete(s.receivedByID, partnerId) - case Receive: - continue - } - } + s.deleteSentRequests() if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store updated request map after "+ @@ -91,15 +79,7 @@ func (s *Store) DeleteReceiveRequests() error { s.mux.Lock() defer s.mux.Unlock() - for partnerId, req := range s.receivedByID { - switch req.rt { - case Sent: - continue - case Receive: - s.deleteReceiveRequest(req) - delete(s.receivedByID, partnerId) - } - } + s.deleteReceiveRequests() if err := s.save(); err != nil { jww.FATAL.Panicf("Failed to store updated request map after "+ @@ -109,18 +89,16 @@ func (s *Store) DeleteReceiveRequests() error { return nil } -// deleteSentRequest is a helper function which deletes a Sent request from storage. -func (s *Store) deleteSentRequest(r *ReceivedRequest) { - delete(s.sentByFingerprints, r.sent.fingerprint) - if err := r.sent.delete(); err != nil { - jww.FATAL.Panicf("Failed to delete sent request: %+v", err) +// deleteSentRequests is a helper function which deletes a Sent request from storage. +func (s *Store) deleteSentRequests() { + for partnerId := range s.sentByID { + delete(s.sentByID, partnerId) } } -// deleteReceiveRequest is a helper function which deletes a Receive request from storage. -func (s *Store) deleteReceiveRequest(r *ReceivedRequest) { - if err := util.DeleteContact(s.kv, r.partner.ID); err != nil { - jww.FATAL.Panicf("Failed to delete recieved request "+ - "contact: %+v", err) +// deleteReceiveRequests is a helper function which deletes a Receive request from storage. +func (s *Store) deleteReceiveRequests() { + for partnerId := range s.receivedByID { + delete(s.receivedByID, partnerId) } } diff --git a/auth/store/store.go b/auth/store/store.go index 6468618b965993dd57de49360697ff80847192a7..03438e9705be05c7a62983dbb94bdb0d95d19800 100644 --- a/auth/store/store.go +++ b/auth/store/store.go @@ -9,7 +9,6 @@ package store import ( "encoding/json" - "fmt" "github.com/cloudflare/circl/dh/sidh" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" @@ -365,132 +364,3 @@ func (s *Store) Done(rr *ReceivedRequest) { return } } - -// Delete is one of two calls after using a request. This one is to be used when -// the use is unsuccessful. It deletes all references to the request associated -// with the passed partner, if it exists. It will allow any thread waiting on -// access to continue. They should fail due to the deletion of the structure. -func (s *Store) Delete(partner *id.ID) error { - s.mux.Lock() - defer s.mux.Unlock() - authId := makeAuthIdentity(partner, s.defaultID) - - _, isReceivedRelationship := s.receivedByID[authId] - _, isSentRelationship := s.sentByID[authId] - - if !isSentRelationship && !isReceivedRelationship { - return errors.New(fmt.Sprintf("No relationship exists with "+ - "partner %s", partner)) - } - - delete(s.receivedByID, authId) - delete(s.sentByID, authId) - - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to store updated request map after "+ - "deletion: %+v", err) - } - - err := s.deletePreviousNegotiationPartner(partner) - if err != nil { - jww.FATAL.Panicf("Failed to delete partner negotiations: %+v", err) - } - - return nil -} - -// DeleteAllRequests clears the request map and all associated storage objects -// containing request data. -func (s *Store) DeleteAllRequests() error { - s.mux.Lock() - defer s.mux.Unlock() - - // Delete all requests - s.deleteSentRequests() - s.deleteReceiveRequests() - - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to store updated request map after "+ - "deleting all receivedByID: %+v", err) - } - - return nil -} - -// DeleteRequest deletes a request from Store given a partner ID. -// If the partner ID exists as a request, then the request will be deleted -// and the state stored. If the partner does not exist, then an error will -// be returned. -func (s *Store) DeleteRequest(partner *id.ID) error { - s.mux.Lock() - defer s.mux.Unlock() - - authId := makeAuthIdentity(partner, s.defaultID) - - // Check if this is a relationship in either map - _, isReceivedRelationship := s.receivedByID[authId] - _, isSentRelationship := s.sentByID[authId] - - // If it is not a relationship in either, return an error - if !isSentRelationship && !isReceivedRelationship { - return errors.New(fmt.Sprintf("No relationship exists with "+ - "identity %s", partner)) - } - - // Delete relationship. It should exist in at least one map, - // for the other the delete operation is a no-op - delete(s.receivedByID, authId) - delete(s.sentByID, authId) - - // Save to storage - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to store updated request map after "+ - "deleting partner request for partner %s: %+v", partner, err) - } - - return nil -} - -// DeleteSentRequests deletes all Sent receivedByID from Store. -func (s *Store) DeleteSentRequests() error { - s.mux.Lock() - defer s.mux.Unlock() - - s.deleteSentRequests() - - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to store updated request map after "+ - "deleting all sent receivedByID: %+v", err) - } - - return nil -} - -// DeleteReceiveRequests deletes all Receive receivedByID from Store. -func (s *Store) DeleteReceiveRequests() error { - s.mux.Lock() - defer s.mux.Unlock() - - s.deleteReceiveRequests() - - if err := s.save(); err != nil { - jww.FATAL.Panicf("Failed to store updated request map after "+ - "deleting all partner receivedByID: %+v", err) - } - - return nil -} - -// deleteSentRequests is a helper function which deletes a Sent request from storage. -func (s *Store) deleteSentRequests() { - for partnerId := range s.sentByID { - delete(s.sentByID, partnerId) - } -} - -// deleteReceiveRequests is a helper function which deletes a Receive request from storage. -func (s *Store) deleteReceiveRequests() { - for partnerId := range s.receivedByID { - delete(s.receivedByID, partnerId) - } -}