From 8fead28be9247847360160d57c3366d002c457b1 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Tue, 26 Oct 2021 14:48:26 -0700 Subject: [PATCH 1/3] Prefer public.name when upgrading --- model/attr/scope.go | 8 ++++++++ peer/cwtch_peer.go | 43 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/model/attr/scope.go b/model/attr/scope.go index 00c3ee0..d02cd15 100644 --- a/model/attr/scope.go +++ b/model/attr/scope.go @@ -80,11 +80,19 @@ func (scope Scope) IsConversation() bool { } // GetLocalScope takes a path and attaches the local scope to it +// Deprecated: Use ConstructScopedZonedPath func GetLocalScope(path string) string { return string(LocalScope) + Separator + path } +// GetPublicScope takes a path and attaches the local scope to it +// Deprecated: Use ConstructScopedZonedPath +func GetPublicScope(path string) string { + return string(PublicScope) + Separator + path +} + // GetPeerScope takes a path and attaches the peer scope to it +// Deprecated: Use ConstructScopedZonedPath func GetPeerScope(path string) string { return string(PeerScope) + Separator + path } diff --git a/peer/cwtch_peer.go b/peer/cwtch_peer.go index e3d9de5..6bc16f4 100644 --- a/peer/cwtch_peer.go +++ b/peer/cwtch_peer.go @@ -280,22 +280,49 @@ func FromProfile(profile *model.Profile) CwtchPeer { func (cp *cwtchPeer) Init(eventBus event.Manager) { cp.InitForEvents(eventBus, DefaultEventsToHandle) + // Upgrade the Cwtch Peer if necessary // It would be nice to do these checks in the storage engine itself, but it is easier to do them here // rather than duplicating the logic to construct/reconstruct attributes in storage engine... - // TODO: Remove these checks after Cwtch ~1.5 - // If local.profile.name does not exist then set it from deprecated GetAttribute - if _, exists := cp.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name); !exists { - if name, exists := cp.Profile.GetAttribute(attr.GetLocalScope(constants.Name)); exists { - cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, name) - } else if name, exists := cp.Profile.GetAttribute(constants.Name); exists { + // TODO: Remove these checks after Cwtch ~1.5 storage engine is implemented + if _, exists := cp.GetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name); !exists { + // If public.profile.name does not exist, and we have an existing public.name then: + // set public.profile.name from public.name + // set local.profile.name from public.name + if name, exists := cp.Profile.GetAttribute(attr.GetPublicScope(constants.Name)); exists { + cp.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, name) cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, name) } else { - // Profile.Name is very deprecated at this point... - cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, cp.Profile.Name) + // Otherwise check if local.name exists and set it from that + // If not, then check the very old unzoned, unscoped name. + // If not, then set directly from Profile.Name... + if name, exists := cp.Profile.GetAttribute(attr.GetLocalScope(constants.Name)); exists { + cp.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, name) + cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, name) + } else if name, exists := cp.Profile.GetAttribute(constants.Name); exists { + cp.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, name) + cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, name) + } else { + // Profile.Name is very deprecated at this point... + cp.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, cp.Profile.Name) + cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, cp.Profile.Name) + } } } + // At this point we can safely assume that public.profile.name exists + localName, _ := cp.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name) + publicName, _ := cp.GetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name) + + if localName != publicName { + cp.SetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name, publicName) + } + + // At this point we can safely assume that public.profile.name exists AND is consistent with + // local.profile.name - regardless of whatever Cwtch version we have upgraded from. This will + // be important after Cwtch 1.5 when we purge all previous references to local.profile.name and + // profile-> name - and remove all name processing code from libcwtch-go. + // If local.profile.tag does not exist then set it from deprecated GetAttribute if _, exists := cp.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Tag); !exists { if tag, exists := cp.Profile.GetAttribute(constants.Tag); exists { From 4859a90d028ff65388b84440ff8f545ba23288a5 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Tue, 26 Oct 2021 14:50:05 -0700 Subject: [PATCH 2/3] WaitGetPeer now uses public scoped names --- app/utils/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/utils.go b/app/utils/utils.go index 3d19bd6..66c5116 100644 --- a/app/utils/utils.go +++ b/app/utils/utils.go @@ -16,7 +16,7 @@ func WaitGetPeer(app app2.Application, name string) peer.CwtchPeer { for { for _, handle := range app.ListProfiles() { peer := app.GetPeer(handle) - localName, _ := peer.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name) + localName, _ := peer.GetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name) if localName == name { return peer } From 3cc839cd45d1c009d5d4dddaaa18fb1d6432c4e0 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Tue, 26 Oct 2021 16:17:14 -0700 Subject: [PATCH 3/3] remove printing of tokenboardclientapp struct --- protocol/connections/tokenboardclientapp.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocol/connections/tokenboardclientapp.go b/protocol/connections/tokenboardclientapp.go index 1ca69fe..672426d 100644 --- a/protocol/connections/tokenboardclientapp.go +++ b/protocol/connections/tokenboardclientapp.go @@ -171,7 +171,7 @@ func (ta *TokenBoardClient) Post(ct []byte, sig []byte) (bool, int) { // MakePayment uses the PoW based token protocol to obtain more tokens func (ta *TokenBoardClient) MakePayment() error { - log.Debugf("Making a Payment %v", ta) + log.Debugf("Making a Payment") id, sk := primitives.InitializeEphemeralIdentity() client := new(tor.BaseOnionService) client.Init(ta.acn, sk, &id) @@ -201,7 +201,7 @@ func (ta *TokenBoardClient) MakePayment() error { conn.Close() return nil } - log.Errorf("invalid cast of powapp. this should not happen %v %v", powtapp, reflect.TypeOf(conn.App())) + log.Errorf("invalid cast of powapp. this should never happen %v %v", powtapp, reflect.TypeOf(conn.App())) return errors.New("invalid cast of powapp. this should never happen") } log.Debugf("could not connect to payment server %v..trying again")