fix: Remove proof of membership for the profile showcase communities (#4961)

https://github.com/status-im/status-desktop/issues/14084
This commit is contained in:
Mikhail Rogachev 2024-03-22 21:50:15 +01:00 committed by GitHub
parent 492f0b1242
commit e878f89b65
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 5 additions and 46 deletions

View File

@ -86,9 +86,8 @@ type ProfileShowcasePreferences struct {
// Profile showcase for a contact // Profile showcase for a contact
type ProfileShowcaseCommunity struct { type ProfileShowcaseCommunity struct {
CommunityID string `json:"communityId"` CommunityID string `json:"communityId"`
Order int `json:"order"` Order int `json:"order"`
MembershipStatus ProfileShowcaseMembershipStatus `json:"membershipStatus"`
} }
type ProfileShowcaseAccount struct { type ProfileShowcaseAccount struct {

View File

@ -1,7 +1,6 @@
package protocol package protocol
import ( import (
"bytes"
"context" "context"
"crypto/ecdsa" "crypto/ecdsa"
crand "crypto/rand" crand "crypto/rand"
@ -16,7 +15,6 @@ import (
eth_common "github.com/ethereum/go-ethereum/common" eth_common "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/multiaccounts/accounts" "github.com/status-im/status-go/multiaccounts/accounts"
"github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/common"
@ -235,40 +233,8 @@ func (m *Messenger) fromProfileShowcaseCommunityProto(senderPubKey *ecdsa.Public
entries := []*identity.ProfileShowcaseCommunity{} entries := []*identity.ProfileShowcaseCommunity{}
for _, message := range messages { for _, message := range messages {
entry := &identity.ProfileShowcaseCommunity{ entry := &identity.ProfileShowcaseCommunity{
CommunityID: message.CommunityId, CommunityID: message.CommunityId,
Order: int(message.Order), Order: int(message.Order),
MembershipStatus: identity.ProfileShowcaseMembershipStatusUnproven,
}
community, err := m.FetchCommunity(&FetchCommunityRequest{
CommunityKey: message.CommunityId,
Shard: nil,
TryDatabase: true,
WaitForResponse: true,
})
if err != nil {
m.logger.Warn("failed to fetch community for profile entry ", zap.Error(err))
}
if community != nil && community.Encrypted() {
grant, err := community.VerifyGrantSignature(message.Grant)
if err != nil {
m.logger.Warn("failed to verify grant signature ", zap.Error(err))
entry.MembershipStatus = identity.ProfileShowcaseMembershipStatusNotAMember
} else {
if grant != nil && bytes.Equal(grant.MemberId, crypto.CompressPubkey(senderPubKey)) {
entry.MembershipStatus = identity.ProfileShowcaseMembershipStatusProvenMember
} else { // Show as not a member if membership can't be proven
entry.MembershipStatus = identity.ProfileShowcaseMembershipStatusNotAMember
}
}
} else if community != nil {
// Use member list as a proof for unecrypted communities
if community.HasMember(senderPubKey) {
entry.MembershipStatus = identity.ProfileShowcaseMembershipStatusProvenMember
} else {
entry.MembershipStatus = identity.ProfileShowcaseMembershipStatusNotAMember
}
} }
entries = append(entries, entry) entries = append(entries, entry)

View File

@ -628,9 +628,7 @@ func (s *TestMessengerProfileShowcase) TestProfileShowcaseProofOfMembershipUnenc
// Verify community's data // Verify community's data
s.Require().Len(profileShowcase.Communities, 2) s.Require().Len(profileShowcase.Communities, 2)
s.Require().Equal(profileShowcase.Communities[0].CommunityID, aliceCommunity.IDString()) s.Require().Equal(profileShowcase.Communities[0].CommunityID, aliceCommunity.IDString())
s.Require().Equal(profileShowcase.Communities[0].MembershipStatus, identity.ProfileShowcaseMembershipStatusProvenMember)
s.Require().Equal(profileShowcase.Communities[1].CommunityID, bobCommunity.IDString()) s.Require().Equal(profileShowcase.Communities[1].CommunityID, bobCommunity.IDString())
s.Require().Equal(profileShowcase.Communities[1].MembershipStatus, identity.ProfileShowcaseMembershipStatusNotAMember)
} }
func (s *TestMessengerProfileShowcase) TestProfileShowcaseProofOfMembershipEncryptedCommunity() { func (s *TestMessengerProfileShowcase) TestProfileShowcaseProofOfMembershipEncryptedCommunity() {
@ -696,7 +694,5 @@ func (s *TestMessengerProfileShowcase) TestProfileShowcaseProofOfMembershipEncry
// Verify community's data // Verify community's data
s.Require().Len(profileShowcase.Communities, 2) s.Require().Len(profileShowcase.Communities, 2)
s.Require().Equal(profileShowcase.Communities[0].CommunityID, aliceCommunity.IDString()) s.Require().Equal(profileShowcase.Communities[0].CommunityID, aliceCommunity.IDString())
s.Require().Equal(profileShowcase.Communities[0].MembershipStatus, identity.ProfileShowcaseMembershipStatusProvenMember)
s.Require().Equal(profileShowcase.Communities[1].CommunityID, bobCommunity.IDString()) s.Require().Equal(profileShowcase.Communities[1].CommunityID, bobCommunity.IDString())
s.Require().Equal(profileShowcase.Communities[1].MembershipStatus, identity.ProfileShowcaseMembershipStatusNotAMember)
} }

View File

@ -405,9 +405,7 @@ func (db sqlitePersistence) getProfileShowcaseCommunitiesContact(tx *sql.Tx, con
communities := []*identity.ProfileShowcaseCommunity{} communities := []*identity.ProfileShowcaseCommunity{}
for rows.Next() { for rows.Next() {
community := &identity.ProfileShowcaseCommunity{ community := &identity.ProfileShowcaseCommunity{}
MembershipStatus: identity.ProfileShowcaseMembershipStatusUnproven,
}
err := rows.Scan(&community.CommunityID, &community.Order) err := rows.Scan(&community.CommunityID, &community.Order)
if err != nil { if err != nil {