diff --git a/go.mod b/go.mod index d7750b0..50b42fa 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module git.openprivacy.ca/cwtch.im/libcwtch-go go 1.15 require ( - cwtch.im/cwtch v0.12.0 + cwtch.im/cwtch v0.12.2 git.openprivacy.ca/openprivacy/connectivity v1.5.0 git.openprivacy.ca/openprivacy/log v1.0.3 golang.org/x/mobile v0.0.0-20210716004757-34ab1303b554 // indirect diff --git a/go.sum b/go.sum index a311ed3..df5c7a2 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,10 @@ cwtch.im/cwtch v0.11.2 h1:a38zZLSNsKJzLStBDOIoYKKIL56V9ueQvOZfnIEVc5I= cwtch.im/cwtch v0.11.2/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= cwtch.im/cwtch v0.12.0 h1:hEMee2/2s4kUwukGCTBpGww/KfrsE84e9tOLnM8lM78= cwtch.im/cwtch v0.12.0/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= +cwtch.im/cwtch v0.12.1 h1:3+OZtzZ9Kg+3Es/ntyPeg7Ku9XzOlSXcvC6rdezmuIM= +cwtch.im/cwtch v0.12.1/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= +cwtch.im/cwtch v0.12.2 h1:I+ndKadCRCITw4SPbd+1cpRv+z/7iHjjTUv8OzRwTrE= +cwtch.im/cwtch v0.12.2/go.mod h1:QpTkQK7MqNt0dQK9/pBk5VpkvFhy6xuoxJIn401B8fM= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= git.openprivacy.ca/cwtch.im/tapir v0.4.9 h1:LXonlztwvI1F1++0IyomIcDH1/Bxzo+oN8YjGonNvjM= diff --git a/lib.go b/lib.go index 0ecd34c..2fec057 100644 --- a/lib.go +++ b/lib.go @@ -866,16 +866,19 @@ func c_SetProfileAttribute(profile_ptr *C.char, profile_len C.int, key_ptr *C.ch } // SetProfileAttribute provides a wrapper around profile.SetScopedZonedAttribute +// WARNING: Because this function is potentially dangerous all keys and zones must be added +// explicitly. If you are attempting to added behaviour to the UI that requires the existence of new keys +// you probably want to be building out functionality/subsystem in the UI itself. // Key must have the format zone.key where Zone is defined in Cwtch. Unknown zones are not permitted. func SetProfileAttribute(profileOnion string, key string, value string) { profile := application.GetPeer(profileOnion) zone, key := attr.ParseZone(key) - if zone != attr.UnknownZone { - // TODO: We only allow Locally scoped attributes to be set here. - // To set a publicly scoped zone you need to write a dedicated handler/functionality - // And this probably belongs in Cwtch - profile.SetScopedZonedAttribute(attr.LocalScope, zone, key, value) + + // TODO We only allow public.profile.zone to be set for now. + // All other scopes and zones need to be added explicitly or handled by Cwtch. + if zone == attr.ProfileZone && key == constants.Name { + profile.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, value) } else { log.Errorf("attempted to set an attribute with an unknown zone: %v", key) } diff --git a/utils/eventHandler.go b/utils/eventHandler.go index 1b89bd5..db5baa5 100644 --- a/utils/eventHandler.go +++ b/utils/eventHandler.go @@ -89,8 +89,6 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string { e.Data[constants.Tag] = tag if e.Data[event.Created] == event.True { - name, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name) - profile.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, name) profile.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants2.Picture, ImageToString(NewImage(RandomProfileImage(onion), TypeImageDistro))) } if e.Data[event.Status] != event.StorageRunning || e.Data[event.Created] == event.True { @@ -115,11 +113,6 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string { } } - nick, exists := profile.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants.Name) - if !exists { - nick = onion - } - picVal, ok := profile.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants2.Picture) if !ok { picVal = ImageToString(NewImage(RandomProfileImage(onion), TypeImageDistro)) @@ -131,12 +124,12 @@ func (eh *EventHandler) handleAppBusEvent(e *event.Event) string { picPath := GetPicturePath(pic) // Set publicly scopes attributes - profile.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name, nick) profile.SetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants2.Picture, picPath) online, _ := profile.GetScopedZonedAttribute(attr.LocalScope, attr.ProfileZone, constants2.PeerOnline) - e.Data[constants.Name] = nick + // Name always exists + e.Data[constants.Name], _ = profile.GetScopedZonedAttribute(attr.PublicScope, attr.ProfileZone, constants.Name) e.Data[constants2.Picture] = picPath e.Data["Online"] = online