chore(performance)!: Remove member list in non-encrypted channels
This commit removes the list of members from non token gated channels. Unfortunately is a breaking change. I could make it non-breaking, but we would lose any performance benefit. For clients, the pseudo code for checking the member list of a channel is: ``` members := channel.TokenGated ? channel.Members : community.Members ```
This commit is contained in:
parent
d8a49c538b
commit
2bc2099d55
|
@ -511,7 +511,6 @@ func (o *Community) MarshalJSON() ([]byte, error) {
|
||||||
Color: c.Identity.Color,
|
Color: c.Identity.Color,
|
||||||
Description: c.Identity.Description,
|
Description: c.Identity.Description,
|
||||||
Permissions: c.Permissions,
|
Permissions: c.Permissions,
|
||||||
Members: c.Members,
|
|
||||||
CanPost: canPost,
|
CanPost: canPost,
|
||||||
CanView: canView,
|
CanView: canView,
|
||||||
CanPostReactions: canPostReactions,
|
CanPostReactions: canPostReactions,
|
||||||
|
@ -521,6 +520,10 @@ func (o *Community) MarshalJSON() ([]byte, error) {
|
||||||
HideIfPermissionsNotMet: c.HideIfPermissionsNotMet,
|
HideIfPermissionsNotMet: c.HideIfPermissionsNotMet,
|
||||||
Position: int(c.Position),
|
Position: int(c.Position),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if chat.TokenGated {
|
||||||
|
chat.Members = c.Members
|
||||||
|
}
|
||||||
communityItem.Chats[id] = chat
|
communityItem.Chats[id] = chat
|
||||||
}
|
}
|
||||||
communityItem.TokenPermissions = o.tokenPermissions()
|
communityItem.TokenPermissions = o.tokenPermissions()
|
||||||
|
|
|
@ -2,6 +2,7 @@ package communities
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
|
"encoding/json"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -982,3 +983,99 @@ func (s *CommunitySuite) removedChatCommunityDescription(org *Community) *protob
|
||||||
|
|
||||||
return description
|
return description
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *CommunitySuite) TestMarshalJSON() {
|
||||||
|
community := s.buildCommunity(&s.identity.PublicKey)
|
||||||
|
channelID := community.ChatID(testChatID1)
|
||||||
|
_, err := community.UpsertTokenPermission(&protobuf.CommunityTokenPermission{
|
||||||
|
Id: "A",
|
||||||
|
Type: protobuf.CommunityTokenPermission_CAN_VIEW_AND_POST_CHANNEL,
|
||||||
|
TokenCriteria: []*protobuf.TokenCriteria{},
|
||||||
|
ChatIds: []string{channelID},
|
||||||
|
})
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
s.Require().True(community.ChannelEncrypted(testChatID1))
|
||||||
|
|
||||||
|
communityDescription := community.config.CommunityDescription
|
||||||
|
ownerKey, err := crypto.GenerateKey()
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
memberKey, err := crypto.GenerateKey()
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
// returns true if the user is the owner
|
||||||
|
|
||||||
|
communityDescription.Members = make(map[string]*protobuf.CommunityMember)
|
||||||
|
communityDescription.Members[common.PubkeyToHex(&ownerKey.PublicKey)] = &protobuf.CommunityMember{Roles: []protobuf.CommunityMember_Roles{protobuf.CommunityMember_ROLE_OWNER}}
|
||||||
|
communityDescription.Members[common.PubkeyToHex(&memberKey.PublicKey)] = &protobuf.CommunityMember{Roles: []protobuf.CommunityMember_Roles{protobuf.CommunityMember_ROLE_ADMIN}}
|
||||||
|
communityDescription.Chats[testChatID1] = &protobuf.CommunityChat{Members: make(map[string]*protobuf.CommunityMember), Identity: &protobuf.ChatIdentity{}}
|
||||||
|
communityDescription.Chats[testChatID1].Members[common.PubkeyToHex(&ownerKey.PublicKey)] = &protobuf.CommunityMember{Roles: []protobuf.CommunityMember_Roles{protobuf.CommunityMember_ROLE_OWNER}}
|
||||||
|
|
||||||
|
// Test token gated community
|
||||||
|
s.Require().True(community.ChannelEncrypted(testChatID1))
|
||||||
|
communityJSON, err := json.Marshal(community)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
var communityData map[string]interface{}
|
||||||
|
err = json.Unmarshal(communityJSON, &communityData)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().NotNil(communityData["chats"])
|
||||||
|
|
||||||
|
expectedChats := map[string]interface{}{}
|
||||||
|
expectedChat := map[string]interface{}{
|
||||||
|
"canPost": true,
|
||||||
|
"canPostReactions": true,
|
||||||
|
"categoryID": "",
|
||||||
|
"canView": true,
|
||||||
|
"color": "",
|
||||||
|
"description": "",
|
||||||
|
"emoji": "",
|
||||||
|
"hideIfPermissionsNotMet": false,
|
||||||
|
"members": map[string]interface{}{
|
||||||
|
common.PubkeyToHex(&ownerKey.PublicKey): map[string]interface{}{
|
||||||
|
"roles": []interface{}{float64(1)},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"id": testChatID1,
|
||||||
|
"name": "",
|
||||||
|
"permissions": nil,
|
||||||
|
"position": float64(0),
|
||||||
|
"tokenGated": true,
|
||||||
|
"viewersCanPostReactions": false,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedChats[testChatID1] = expectedChat
|
||||||
|
s.Require().Equal(expectedChats, communityData["chats"])
|
||||||
|
|
||||||
|
// Test token gated community
|
||||||
|
community.config.CommunityDescription.TokenPermissions = nil
|
||||||
|
communityJSON, err = json.Marshal(community)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
err = json.Unmarshal(communityJSON, &communityData)
|
||||||
|
s.Require().NoError(err)
|
||||||
|
s.Require().NotNil(communityData["chats"])
|
||||||
|
|
||||||
|
expectedChats = map[string]interface{}{}
|
||||||
|
expectedChat = map[string]interface{}{
|
||||||
|
"canPost": true,
|
||||||
|
"canPostReactions": true,
|
||||||
|
"categoryID": "",
|
||||||
|
"canView": true,
|
||||||
|
"color": "",
|
||||||
|
"description": "",
|
||||||
|
"emoji": "",
|
||||||
|
"hideIfPermissionsNotMet": false,
|
||||||
|
"id": testChatID1,
|
||||||
|
"members": nil,
|
||||||
|
"name": "",
|
||||||
|
"permissions": nil,
|
||||||
|
"position": float64(0),
|
||||||
|
"tokenGated": false,
|
||||||
|
"viewersCanPostReactions": false,
|
||||||
|
}
|
||||||
|
|
||||||
|
expectedChats[testChatID1] = expectedChat
|
||||||
|
s.Require().Equal(expectedChats, communityData["chats"])
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue