feat: community tags (#2708)

Signed-off-by: Richard Ramos <info@richardramos.me>

Co-authored-by: MishkaRogachev <mishkarogachev@gmail.com>
This commit is contained in:
Richard Ramos 2022-06-24 09:40:12 -04:00 committed by GitHub
parent 31feea9f15
commit 2873e65a61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 243 additions and 85 deletions

View File

@ -1 +1 @@
0.102.3
0.102.4

View File

@ -16,6 +16,7 @@ import (
"github.com/status-im/status-go/images"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
"github.com/status-im/status-go/protocol/v1"
)
@ -83,6 +84,11 @@ type CommunityCategory struct {
Position int `json:"position"` // Position is used to sort the categories
}
type CommunityTag struct {
Name string `json:"name"`
Emoji string `json:"emoji"`
}
func (o *Community) MarshalPublicAPIJSON() ([]byte, error) {
if o.config.MemberIdentity == nil {
return nil, errors.New("member identity not set")
@ -96,6 +102,7 @@ func (o *Community) MarshalPublicAPIJSON() ([]byte, error) {
Description string `json:"description"`
IntroMessage string `json:"introMessage"`
OutroMessage string `json:"outroMessage"`
Tags []CommunityTag `json:"tags"`
Images map[string]images.IdentityImage `json:"images"`
Color string `json:"color"`
MembersCount int `json:"membersCount"`
@ -108,6 +115,7 @@ func (o *Community) MarshalPublicAPIJSON() ([]byte, error) {
Verified: o.config.Verified,
Chats: make(map[string]CommunityChat),
Categories: make(map[string]CommunityCategory),
Tags: o.Tags(),
}
if o.config.CommunityDescription != nil {
for id, c := range o.config.CommunityDescription.Categories {
@ -181,6 +189,7 @@ func (o *Community) MarshalJSON() ([]byte, error) {
Description string `json:"description"`
IntroMessage string `json:"introMessage"`
OutroMessage string `json:"outroMessage"`
Tags []CommunityTag `json:"tags"`
Chats map[string]CommunityChat `json:"chats"`
Categories map[string]CommunityCategory `json:"categories"`
Images map[string]images.IdentityImage `json:"images"`
@ -208,6 +217,7 @@ func (o *Community) MarshalJSON() ([]byte, error) {
RequestedToJoinAt: o.RequestedToJoinAt(),
IsMember: o.isMember(),
Muted: o.config.Muted,
Tags: o.Tags(),
}
if o.config.CommunityDescription != nil {
for id, c := range o.config.CommunityDescription.Categories {
@ -296,6 +306,22 @@ func (o *Community) IntroMessage() string {
return ""
}
func (o *Community) Tags() []CommunityTag {
if o != nil &&
o.config != nil &&
o.config.CommunityDescription != nil {
var result []CommunityTag
for _, t := range o.config.CommunityDescription.Tags {
result = append(result, CommunityTag{
Name: t,
Emoji: requests.TagsEmojies[t],
})
}
return result
}
return nil
}
func (o *Community) OutroMessage() string {
if o != nil &&
o.config != nil &&
@ -792,6 +818,9 @@ func (o *Community) UpdateCommunityDescription(signer *ecdsa.PublicKey, descript
return nil, ErrNotAuthorized
}
// This is done in case tags are updated and a client sends unknown tags
description.Tags = requests.RemoveUnknownAndDeduplicateTags(description.Tags)
err := ValidateCommunityDescription(description)
if err != nil {
return nil, err

View File

@ -21,6 +21,7 @@ var ErrInvalidCommunityDescriptionCategoryNoName = errors.New("invalid community
var ErrInvalidCommunityDescriptionChatIdentity = errors.New("invalid community chat name, missing")
var ErrInvalidCommunityDescriptionDuplicatedName = errors.New("invalid community chat name, duplicated")
var ErrInvalidCommunityDescriptionUnknownChatCategory = errors.New("invalid community category in chat")
var ErrInvalidCommunityTags = errors.New("invalid community tags")
var ErrNotAdmin = errors.New("no admin privileges for this community")
var ErrInvalidGrant = errors.New("invalid grant")
var ErrNotAuthorized = errors.New("not authorized")

View File

@ -2,6 +2,7 @@ package communities
import (
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
)
func validateCommunityChat(desc *protobuf.CommunityDescription, chat *protobuf.CommunityChat) error {
@ -61,6 +62,11 @@ func ValidateCommunityDescription(desc *protobuf.CommunityDescription) error {
return ErrInvalidCommunityDescriptionUnknownOrgAccess
}
valid := requests.ValidateTags(desc.Tags)
if !valid {
return ErrInvalidCommunityTags
}
for _, category := range desc.Categories {
if err := validateCommunityCategory(category); err != nil {
return err

View File

@ -250,6 +250,7 @@ type CommunityDescription struct {
IntroMessage string `protobuf:"bytes,11,opt,name=intro_message,json=introMessage,proto3" json:"intro_message,omitempty"`
OutroMessage string `protobuf:"bytes,12,opt,name=outro_message,json=outroMessage,proto3" json:"outro_message,omitempty"`
Encrypted bool `protobuf:"varint,13,opt,name=encrypted,proto3" json:"encrypted,omitempty"`
Tags []string `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -364,6 +365,13 @@ func (m *CommunityDescription) GetEncrypted() bool {
return false
}
func (m *CommunityDescription) GetTags() []string {
if m != nil {
return m.Tags
}
return nil
}
type CommunityAdminSettings struct {
PinMessageAllMembersEnabled bool `protobuf:"varint,1,opt,name=pin_message_all_members_enabled,json=pinMessageAllMembersEnabled,proto3" json:"pin_message_all_members_enabled,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -1111,88 +1119,88 @@ func init() {
}
var fileDescriptor_f937943d74c1cd8b = []byte{
// 1315 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4f, 0x6f, 0x1b, 0x45,
0x14, 0xef, 0xfa, 0xbf, 0x9f, 0xed, 0xd4, 0x99, 0xb6, 0xe9, 0x36, 0xa5, 0x8d, 0xbb, 0x80, 0xe4,
0x0a, 0xe1, 0xaa, 0xa9, 0x90, 0x2a, 0xfe, 0xb4, 0x75, 0x53, 0xab, 0x98, 0x26, 0x76, 0x3b, 0x4e,
0x28, 0xf4, 0xc0, 0x6a, 0xed, 0x9d, 0x38, 0xa3, 0xac, 0x67, 0x97, 0x9d, 0x71, 0x84, 0x39, 0x70,
0x44, 0x7c, 0x04, 0x24, 0x8e, 0x48, 0x88, 0xef, 0xc1, 0x9d, 0x3b, 0x37, 0x3e, 0x0a, 0x9a, 0x99,
0xdd, 0xf5, 0x3a, 0xb1, 0xd3, 0x48, 0x15, 0xa7, 0x9d, 0xf7, 0xe6, 0xbd, 0xdf, 0xbc, 0xff, 0x6f,
0x61, 0x7d, 0xe4, 0x4f, 0x26, 0x53, 0x46, 0x05, 0x25, 0xbc, 0x15, 0x84, 0xbe, 0xf0, 0x51, 0x49,
0x7d, 0x86, 0xd3, 0xc3, 0xcd, 0x2b, 0xa3, 0x23, 0x47, 0xd8, 0xd4, 0x25, 0x4c, 0x50, 0x31, 0xd3,
0xd7, 0xd6, 0x09, 0xe4, 0x9f, 0x87, 0x0e, 0x13, 0xe8, 0x0e, 0x54, 0x63, 0xe5, 0x99, 0x4d, 0x5d,
0xd3, 0x68, 0x18, 0xcd, 0x2a, 0xae, 0x24, 0xbc, 0xae, 0x8b, 0x6e, 0x42, 0x79, 0x42, 0x26, 0x43,
0x12, 0xca, 0xfb, 0x8c, 0xba, 0x2f, 0x69, 0x46, 0xd7, 0x45, 0xd7, 0xa1, 0x18, 0xe1, 0x9b, 0xd9,
0x86, 0xd1, 0x2c, 0xe3, 0x82, 0x24, 0xbb, 0x2e, 0xba, 0x0a, 0xf9, 0x91, 0xe7, 0x8f, 0x8e, 0xcd,
0x5c, 0xc3, 0x68, 0xe6, 0xb0, 0x26, 0xac, 0x5f, 0x0c, 0xb8, 0xbc, 0x13, 0x63, 0xef, 0x29, 0x10,
0xf4, 0x09, 0xe4, 0x43, 0xdf, 0x23, 0xdc, 0x34, 0x1a, 0xd9, 0xe6, 0xda, 0xf6, 0x56, 0x2b, 0x36,
0xbd, 0x75, 0x4a, 0xb2, 0x85, 0xa5, 0x18, 0xd6, 0xd2, 0xd6, 0x23, 0xc8, 0x2b, 0x1a, 0xd5, 0xa1,
0x7a, 0xd0, 0x7b, 0xd1, 0xeb, 0xbf, 0xee, 0xd9, 0xb8, 0xbf, 0xdb, 0xa9, 0x5f, 0x42, 0x55, 0x28,
0xc9, 0x93, 0xdd, 0xde, 0xdd, 0xad, 0x1b, 0xe8, 0x1a, 0xac, 0x2b, 0x6a, 0xaf, 0xdd, 0x6b, 0x3f,
0xef, 0xd8, 0x07, 0x83, 0x0e, 0x1e, 0xd4, 0x33, 0xd6, 0xbf, 0x06, 0x5c, 0x4d, 0x1e, 0x78, 0x49,
0xc2, 0x09, 0xe5, 0x9c, 0xfa, 0x8c, 0xa3, 0x1b, 0x50, 0x22, 0x8c, 0xdb, 0x3e, 0xf3, 0x66, 0x2a,
0x1c, 0x25, 0x5c, 0x24, 0x8c, 0xf7, 0x99, 0x37, 0x43, 0x26, 0x14, 0x83, 0x90, 0x9e, 0x38, 0x82,
0xa8, 0x40, 0x94, 0x70, 0x4c, 0xa2, 0x2f, 0xa0, 0xe0, 0x8c, 0x46, 0x84, 0x73, 0x15, 0x86, 0xb5,
0xed, 0x0f, 0x97, 0x78, 0x91, 0x7a, 0xa4, 0xd5, 0x56, 0xc2, 0x38, 0x52, 0xb2, 0xf6, 0xa1, 0xa0,
0x39, 0x08, 0xc1, 0x5a, 0xec, 0x4d, 0x7b, 0x67, 0xa7, 0x33, 0x18, 0xd4, 0x2f, 0xa1, 0x75, 0xa8,
0xf5, 0xfa, 0xf6, 0x5e, 0x67, 0xef, 0x69, 0x07, 0x0f, 0xbe, 0xec, 0xbe, 0xac, 0x1b, 0xe8, 0x0a,
0x5c, 0xee, 0xf6, 0xbe, 0xee, 0xee, 0xb7, 0xf7, 0xbb, 0xfd, 0x9e, 0xdd, 0xef, 0xed, 0x7e, 0x5b,
0xcf, 0xa0, 0x35, 0x80, 0x7e, 0xcf, 0xc6, 0x9d, 0x57, 0x07, 0x9d, 0xc1, 0x7e, 0x3d, 0x6b, 0xfd,
0x5c, 0x4c, 0xb9, 0xf8, 0x8c, 0xf0, 0x51, 0x48, 0x03, 0x41, 0x7d, 0x36, 0x4f, 0x8e, 0x91, 0x4a,
0x0e, 0xea, 0x40, 0x51, 0xe7, 0x95, 0x9b, 0x99, 0x46, 0xb6, 0x59, 0xd9, 0xfe, 0x68, 0x89, 0x13,
0x29, 0x98, 0x96, 0x4e, 0x0b, 0xef, 0x30, 0x11, 0xce, 0x70, 0xac, 0x8b, 0x9e, 0x40, 0x25, 0x98,
0x7b, 0xaa, 0xe2, 0x51, 0xd9, 0xbe, 0x7d, 0x7e, 0x3c, 0x70, 0x5a, 0x05, 0x6d, 0x43, 0x29, 0xae,
0x57, 0x33, 0xaf, 0xd4, 0x37, 0x52, 0xea, 0xaa, 0xbe, 0xf4, 0x2d, 0x4e, 0xe4, 0xd0, 0x63, 0xc8,
0xcb, 0xca, 0xe3, 0x66, 0x41, 0x99, 0x7e, 0xf7, 0x2d, 0xa6, 0x4b, 0x94, 0xc8, 0x70, 0xad, 0x27,
0xd3, 0x3e, 0x74, 0x98, 0xed, 0x51, 0x2e, 0xcc, 0x62, 0x23, 0xdb, 0x2c, 0xe3, 0xe2, 0xd0, 0x61,
0xbb, 0x94, 0x0b, 0xd4, 0x03, 0x18, 0x39, 0x82, 0x8c, 0xfd, 0x90, 0x12, 0x6e, 0x96, 0xd4, 0x03,
0xad, 0xb7, 0x3d, 0x90, 0x28, 0xe8, 0x57, 0x52, 0x08, 0xe8, 0x21, 0x98, 0x4e, 0x38, 0x3a, 0xa2,
0x27, 0xc4, 0x9e, 0x38, 0x63, 0x46, 0x84, 0x47, 0xd9, 0xb1, 0xad, 0x33, 0x52, 0x56, 0x19, 0xd9,
0x88, 0xee, 0xf7, 0x92, 0xeb, 0x1d, 0x95, 0xa2, 0xe7, 0xb0, 0xe6, 0xb8, 0x13, 0xca, 0x6c, 0x4e,
0x84, 0xa0, 0x6c, 0xcc, 0x4d, 0x50, 0xf1, 0x69, 0x2c, 0xb1, 0xa6, 0x2d, 0x05, 0x07, 0x91, 0x1c,
0xae, 0x39, 0x69, 0x12, 0xbd, 0x0f, 0x35, 0xca, 0x44, 0xe8, 0xdb, 0x13, 0xc2, 0xb9, 0x33, 0x26,
0x66, 0x45, 0x75, 0x6f, 0x55, 0x31, 0xf7, 0x34, 0x4f, 0x0a, 0xf9, 0xd3, 0xb4, 0x50, 0x55, 0x0b,
0x29, 0x66, 0x2c, 0xf4, 0x1e, 0x94, 0x09, 0x1b, 0x85, 0xb3, 0x40, 0x10, 0xd7, 0xac, 0xa9, 0xae,
0x98, 0x33, 0x36, 0x0f, 0xa0, 0x9a, 0xae, 0x12, 0x54, 0x87, 0xec, 0x31, 0xd1, 0x7d, 0x55, 0xc6,
0xf2, 0x88, 0xee, 0x41, 0xfe, 0xc4, 0xf1, 0xa6, 0xba, 0xa3, 0x2a, 0xdb, 0x37, 0x56, 0xb6, 0x3f,
0xd6, 0x72, 0x9f, 0x66, 0x1e, 0x1a, 0x9b, 0xaf, 0x00, 0xe6, 0x19, 0x5c, 0x02, 0xfa, 0xf1, 0x22,
0xe8, 0xf5, 0x25, 0xa0, 0x52, 0x3f, 0x0d, 0xf9, 0x06, 0x2e, 0x9f, 0xca, 0xd9, 0x12, 0xdc, 0xfb,
0x8b, 0xb8, 0x37, 0x97, 0xe1, 0x6a, 0x90, 0x59, 0x0a, 0xdb, 0xfa, 0x0e, 0x36, 0x96, 0xa7, 0x05,
0x3d, 0x83, 0xad, 0x80, 0xb2, 0x38, 0xc0, 0xb6, 0xe3, 0x79, 0x76, 0xd4, 0x47, 0x36, 0x61, 0xce,
0xd0, 0x23, 0x6e, 0x34, 0x83, 0x6e, 0x06, 0x94, 0x45, 0x21, 0x6f, 0x7b, 0x5e, 0x12, 0x53, 0x25,
0x62, 0xfd, 0x93, 0x81, 0xda, 0x82, 0x63, 0xe8, 0xd1, 0xbc, 0x97, 0x0d, 0x55, 0xaf, 0x1f, 0xac,
0x08, 0xc1, 0xc5, 0x9a, 0x38, 0xf3, 0x6e, 0x4d, 0x9c, 0xbd, 0x60, 0x13, 0x6f, 0x41, 0x25, 0x6a,
0x13, 0xb5, 0x8c, 0x72, 0x2a, 0xf0, 0x71, 0xe7, 0xc8, 0x5d, 0xb4, 0x09, 0xa5, 0xc0, 0xe7, 0x54,
0x76, 0x98, 0x9a, 0x0c, 0x79, 0x9c, 0xd0, 0xff, 0x53, 0xa9, 0x59, 0x2e, 0xac, 0x9f, 0xc9, 0xed,
0x69, 0x43, 0x8d, 0x33, 0x86, 0x22, 0xc8, 0x31, 0x67, 0xa2, 0x5f, 0x2a, 0x63, 0x75, 0x5e, 0x30,
0x3e, 0xbb, 0x68, 0xbc, 0xf5, 0xab, 0x01, 0x57, 0x92, 0x67, 0xba, 0xec, 0x84, 0x0a, 0x47, 0x4d,
0xea, 0x07, 0x70, 0x6d, 0xbe, 0x9f, 0xdd, 0xf9, 0x7c, 0x89, 0x16, 0xf5, 0xd5, 0xd1, 0x8a, 0xf1,
0x3e, 0x96, 0xdb, 0x3d, 0xda, 0xd6, 0x9a, 0x58, 0xbd, 0xaa, 0x6f, 0x01, 0x04, 0xd3, 0xa1, 0x47,
0x47, 0xb6, 0x8c, 0x57, 0x4e, 0xe9, 0x94, 0x35, 0xe7, 0x05, 0x99, 0x59, 0x7f, 0x1a, 0xa9, 0xea,
0xc5, 0xe4, 0xfb, 0x29, 0xe1, 0x62, 0xdf, 0xff, 0xca, 0xa7, 0xab, 0xf6, 0x48, 0xb4, 0x40, 0x53,
0xfe, 0xcb, 0x05, 0xda, 0x93, 0x21, 0x58, 0x69, 0xc3, 0xe9, 0xff, 0x90, 0xdc, 0xd9, 0xff, 0x90,
0x3b, 0x50, 0x75, 0x29, 0x0f, 0x3c, 0x67, 0xa6, 0xa1, 0xf3, 0x0a, 0xa0, 0x12, 0xf1, 0x24, 0xbc,
0xf5, 0x87, 0x01, 0xb7, 0x97, 0x9b, 0x8a, 0x09, 0x0f, 0x7c, 0xc6, 0xc9, 0x0a, 0x93, 0x3f, 0x87,
0x72, 0xf2, 0xd4, 0x39, 0xc5, 0x9e, 0x0a, 0x32, 0x9e, 0x2b, 0xc8, 0xc4, 0xca, 0x3d, 0xae, 0x26,
0x60, 0x56, 0x75, 0x6b, 0x42, 0xcf, 0x73, 0x91, 0x4b, 0xe5, 0xc2, 0xfa, 0x06, 0xee, 0xa4, 0x4a,
0x4e, 0x77, 0xf5, 0xe9, 0x89, 0xbf, 0xc2, 0xd4, 0x5b, 0x00, 0x7a, 0x69, 0xd8, 0xd3, 0x90, 0x46,
0xf1, 0x2d, 0x6b, 0xce, 0x41, 0x48, 0xad, 0xdf, 0x0c, 0xa8, 0xbc, 0x76, 0x8e, 0xa7, 0xf1, 0x78,
0xae, 0x43, 0x96, 0xd3, 0x71, 0x54, 0x2e, 0xf2, 0x28, 0x07, 0xb6, 0xa0, 0x13, 0xc2, 0x85, 0x33,
0x09, 0x94, 0x7e, 0x0e, 0xcf, 0x19, 0xf2, 0x51, 0xe1, 0x07, 0x74, 0xa4, 0x1c, 0xa9, 0x62, 0x4d,
0xa8, 0x1f, 0x1f, 0x67, 0xe6, 0xf9, 0x4e, 0x9c, 0x99, 0x98, 0xd4, 0x37, 0xae, 0x4b, 0xd9, 0x58,
0x25, 0x44, 0xdd, 0x28, 0x52, 0xb6, 0xc0, 0x91, 0xc3, 0x8f, 0xcc, 0x82, 0x62, 0xab, 0xb3, 0xf5,
0x13, 0x6c, 0xa6, 0x8c, 0x8b, 0x5d, 0x26, 0xc2, 0x71, 0x1d, 0xe1, 0x48, 0xac, 0x13, 0x12, 0xf2,
0xb8, 0xbc, 0x6b, 0x38, 0x26, 0x25, 0xd6, 0x61, 0xe8, 0x4f, 0x22, 0x73, 0xd5, 0x19, 0xad, 0x41,
0x46, 0xf8, 0xca, 0xcc, 0x1c, 0xce, 0x08, 0x1f, 0x59, 0xb2, 0x84, 0x98, 0x20, 0x4c, 0xec, 0x2b,
0x07, 0x72, 0x8d, 0x6c, 0xb3, 0x8a, 0x17, 0x78, 0xd6, 0xef, 0x06, 0xa0, 0xb3, 0x06, 0x9c, 0xf3,
0xf0, 0x13, 0x28, 0x4d, 0x22, 0xf3, 0xa2, 0xba, 0x48, 0x0d, 0xd2, 0xd5, 0xae, 0xe0, 0x44, 0x0b,
0xdd, 0x97, 0x08, 0x4a, 0x46, 0xfe, 0x0b, 0xc9, 0x51, 0x7c, 0x6d, 0x29, 0x02, 0x4e, 0xc4, 0xac,
0xbf, 0x0c, 0xd8, 0x3a, 0x8b, 0xdd, 0x65, 0x2e, 0xf9, 0xe1, 0x02, 0xb1, 0x7a, 0x77, 0x93, 0x37,
0xa0, 0xe0, 0x1f, 0x1e, 0x72, 0x22, 0xa2, 0xe8, 0x46, 0x94, 0xcc, 0x02, 0xa7, 0x3f, 0x92, 0xe8,
0x97, 0x5e, 0x9d, 0x4f, 0xe7, 0x3f, 0x97, 0xe4, 0xdf, 0xfa, 0xdb, 0x80, 0xeb, 0x2b, 0xbc, 0x40,
0x2f, 0xa0, 0x14, 0xfd, 0xe1, 0xc4, 0xfb, 0xe9, 0xde, 0x79, 0x36, 0x2a, 0xa5, 0x56, 0x44, 0x44,
0xab, 0x2a, 0x01, 0xd8, 0x3c, 0x84, 0xda, 0xc2, 0xd5, 0x92, 0xc9, 0xff, 0x78, 0x71, 0xf2, 0xdf,
0x7d, 0xeb, 0x63, 0x49, 0x54, 0xe6, 0x9b, 0xe0, 0x69, 0xed, 0x4d, 0xa5, 0x75, 0xef, 0xb3, 0x58,
0x73, 0x58, 0x50, 0xa7, 0x07, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xf8, 0x1d, 0xcf, 0x7e,
0x0d, 0x00, 0x00,
// 1326 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xdb, 0x6f, 0x13, 0x47,
0x17, 0x67, 0x7d, 0xf7, 0xf1, 0x05, 0x67, 0x80, 0xb0, 0x84, 0x0f, 0x62, 0xf6, 0xfb, 0x3e, 0xc9,
0xa8, 0xaa, 0x11, 0x41, 0x95, 0x50, 0x2f, 0x80, 0x09, 0x16, 0x75, 0x49, 0x6c, 0x18, 0x27, 0xa5,
0xe5, 0xa1, 0xab, 0xb1, 0x77, 0xe2, 0x8c, 0xb2, 0x9e, 0xdd, 0xee, 0x8c, 0xa3, 0xba, 0x0f, 0x7d,
0xee, 0x9f, 0x50, 0xb5, 0x8f, 0x95, 0xaa, 0xfe, 0x1f, 0x7d, 0xef, 0x7b, 0xdf, 0xfa, 0xa7, 0x54,
0x33, 0x7b, 0xf1, 0x3a, 0xb1, 0x03, 0x12, 0xea, 0xd3, 0xce, 0x39, 0x73, 0xce, 0x6f, 0xce, 0xfd,
0x2c, 0x6c, 0x8c, 0xbd, 0xe9, 0x74, 0xc6, 0x99, 0x64, 0x54, 0xb4, 0xfd, 0xc0, 0x93, 0x1e, 0x2a,
0xe9, 0xcf, 0x68, 0x76, 0xb4, 0x75, 0x65, 0x7c, 0x4c, 0xa4, 0xcd, 0x1c, 0xca, 0x25, 0x93, 0xf3,
0xf0, 0xda, 0x3a, 0x85, 0xfc, 0xf3, 0x80, 0x70, 0x89, 0xee, 0x40, 0x35, 0x56, 0x9e, 0xdb, 0xcc,
0x31, 0x8d, 0xa6, 0xd1, 0xaa, 0xe2, 0x4a, 0xc2, 0xeb, 0x39, 0xe8, 0x26, 0x94, 0xa7, 0x74, 0x3a,
0xa2, 0x81, 0xba, 0xcf, 0xe8, 0xfb, 0x52, 0xc8, 0xe8, 0x39, 0xe8, 0x3a, 0x14, 0x23, 0x7c, 0x33,
0xdb, 0x34, 0x5a, 0x65, 0x5c, 0x50, 0x64, 0xcf, 0x41, 0x57, 0x21, 0x3f, 0x76, 0xbd, 0xf1, 0x89,
0x99, 0x6b, 0x1a, 0xad, 0x1c, 0x0e, 0x09, 0xeb, 0x47, 0x03, 0x2e, 0xef, 0xc6, 0xd8, 0xfb, 0x1a,
0x04, 0x7d, 0x04, 0xf9, 0xc0, 0x73, 0xa9, 0x30, 0x8d, 0x66, 0xb6, 0x55, 0xdf, 0xd9, 0x6e, 0xc7,
0xa6, 0xb7, 0xcf, 0x48, 0xb6, 0xb1, 0x12, 0xc3, 0xa1, 0xb4, 0xf5, 0x08, 0xf2, 0x9a, 0x46, 0x0d,
0xa8, 0x1e, 0xf6, 0x5f, 0xf4, 0x07, 0xaf, 0xfb, 0x36, 0x1e, 0xec, 0x75, 0x1b, 0x97, 0x50, 0x15,
0x4a, 0xea, 0x64, 0x77, 0xf6, 0xf6, 0x1a, 0x06, 0xba, 0x06, 0x1b, 0x9a, 0xda, 0xef, 0xf4, 0x3b,
0xcf, 0xbb, 0xf6, 0xe1, 0xb0, 0x8b, 0x87, 0x8d, 0x8c, 0xf5, 0xb7, 0x01, 0x57, 0x93, 0x07, 0x5e,
0xd2, 0x60, 0xca, 0x84, 0x60, 0x1e, 0x17, 0xe8, 0x06, 0x94, 0x28, 0x17, 0xb6, 0xc7, 0xdd, 0xb9,
0x0e, 0x47, 0x09, 0x17, 0x29, 0x17, 0x03, 0xee, 0xce, 0x91, 0x09, 0x45, 0x3f, 0x60, 0xa7, 0x44,
0x52, 0x1d, 0x88, 0x12, 0x8e, 0x49, 0xf4, 0x19, 0x14, 0xc8, 0x78, 0x4c, 0x85, 0xd0, 0x61, 0xa8,
0xef, 0xfc, 0x7f, 0x85, 0x17, 0xa9, 0x47, 0xda, 0x1d, 0x2d, 0x8c, 0x23, 0x25, 0xeb, 0x00, 0x0a,
0x21, 0x07, 0x21, 0xa8, 0xc7, 0xde, 0x74, 0x76, 0x77, 0xbb, 0xc3, 0x61, 0xe3, 0x12, 0xda, 0x80,
0x5a, 0x7f, 0x60, 0xef, 0x77, 0xf7, 0x9f, 0x76, 0xf1, 0xf0, 0xf3, 0xde, 0xcb, 0x86, 0x81, 0xae,
0xc0, 0xe5, 0x5e, 0xff, 0xcb, 0xde, 0x41, 0xe7, 0xa0, 0x37, 0xe8, 0xdb, 0x83, 0xfe, 0xde, 0xd7,
0x8d, 0x0c, 0xaa, 0x03, 0x0c, 0xfa, 0x36, 0xee, 0xbe, 0x3a, 0xec, 0x0e, 0x0f, 0x1a, 0x59, 0xeb,
0xe7, 0x62, 0xca, 0xc5, 0x67, 0x54, 0x8c, 0x03, 0xe6, 0x4b, 0xe6, 0xf1, 0x45, 0x72, 0x8c, 0x54,
0x72, 0x50, 0x17, 0x8a, 0x61, 0x5e, 0x85, 0x99, 0x69, 0x66, 0x5b, 0x95, 0x9d, 0x0f, 0x56, 0x38,
0x91, 0x82, 0x69, 0x87, 0x69, 0x11, 0x5d, 0x2e, 0x83, 0x39, 0x8e, 0x75, 0xd1, 0x13, 0xa8, 0xf8,
0x0b, 0x4f, 0x75, 0x3c, 0x2a, 0x3b, 0xb7, 0x2f, 0x8e, 0x07, 0x4e, 0xab, 0xa0, 0x1d, 0x28, 0xc5,
0xf5, 0x6a, 0xe6, 0xb5, 0xfa, 0x66, 0x4a, 0x5d, 0xd7, 0x57, 0x78, 0x8b, 0x13, 0x39, 0xf4, 0x18,
0xf2, 0xaa, 0xf2, 0x84, 0x59, 0xd0, 0xa6, 0xdf, 0x7d, 0x8b, 0xe9, 0x0a, 0x25, 0x32, 0x3c, 0xd4,
0x53, 0x69, 0x1f, 0x11, 0x6e, 0xbb, 0x4c, 0x48, 0xb3, 0xd8, 0xcc, 0xb6, 0xca, 0xb8, 0x38, 0x22,
0x7c, 0x8f, 0x09, 0x89, 0xfa, 0x00, 0x63, 0x22, 0xe9, 0xc4, 0x0b, 0x18, 0x15, 0x66, 0x49, 0x3f,
0xd0, 0x7e, 0xdb, 0x03, 0x89, 0x42, 0xf8, 0x4a, 0x0a, 0x01, 0x3d, 0x04, 0x93, 0x04, 0xe3, 0x63,
0x76, 0x4a, 0xed, 0x29, 0x99, 0x70, 0x2a, 0x5d, 0xc6, 0x4f, 0xec, 0x30, 0x23, 0x65, 0x9d, 0x91,
0xcd, 0xe8, 0x7e, 0x3f, 0xb9, 0xde, 0xd5, 0x29, 0x7a, 0x0e, 0x75, 0xe2, 0x4c, 0x19, 0xb7, 0x05,
0x95, 0x92, 0xf1, 0x89, 0x30, 0x41, 0xc7, 0xa7, 0xb9, 0xc2, 0x9a, 0x8e, 0x12, 0x1c, 0x46, 0x72,
0xb8, 0x46, 0xd2, 0x24, 0xfa, 0x2f, 0xd4, 0x18, 0x97, 0x81, 0x67, 0x4f, 0xa9, 0x10, 0x64, 0x42,
0xcd, 0x8a, 0xee, 0xde, 0xaa, 0x66, 0xee, 0x87, 0x3c, 0x25, 0xe4, 0xcd, 0xd2, 0x42, 0xd5, 0x50,
0x48, 0x33, 0x63, 0xa1, 0xff, 0x40, 0x99, 0xf2, 0x71, 0x30, 0xf7, 0x25, 0x75, 0xcc, 0x9a, 0xee,
0x8a, 0x05, 0x03, 0x21, 0xc8, 0x49, 0x32, 0x11, 0x66, 0x5d, 0x47, 0x54, 0x9f, 0xb7, 0x0e, 0xa1,
0x9a, 0xae, 0x1c, 0xd4, 0x80, 0xec, 0x09, 0x0d, 0x7b, 0xad, 0x8c, 0xd5, 0x11, 0xdd, 0x83, 0xfc,
0x29, 0x71, 0x67, 0x61, 0x97, 0x55, 0x76, 0x6e, 0xac, 0x1d, 0x09, 0x38, 0x94, 0xfb, 0x38, 0xf3,
0xd0, 0xd8, 0x7a, 0x05, 0xb0, 0xc8, 0xea, 0x0a, 0xd0, 0x0f, 0x97, 0x41, 0xaf, 0xaf, 0x00, 0x55,
0xfa, 0x69, 0xc8, 0x37, 0x70, 0xf9, 0x4c, 0x1e, 0x57, 0xe0, 0xde, 0x5f, 0xc6, 0xbd, 0xb9, 0x0a,
0x37, 0x04, 0x99, 0xa7, 0xb0, 0xad, 0x6f, 0x60, 0x73, 0x75, 0xaa, 0xd0, 0x33, 0xd8, 0xf6, 0x19,
0x8f, 0x83, 0x6e, 0x13, 0xd7, 0xb5, 0xa3, 0xde, 0xb2, 0x29, 0x27, 0x23, 0x97, 0x3a, 0xd1, 0x5c,
0xba, 0xe9, 0x33, 0x1e, 0xa5, 0xa1, 0xe3, 0xba, 0x49, 0x4c, 0xb5, 0x88, 0xf5, 0x57, 0x06, 0x6a,
0x4b, 0x8e, 0xa1, 0x47, 0x8b, 0xfe, 0x36, 0x74, 0x0d, 0xff, 0x6f, 0x4d, 0x08, 0xde, 0xad, 0xb1,
0x33, 0xef, 0xd7, 0xd8, 0xd9, 0x77, 0x6c, 0xec, 0x6d, 0xa8, 0x44, 0xad, 0xa3, 0x17, 0x54, 0x4e,
0x07, 0x3e, 0xee, 0x26, 0xb5, 0x9f, 0xb6, 0xa0, 0xe4, 0x7b, 0x82, 0xa9, 0xae, 0xd3, 0xd3, 0x22,
0x8f, 0x13, 0xfa, 0x5f, 0x2a, 0x35, 0xcb, 0x81, 0x8d, 0x73, 0xb9, 0x3d, 0x6b, 0xa8, 0x71, 0xce,
0x50, 0x04, 0x39, 0x4e, 0xa6, 0xe1, 0x4b, 0x65, 0xac, 0xcf, 0x4b, 0xc6, 0x67, 0x97, 0x8d, 0xb7,
0x7e, 0x32, 0xe0, 0x4a, 0xf2, 0x4c, 0x8f, 0x9f, 0x32, 0x49, 0xf4, 0xf4, 0x7e, 0x00, 0xd7, 0x16,
0x3b, 0xdb, 0x59, 0xcc, 0x9c, 0x68, 0x79, 0x5f, 0x1d, 0xaf, 0x19, 0xf9, 0x13, 0xb5, 0xf1, 0xa3,
0x0d, 0x1e, 0x12, 0xeb, 0xd7, 0xf7, 0x2d, 0x00, 0x7f, 0x36, 0x72, 0xd9, 0xd8, 0x56, 0xf1, 0xca,
0x69, 0x9d, 0x72, 0xc8, 0x79, 0x41, 0xe7, 0xd6, 0xef, 0x46, 0xaa, 0x7a, 0x31, 0xfd, 0x76, 0x46,
0x85, 0x3c, 0xf0, 0xbe, 0xf0, 0xd8, 0xba, 0xdd, 0x12, 0x2d, 0xd5, 0x94, 0xff, 0x6a, 0xa9, 0xf6,
0x55, 0x08, 0xd6, 0xda, 0x70, 0xf6, 0xdf, 0x24, 0x77, 0xfe, 0xdf, 0xe4, 0x0e, 0x54, 0x1d, 0x26,
0x7c, 0x97, 0xcc, 0x43, 0xe8, 0xbc, 0x06, 0xa8, 0x44, 0x3c, 0x05, 0x6f, 0xfd, 0x66, 0xc0, 0xed,
0xd5, 0xa6, 0x62, 0x2a, 0x7c, 0x8f, 0x0b, 0xba, 0xc6, 0xe4, 0x4f, 0xa1, 0x9c, 0x3c, 0x75, 0x41,
0xb1, 0xa7, 0x82, 0x8c, 0x17, 0x0a, 0x2a, 0xb1, 0x6a, 0xb7, 0xeb, 0xa9, 0x98, 0xd5, 0xdd, 0x9a,
0xd0, 0x8b, 0x5c, 0xe4, 0x52, 0xb9, 0xb0, 0xbe, 0x82, 0x3b, 0xa9, 0x92, 0x0b, 0xbb, 0xfa, 0xec,
0x16, 0x58, 0x63, 0xea, 0x2d, 0x80, 0x70, 0x91, 0xd8, 0xb3, 0x80, 0x45, 0xf1, 0x2d, 0x87, 0x9c,
0xc3, 0x80, 0x59, 0xbf, 0x18, 0x50, 0x79, 0x4d, 0x4e, 0x66, 0xf1, 0xc8, 0x6e, 0x40, 0x56, 0xb0,
0x49, 0x54, 0x2e, 0xea, 0xa8, 0x86, 0xb8, 0x64, 0x53, 0x2a, 0x24, 0x99, 0xfa, 0x5a, 0x3f, 0x87,
0x17, 0x0c, 0xf5, 0xa8, 0xf4, 0x7c, 0x36, 0xd6, 0x8e, 0x54, 0x71, 0x48, 0xe8, 0x9f, 0x21, 0x32,
0x77, 0x3d, 0x12, 0x67, 0x26, 0x26, 0xc3, 0x1b, 0xc7, 0x61, 0x7c, 0xa2, 0x13, 0xa2, 0x6f, 0x34,
0xa9, 0x5a, 0xe0, 0x98, 0x88, 0x63, 0xb3, 0xa0, 0xd9, 0xfa, 0x6c, 0xfd, 0x00, 0x5b, 0x29, 0xe3,
0x62, 0x97, 0xa9, 0x24, 0x0e, 0x91, 0x44, 0x61, 0x9d, 0xd2, 0x40, 0xc4, 0xe5, 0x5d, 0xc3, 0x31,
0xa9, 0xb0, 0x8e, 0x02, 0x6f, 0x1a, 0x99, 0xab, 0xcf, 0xa8, 0x0e, 0x19, 0xe9, 0x69, 0x33, 0x73,
0x38, 0x23, 0x3d, 0x64, 0xa9, 0x12, 0xe2, 0x92, 0x72, 0x79, 0xa0, 0x1d, 0xc8, 0x35, 0xb3, 0xad,
0x2a, 0x5e, 0xe2, 0x59, 0xbf, 0x1a, 0x80, 0xce, 0x1b, 0x70, 0xc1, 0xc3, 0x4f, 0xa0, 0x34, 0x8d,
0xcc, 0x8b, 0xea, 0x22, 0x35, 0x48, 0xd7, 0xbb, 0x82, 0x13, 0x2d, 0x74, 0x5f, 0x21, 0x68, 0x19,
0xf5, 0x7f, 0xa4, 0x46, 0xf1, 0xb5, 0x95, 0x08, 0x38, 0x11, 0xb3, 0xfe, 0x30, 0x60, 0xfb, 0x3c,
0x76, 0x8f, 0x3b, 0xf4, 0xbb, 0x77, 0x88, 0xd5, 0xfb, 0x9b, 0xbc, 0x09, 0x05, 0xef, 0xe8, 0x48,
0x50, 0x19, 0x45, 0x37, 0xa2, 0x54, 0x16, 0x04, 0xfb, 0x9e, 0x46, 0xbf, 0xf9, 0xfa, 0x7c, 0x36,
0xff, 0xb9, 0x24, 0xff, 0xd6, 0x9f, 0x06, 0x5c, 0x5f, 0xe3, 0x05, 0x7a, 0x01, 0xa5, 0xe8, 0xaf,
0x27, 0xde, 0x4f, 0xf7, 0x2e, 0xb2, 0x51, 0x2b, 0xb5, 0x23, 0x22, 0x5a, 0x55, 0x09, 0xc0, 0xd6,
0x11, 0xd4, 0x96, 0xae, 0x56, 0x4c, 0xfe, 0xc7, 0xcb, 0x93, 0xff, 0xee, 0x5b, 0x1f, 0x4b, 0xa2,
0xb2, 0xd8, 0x04, 0x4f, 0x6b, 0x6f, 0x2a, 0xed, 0x7b, 0x9f, 0xc4, 0x9a, 0xa3, 0x82, 0x3e, 0x3d,
0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0x53, 0xc5, 0x37, 0x14, 0x92, 0x0d, 0x00, 0x00,
}

View File

@ -48,6 +48,7 @@ message CommunityDescription {
string intro_message = 11;
string outro_message = 12;
bool encrypted = 13;
repeated string tags = 14;
}
message CommunityAdminSettings {

View File

@ -0,0 +1,98 @@
package requests
var TagsEmojies map[string]string
func init() {
TagsEmojies = make(map[string]string)
TagsEmojies["Activism"] = "✊"
TagsEmojies["Art"] = "🎨"
TagsEmojies["Blockchain"] = "🔗"
TagsEmojies["Books & blogs"] = "📚"
TagsEmojies["Career"] = "💼"
TagsEmojies["Collaboration"] = "🤝"
TagsEmojies["Commerce"] = "🛒"
TagsEmojies["Culture"] = "🎎"
TagsEmojies["DAO"] = "🚀"
TagsEmojies["DeFi"] = "📈"
TagsEmojies["Design"] = "🧩"
TagsEmojies["DIY"] = "🔨"
TagsEmojies["Environment"] = "🌿"
TagsEmojies["Education"] = "🎒"
TagsEmojies["Entertainment"] = "🍿"
TagsEmojies["Ethereum"] = "Ξ"
TagsEmojies["Event"] = "🗓"
TagsEmojies["Fantasy"] = "🧙‍♂️"
TagsEmojies["Fashion"] = "🧦"
TagsEmojies["Food"] = "🌶"
TagsEmojies["Gaming"] = "🎮"
TagsEmojies["Global"] = "🌍"
TagsEmojies["Health"] = "🧠"
TagsEmojies["Hobby"] = "📐"
TagsEmojies["Innovation"] = "🧪"
TagsEmojies["Language"] = "📜"
TagsEmojies["Lifestyle"] = "✨"
TagsEmojies["Local"] = "📍"
TagsEmojies["Love"] = "❤️"
TagsEmojies["Markets"] = "💎"
TagsEmojies["Movies & TV"] = "🎞"
TagsEmojies["Music"] = "🎶"
TagsEmojies["News"] = "🗞"
TagsEmojies["NFT"] = "🖼"
TagsEmojies["Non-profit"] = "🙏"
TagsEmojies["NSFW"] = "🍆"
TagsEmojies["Org"] = "🏢"
TagsEmojies["Pets"] = "🐶"
TagsEmojies["Play"] = "🎲"
TagsEmojies["Podcast"] = "🎙️"
TagsEmojies["Politics"] = "🗳️"
TagsEmojies["Product"] = "🍱"
TagsEmojies["Psyche"] = "🍁"
TagsEmojies["Privacy"] = "👻"
TagsEmojies["Security"] = "🔒"
TagsEmojies["Social"] = "☕"
TagsEmojies["Software dev"] = "👩‍💻"
TagsEmojies["Sports"] = "⚽️"
TagsEmojies["Tech"] = "📱"
TagsEmojies["Travel"] = "🗺"
TagsEmojies["Vehicles"] = "🚕"
TagsEmojies["Web3"] = "🌐"
}
func ValidateTags(input []string) bool {
for _, t := range input {
_, ok := TagsEmojies[t]
if !ok {
return false
}
}
if len(unique(input)) != len(input) {
// Contains duplicates. Shouldn't have happened
return false
}
return true
}
func RemoveUnknownAndDeduplicateTags(input []string) []string {
var result []string
for _, t := range input {
_, ok := TagsEmojies[t]
if ok {
result = append(result, t)
}
}
return unique(result)
}
func unique(slice []string) []string {
uniqMap := make(map[string]struct{})
for _, v := range slice {
uniqMap[v] = struct{}{}
}
uniqSlice := make([]string, 0, len(uniqMap))
for v := range uniqMap {
uniqSlice = append(uniqSlice, v)
}
return uniqSlice
}

View File

@ -16,6 +16,7 @@ var (
ErrCreateCommunityInvalidIntroMessage = errors.New("create-community: invalid intro message")
ErrCreateCommunityInvalidOutroMessage = errors.New("create-community: invalid outro message")
ErrCreateCommunityInvalidMembership = errors.New("create-community: invalid membership")
ErrCreateCommunityInvalidTags = errors.New("create-community: invalid tags")
)
const (
@ -43,6 +44,7 @@ type CreateCommunity struct {
HistoryArchiveSupportEnabled bool `json:"historyArchiveSupportEnabled,omitempty"`
PinMessageAllMembersEnabled bool `json:"pinMessageAllMembersEnabled,omitempty"`
Encrypted bool `json:"encrypted,omitempty"`
Tags []string `json:"tags,omitempty"`
}
func adaptIdentityImageToProtobuf(img *userimages.IdentityImage) *protobuf.IdentityImage {
@ -78,6 +80,10 @@ func (c *CreateCommunity) Validate() error {
return ErrCreateCommunityInvalidColor
}
if !ValidateTags(c.Tags) {
return ErrCreateCommunityInvalidTags
}
return nil
}
@ -125,6 +131,7 @@ func (c *CreateCommunity) ToCommunityDescription() (*protobuf.CommunityDescripti
IntroMessage: c.IntroMessage,
OutroMessage: c.OutroMessage,
Encrypted: c.Encrypted,
Tags: c.Tags,
}
return description, nil
}

View File

@ -89,6 +89,7 @@ type ChannelGroup struct {
Description string `json:"description"`
IntroMessage string `json:"introMessage"`
OutroMessage string `json:"outroMessage"`
Tags []communities.CommunityTag `json:"tags"`
Permissions *protobuf.CommunityPermissions `json:"permissions"`
Members map[string]*protobuf.CommunityMember `json:"members"`
CanManageUsers bool `json:"canManageUsers"`
@ -130,6 +131,7 @@ func (api *API) GetChats(ctx context.Context) (map[string]ChannelGroup, error) {
Description: "",
IntroMessage: "",
OutroMessage: "",
Tags: []communities.CommunityTag{},
Permissions: &protobuf.CommunityPermissions{},
Muted: false,
}
@ -159,6 +161,7 @@ func (api *API) GetChats(ctx context.Context) (map[string]ChannelGroup, error) {
Description: community.DescriptionText(),
IntroMessage: community.IntroMessage(),
OutroMessage: community.OutroMessage(),
Tags: community.Tags(),
Permissions: community.Description().Permissions,
Members: community.Description().Members,
CanManageUsers: community.CanManageUsers(community.MemberIdentity()),

View File

@ -352,6 +352,11 @@ func (api *PublicAPI) JoinedCommunities(parent context.Context) ([]*communities.
return api.service.messenger.JoinedCommunities()
}
// CommunityTags return the list of possible community tags
func (api *PublicAPI) CommunityTags(parent context.Context) map[string]string {
return requests.TagsEmojies
}
// CuratedCommunities returns the list of curated communities stored in the smart contract. If a community is
// already known by the node, its description will be returned and and will asynchronously retrieve the
// description for the communities it does not know