feat(communities): enable RequestCommunityInfo to use a privateKey (#3681)

This commit is contained in:
Jonathan Rainville 2023-07-07 14:26:38 -04:00 committed by GitHub
parent 2613064356
commit e9d8f4cab2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 2 deletions

View File

@ -3273,3 +3273,16 @@ func (s *MessengerCommunitiesSuite) TestHandleImport() {
s.Require().NotNil(chat)
s.Require().Equal(0, int(chat.UnviewedMessagesCount))
}
func (s *MessengerCommunitiesSuite) TestGetCommunityIdFromKey() {
publicKey := "0x029e4777ce55f20373db33546c8681a082bd181d665c87e18d4306766de9302b53"
privateKey := "0x3f932031cb5f94ba7eb8ab4c824c3677973ab01fde65d1b89e0b3f470003a2cd"
// Public key returns the same
communityID := s.bob.GetCommunityIDFromKey(publicKey)
s.Require().Equal(communityID, publicKey)
// Private key returns the public key
communityID = s.bob.GetCommunityIDFromKey(privateKey)
s.Require().Equal(communityID, publicKey)
}

View File

@ -1839,10 +1839,25 @@ func (m *Messenger) findCommunityInfoFromDB(communityID string) (*communities.Co
return community, nil
}
func (m *Messenger) GetCommunityIDFromKey(communityKey string) string {
// Check if the key is a private key
privateKey, err := crypto.HexToECDSA(communityKey[2:])
communityID := ""
if err != nil {
// Not a private key, use the public key
communityID = communityKey
} else {
// It is a privateKey
communityID = types.HexBytes(crypto.CompressPubkey(&privateKey.PublicKey)).String()
}
return communityID
}
// RequestCommunityInfoFromMailserver installs filter for community and requests its details
// from mailserver. It waits until it has the community before returning it.
// If useDatabase is true, it searches for community in database and does not request mailserver.
func (m *Messenger) RequestCommunityInfoFromMailserver(communityID string, useDatabase bool) (*communities.Community, error) {
func (m *Messenger) RequestCommunityInfoFromMailserver(privateOrPublicKey string, useDatabase bool) (*communities.Community, error) {
communityID := m.GetCommunityIDFromKey(privateOrPublicKey)
if useDatabase {
community, err := m.findCommunityInfoFromDB(communityID)
if err != nil {
@ -1858,7 +1873,9 @@ func (m *Messenger) RequestCommunityInfoFromMailserver(communityID string, useDa
// RequestCommunityInfoFromMailserverAsync installs filter for community and requests its details
// from mailserver. When response received it will be passed through signals handler
func (m *Messenger) RequestCommunityInfoFromMailserverAsync(communityID string) error {
func (m *Messenger) RequestCommunityInfoFromMailserverAsync(privateOrPublicKey string) error {
communityID := m.GetCommunityIDFromKey(privateOrPublicKey)
community, err := m.findCommunityInfoFromDB(communityID)
if err != nil {
return err