From 00c344112ed95dccca42b390eecabb28017eff45 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Wed, 1 Mar 2023 22:06:37 +0100 Subject: [PATCH] Export VerifyDeleteChange --- commonspace/settings/settings.go | 37 ++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/commonspace/settings/settings.go b/commonspace/settings/settings.go index 0cb4591d..8d9bb3c8 100644 --- a/commonspace/settings/settings.go +++ b/commonspace/settings/settings.go @@ -7,6 +7,7 @@ import ( "fmt" "github.com/anytypeio/any-sync/accountservice" "github.com/anytypeio/any-sync/app/logger" + "github.com/anytypeio/any-sync/commonspace/object/keychain" "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" "github.com/anytypeio/any-sync/commonspace/object/tree/synctree" "github.com/anytypeio/any-sync/commonspace/object/tree/synctree/updatelistener" @@ -242,17 +243,7 @@ func (s *settingsObject) verifyDeleteSpace(raw *treechangeproto.RawTreeChangeWit if err != nil { return } - content := &spacesyncproto.SettingsData{} - err = proto.Unmarshal(data, content) - if err != nil { - return - } - if len(content.GetContent()) != 1 || - content.GetContent()[0].GetSpaceDelete() == nil || - content.GetContent()[0].GetSpaceDelete().GetDeleterPeerId() == "" { - return fmt.Errorf("incorrect delete change payload") - } - return + return verifyDeleteContent(data, "") } func (s *settingsObject) addContent(data []byte) (err error) { @@ -271,3 +262,27 @@ func (s *settingsObject) addContent(data []byte) (err error) { s.Update(s) return } + +func VerifyDeleteChange(raw *treechangeproto.RawTreeChangeWithId, peerId string) (err error) { + changeBuilder := objecttree.NewChangeBuilder(keychain.NewKeychain(), nil) + res, err := changeBuilder.Unmarshall(raw, true) + if err != nil { + return + } + return verifyDeleteContent(res.Data, peerId) +} + +func verifyDeleteContent(data []byte, peerId string) (err error) { + content := &spacesyncproto.SettingsData{} + err = proto.Unmarshal(data, content) + if err != nil { + return + } + if len(content.GetContent()) != 1 || + content.GetContent()[0].GetSpaceDelete() == nil || + (peerId == "" && content.GetContent()[0].GetSpaceDelete().GetDeleterPeerId() == "") || + (peerId != "" && content.GetContent()[0].GetSpaceDelete().GetDeleterPeerId() != peerId) { + return fmt.Errorf("incorrect delete change payload") + } + return +}