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 { if chat == nil { return ErrInvalidCommunityDescription } if chat.Permissions == nil { return ErrInvalidCommunityDescriptionNoChatPermissions } if chat.Permissions.Access == protobuf.CommunityPermissions_UNKNOWN_ACCESS { return ErrInvalidCommunityDescriptionUnknownChatAccess } if len(chat.CategoryId) != 0 { if _, exists := desc.Categories[chat.CategoryId]; !exists { return ErrInvalidCommunityDescriptionUnknownChatCategory } } if chat.Identity == nil { return ErrInvalidCommunityDescriptionChatIdentity } for pk := range chat.Members { if desc.Members == nil { return ErrInvalidCommunityDescriptionMemberInChatButNotInOrg } // Check member is in the org as well if _, ok := desc.Members[pk]; !ok { return ErrInvalidCommunityDescriptionMemberInChatButNotInOrg } } return nil } func validateCommunityCategory(category *protobuf.CommunityCategory) error { if len(category.CategoryId) == 0 { return ErrInvalidCommunityDescriptionCategoryNoID } if len(category.Name) == 0 { return ErrInvalidCommunityDescriptionCategoryNoName } return nil } func ValidateCommunityDescription(desc *protobuf.CommunityDescription) error { if desc == nil { return ErrInvalidCommunityDescription } if desc.Permissions == nil { return ErrInvalidCommunityDescriptionNoOrgPermissions } if desc.Permissions.Access == protobuf.CommunityPermissions_UNKNOWN_ACCESS { return ErrInvalidCommunityDescriptionUnknownOrgAccess } valid := requests.ValidateTags(desc.Tags) if !valid { return ErrInvalidCommunityTags } for _, category := range desc.Categories { if err := validateCommunityCategory(category); err != nil { return err } } for _, chat := range desc.Chats { if err := validateCommunityChat(desc, chat); err != nil { return err } } return nil }