fix: correct parsing shared url without data (#4283)

This commit is contained in:
Igor Sirotin 2023-11-10 16:33:37 +00:00 committed by GitHub
parent de12ca885c
commit a178d724b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 113 additions and 174 deletions

View File

@ -14,6 +14,7 @@ import (
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/status-im/status-go/api/multiformat"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/images"
@ -1299,6 +1300,14 @@ func (o *Community) IDString() string {
return types.EncodeHex(o.ID())
}
func (o *Community) UncompressedIDString() string {
return types.EncodeHex(crypto.FromECDSAPub(o.config.ID))
}
func (o *Community) SerializedID() (string, error) {
return multiformat.SerializeLegacyKey(o.UncompressedIDString())
}
func (o *Community) StatusUpdatesChannelID() string {
return o.IDString() + "-ping"
}

View File

@ -152,7 +152,7 @@ func (u *StatusUnfurler) Unfurl() (*common.StatusLinkPreview, error) {
preview := new(common.StatusLinkPreview)
preview.URL = u.url
resp, err := u.m.ParseSharedURL(u.url)
resp, err := ParseSharedURL(u.url)
if err != nil {
return nil, fmt.Errorf("failed to parse shared url: %w", err)
}

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/protobuf/proto"
"github.com/status-im/status-go/api/multiformat"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/common"
@ -64,51 +65,48 @@ const channelUUIDRegExp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9
var channelRegExp = regexp.MustCompile(channelUUIDRegExp)
func (m *Messenger) SerializePublicKey(compressedKey types.HexBytes) (string, error) {
func decodeCommunityID(serialisedPublicKey string) (string, error) {
deserializedCommunityID, err := multiformat.DeserializeCompressedKey(serialisedPublicKey)
if err != nil {
return "", err
}
communityID, err := common.HexToPubkey(deserializedCommunityID)
if err != nil {
return "", err
}
return types.EncodeHex(crypto.CompressPubkey(communityID)), nil
}
func serializePublicKey(compressedKey types.HexBytes) (string, error) {
return utils.SerializePublicKey(compressedKey)
}
func (m *Messenger) DeserializePublicKey(compressedKey string) (types.HexBytes, error) {
func deserializePublicKey(compressedKey string) (types.HexBytes, error) {
return utils.DeserializePublicKey(compressedKey)
}
func (m *Messenger) ShareCommunityURLWithChatKey(communityID types.HexBytes) (string, error) {
shortKey, err := m.SerializePublicKey(communityID)
shortKey, err := serializePublicKey(communityID)
if err != nil {
return "", err
}
return fmt.Sprintf("%s/c#%s", baseShareURL, shortKey), nil
}
func (m *Messenger) prepareCommunityData(community *communities.Community) *CommunityURLData {
return &CommunityURLData{
DisplayName: community.Identity().DisplayName,
Description: community.DescriptionText(),
MembersCount: uint32(community.MembersCount()),
Color: community.Identity().GetColor(),
TagIndices: community.TagsIndices(),
CommunityID: community.IDString(),
}
}
func (m *Messenger) parseCommunityURLWithChatKey(urlData string) (*URLDataResponse, error) {
communityID, err := m.DeserializePublicKey(urlData)
func parseCommunityURLWithChatKey(urlData string) (*URLDataResponse, error) {
communityID, err := decodeCommunityID(urlData)
if err != nil {
return nil, err
}
community, err := m.GetCommunityByID(communityID)
if err != nil {
return nil, err
}
if community == nil {
return nil, fmt.Errorf("community with communityID %s not found", communityID)
}
return &URLDataResponse{
Community: m.prepareCommunityData(community),
Shard: community.Shard(),
Community: &CommunityURLData{
CommunityID: communityID,
TagIndices: []uint32{},
},
Shard: nil,
}, nil
}
@ -136,7 +134,7 @@ func (m *Messenger) prepareEncodedCommunityData(community *communities.Community
return "", "", err
}
shortKey, err := m.SerializePublicKey(community.ID())
shortKey, err := serializePublicKey(community.ID())
if err != nil {
return "", "", err
}
@ -167,8 +165,8 @@ func (m *Messenger) ShareCommunityURLWithData(communityID types.HexBytes) (strin
return fmt.Sprintf("%s/c/%s#%s", baseShareURL, data, shortKey), nil
}
func (m *Messenger) parseCommunityURLWithData(data string, chatKey string) (*URLDataResponse, error) {
communityID, err := m.DeserializePublicKey(chatKey)
func parseCommunityURLWithData(data string, chatKey string) (*URLDataResponse, error) {
communityID, err := deserializePublicKey(chatKey)
if err != nil {
return nil, err
}
@ -208,7 +206,7 @@ func (m *Messenger) ShareCommunityChannelURLWithChatKey(request *requests.Commun
return "", err
}
shortKey, err := m.SerializePublicKey(request.CommunityID)
shortKey, err := serializePublicKey(request.CommunityID)
if err != nil {
return "", err
}
@ -225,16 +223,7 @@ func (m *Messenger) ShareCommunityChannelURLWithChatKey(request *requests.Commun
return fmt.Sprintf("%s/cc/%s#%s", baseShareURL, request.ChannelID, shortKey), nil
}
func (m *Messenger) prepareCommunityChannelData(channel *protobuf.CommunityChat) *CommunityChannelURLData {
return &CommunityChannelURLData{
Emoji: channel.Identity.Emoji,
DisplayName: channel.Identity.DisplayName,
Description: channel.Identity.Description,
Color: channel.Identity.Color,
}
}
func (m *Messenger) parseCommunityChannelURLWithChatKey(channelID string, publickKey string) (*URLDataResponse, error) {
func parseCommunityChannelURLWithChatKey(channelID string, publicKey string) (*URLDataResponse, error) {
valid, err := regexp.MatchString(channelUUIDRegExp, channelID)
if err != nil {
return nil, err
@ -244,29 +233,20 @@ func (m *Messenger) parseCommunityChannelURLWithChatKey(channelID string, public
return nil, fmt.Errorf("channelID should be UUID, got %s", channelID)
}
communityID, err := m.DeserializePublicKey(publickKey)
communityID, err := decodeCommunityID(publicKey)
if err != nil {
return nil, err
}
community, err := m.GetCommunityByID(communityID)
if err != nil {
return nil, err
}
if community == nil {
return nil, fmt.Errorf("community with communityID %s not found", communityID)
}
channel, ok := community.Chats()[channelID]
if !ok {
return nil, fmt.Errorf("channel with channelID %s not found", channelID)
}
return &URLDataResponse{
Community: m.prepareCommunityData(community),
Channel: m.prepareCommunityChannelData(channel),
Shard: community.Shard(),
Community: &CommunityURLData{
CommunityID: communityID,
TagIndices: []uint32{},
},
Channel: &CommunityChannelURLData{
ChannelUUID: channelID,
},
Shard: nil,
}, nil
}
@ -303,7 +283,7 @@ func (m *Messenger) prepareEncodedCommunityChannelData(community *communities.Co
return "", "", err
}
shortKey, err := m.SerializePublicKey(community.ID())
shortKey, err := serializePublicKey(community.ID())
if err != nil {
return "", "", err
}
@ -347,8 +327,8 @@ func (m *Messenger) ShareCommunityChannelURLWithData(request *requests.Community
return fmt.Sprintf("%s/cc/%s#%s", baseShareURL, data, shortKey), nil
}
func (m *Messenger) parseCommunityChannelURLWithData(data string, chatKey string) (*URLDataResponse, error) {
communityID, err := m.DeserializePublicKey(chatKey)
func parseCommunityChannelURLWithData(data string, chatKey string) (*URLDataResponse, error) {
communityID, err := deserializePublicKey(chatKey)
if err != nil {
return nil, err
}
@ -396,7 +376,7 @@ func (m *Messenger) ShareUserURLWithChatKey(contactID string) (string, error) {
return "", err
}
shortKey, err := m.SerializePublicKey(crypto.CompressPubkey(publicKey))
shortKey, err := serializePublicKey(crypto.CompressPubkey(publicKey))
if err != nil {
return "", err
}
@ -404,14 +384,8 @@ func (m *Messenger) ShareUserURLWithChatKey(contactID string) (string, error) {
return fmt.Sprintf("%s/u#%s", baseShareURL, shortKey), nil
}
func (m *Messenger) prepareContactData(contact *Contact) *ContactURLData {
return &ContactURLData{
DisplayName: contact.DisplayName,
}
}
func (m *Messenger) parseUserURLWithChatKey(urlData string) (*URLDataResponse, error) {
pubKeyBytes, err := m.DeserializePublicKey(urlData)
func parseUserURLWithChatKey(urlData string) (*URLDataResponse, error) {
pubKeyBytes, err := deserializePublicKey(urlData)
if err != nil {
return nil, err
}
@ -421,15 +395,15 @@ func (m *Messenger) parseUserURLWithChatKey(urlData string) (*URLDataResponse, e
return nil, err
}
contactID := common.PubkeyToHex(pubKey)
contact := m.GetContactByID(contactID)
if contact == nil {
return nil, ErrContactNotFound
serializedPublicKey, err := multiformat.SerializeLegacyKey(common.PubkeyToHex(pubKey))
if err != nil {
return nil, err
}
return &URLDataResponse{
Contact: m.prepareContactData(contact),
Contact: &ContactURLData{
PublicKey: serializedPublicKey,
},
}, nil
}
@ -441,7 +415,7 @@ func (m *Messenger) ShareUserURLWithENS(contactID string) (string, error) {
return fmt.Sprintf("%s/u#%s", baseShareURL, contact.EnsName), nil
}
func (m *Messenger) parseUserURLWithENS(ensName string) (*URLDataResponse, error) {
func parseUserURLWithENS(ensName string) (*URLDataResponse, error) {
// TODO: fetch contact by ens name
return nil, fmt.Errorf("not implemented yet")
}
@ -452,7 +426,7 @@ func (m *Messenger) prepareEncodedUserData(contact *Contact) (string, string, er
return "", "", err
}
shortKey, err := m.SerializePublicKey(crypto.CompressPubkey(pk))
shortKey, err := serializePublicKey(crypto.CompressPubkey(pk))
if err != nil {
return "", "", err
}
@ -498,7 +472,7 @@ func (m *Messenger) ShareUserURLWithData(contactID string) (string, error) {
return fmt.Sprintf("%s/u/%s#%s", baseShareURL, data, shortKey), nil
}
func (m *Messenger) parseUserURLWithData(data string, chatKey string) (*URLDataResponse, error) {
func parseUserURLWithData(data string, chatKey string) (*URLDataResponse, error) {
urlData, err := urls.DecodeDataURL(data)
if err != nil {
return nil, err
@ -542,14 +516,14 @@ func splitSharedURLData(data string) (string, string, error) {
return contents[0], contents[1], nil
}
func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) {
func ParseSharedURL(url string) (*URLDataResponse, error) {
if strings.HasPrefix(url, sharedURLUserPrefix) {
chatKey := strings.TrimPrefix(url, sharedURLUserPrefix)
if strings.HasPrefix(chatKey, "zQ3sh") {
return m.parseUserURLWithChatKey(chatKey)
return parseUserURLWithChatKey(chatKey)
}
return m.parseUserURLWithENS(chatKey)
return parseUserURLWithENS(chatKey)
}
if strings.HasPrefix(url, sharedURLUserPrefixWithData) {
@ -558,12 +532,12 @@ func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) {
if err != nil {
return nil, err
}
return m.parseUserURLWithData(encodedData, chatKey)
return parseUserURLWithData(encodedData, chatKey)
}
if strings.HasPrefix(url, sharedURLCommunityPrefix) {
chatKey := strings.TrimPrefix(url, sharedURLCommunityPrefix)
return m.parseCommunityURLWithChatKey(chatKey)
return parseCommunityURLWithChatKey(chatKey)
}
if strings.HasPrefix(url, sharedURLCommunityPrefixWithData) {
@ -572,7 +546,7 @@ func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) {
if err != nil {
return nil, err
}
return m.parseCommunityURLWithData(encodedData, chatKey)
return parseCommunityURLWithData(encodedData, chatKey)
}
if strings.HasPrefix(url, sharedURLChannelPrefixWithData) {
@ -583,9 +557,9 @@ func (m *Messenger) ParseSharedURL(url string) (*URLDataResponse, error) {
}
if channelRegExp.MatchString(encodedData) {
return m.parseCommunityChannelURLWithChatKey(encodedData, chatKey)
return parseCommunityChannelURLWithChatKey(encodedData, chatKey)
}
return m.parseCommunityChannelURLWithData(encodedData, chatKey)
return parseCommunityChannelURLWithData(encodedData, chatKey)
}
return nil, fmt.Errorf("not a status shared url")

View File

@ -3,14 +3,13 @@ package protocol
import (
"context"
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/suite"
"github.com/status-im/status-go/api/multiformat"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/communities"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
@ -121,27 +120,6 @@ func (s *MessengerShareUrlsSuite) TestDecodeEncodeDataURL() {
}
}
func (s *MessengerShareUrlsSuite) TestSerializePublicKey() {
key, err := crypto.GenerateKey()
s.Require().NoError(err)
serializedKey, err := s.m.SerializePublicKey(crypto.CompressPubkey(&key.PublicKey))
s.Require().NoError(err)
s.Require().Len(serializedKey, 49)
s.Require().True(strings.HasPrefix(serializedKey, "zQ3sh"))
}
func (s *MessengerShareUrlsSuite) TestDeserializePublicKey() {
serializedKey := "zQ3shPyZJnxZK4Bwyx9QsaksNKDYTPmpwPvGSjMYVHoXHeEgB"
shortKey, err := s.m.DeserializePublicKey(serializedKey)
s.Require().NoError(err)
s.Require().Len(shortKey, 33)
s.Require().True(strings.HasPrefix(shortKey.String(), "0x"))
}
func (s *MessengerShareUrlsSuite) TestParseWrongUrls() {
const notStatusSharedURLError = "not a status shared url"
badURLs := map[string]string{
@ -153,7 +131,7 @@ func (s *MessengerShareUrlsSuite) TestParseWrongUrls() {
}
for url, expectedError := range badURLs {
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(url)
s.Require().Error(err)
s.Require().Equal(err.Error(), expectedError)
s.Require().Nil(urlData)
@ -228,31 +206,32 @@ func (s *MessengerShareUrlsSuite) TestShareCommunityURLWithChatKey() {
url, err := s.m.ShareCommunityURLWithChatKey(community.ID())
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(community.ID())
shortID, err := community.SerializedID()
s.Require().NoError(err)
expectedURL := fmt.Sprintf("%s/c#%s", baseShareURL, shortKey)
expectedURL := fmt.Sprintf("%s/c#%s", baseShareURL, shortID)
s.Require().Equal(expectedURL, url)
}
func (s *MessengerShareUrlsSuite) TestParseCommunityURLWithChatKey() {
community := s.createCommunity()
shortKey, err := s.m.SerializePublicKey(community.ID())
shortID, err := community.SerializedID()
s.Require().NoError(err)
url := fmt.Sprintf("%s/c#%s", baseShareURL, shortKey)
url := fmt.Sprintf("%s/c#%s", baseShareURL, shortID)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(url)
s.Require().NoError(err)
s.Require().NotNil(urlData)
s.Require().NotNil(urlData.Community)
s.Require().Equal(community.Identity().DisplayName, urlData.Community.DisplayName)
s.Require().Equal(community.DescriptionText(), urlData.Community.Description)
s.Require().Equal(uint32(community.MembersCount()), urlData.Community.MembersCount)
s.Require().Equal(community.Identity().GetColor(), urlData.Community.Color)
s.Require().Equal(community.TagsIndices(), urlData.Community.TagIndices)
s.Require().Equal(community.IDString(), urlData.Community.CommunityID)
s.Require().Equal("", urlData.Community.DisplayName)
s.Require().Equal("", urlData.Community.Description)
s.Require().Equal(uint32(0), urlData.Community.MembersCount)
s.Require().Equal("", urlData.Community.Color)
s.Require().Equal([]uint32{}, urlData.Community.TagIndices)
}
func (s *MessengerShareUrlsSuite) TestShareCommunityURLWithData() {
@ -269,7 +248,7 @@ func (s *MessengerShareUrlsSuite) TestShareCommunityURLWithData() {
}
func (s *MessengerShareUrlsSuite) TestParseCommunityURLWithData() {
urlData, err := s.m.ParseSharedURL(communityURLWithData)
urlData, err := ParseSharedURL(communityURLWithData)
s.Require().NoError(err)
s.Require().NotNil(urlData)
@ -288,7 +267,7 @@ func (s *MessengerShareUrlsSuite) TestShareAndParseCommunityURLWithData() {
url, err := s.m.ShareCommunityURLWithData(community.ID())
s.Require().NoError(err)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(url)
s.Require().NoError(err)
s.Require().Equal(community.Identity().DisplayName, urlData.Community.DisplayName)
@ -309,36 +288,34 @@ func (s *MessengerShareUrlsSuite) TestShareCommunityChannelURLWithChatKey() {
url, err := s.m.ShareCommunityChannelURLWithChatKey(request)
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(community.ID())
shortID, err := community.SerializedID()
s.Require().NoError(err)
expectedURL := fmt.Sprintf("%s/cc/%s#%s", baseShareURL, channelID, shortKey)
expectedURL := fmt.Sprintf("%s/cc/%s#%s", baseShareURL, channelID, shortID)
s.Require().Equal(expectedURL, url)
}
func (s *MessengerShareUrlsSuite) TestParseCommunityChannelURLWithChatKey() {
community, channel, channelID := s.createCommunityWithChannel()
const channelUUID = "003cdcd5-e065-48f9-b166-b1a94ac75a11"
const communityID = "0x02a3d2fdb9ac335917bf9d46b38d7496c00bbfadbaf832e8aa61d13ac2b4452084"
shortKey, err := s.m.SerializePublicKey(community.ID())
s.Require().NoError(err)
url := fmt.Sprintf("%s/cc/%s#%s", baseShareURL, channelID, shortKey)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(channelURL)
s.Require().NoError(err)
s.Require().NotNil(urlData)
s.Require().NotNil(urlData.Community)
s.Require().Equal(community.Identity().DisplayName, urlData.Community.DisplayName)
s.Require().Equal(community.DescriptionText(), urlData.Community.Description)
s.Require().Equal(uint32(community.MembersCount()), urlData.Community.MembersCount)
s.Require().Equal(community.Identity().GetColor(), urlData.Community.Color)
s.Require().Equal(community.TagsIndices(), urlData.Community.TagIndices)
s.Require().Equal(communityID, urlData.Community.CommunityID)
s.Require().Equal("", urlData.Community.DisplayName)
s.Require().Equal("", urlData.Community.Description)
s.Require().Equal(uint32(0), urlData.Community.MembersCount)
s.Require().Equal("", urlData.Community.Color)
s.Require().Equal([]uint32{}, urlData.Community.TagIndices)
s.Require().NotNil(urlData.Channel)
s.Require().Equal(channel.Identity.Emoji, urlData.Channel.Emoji)
s.Require().Equal(channel.Identity.DisplayName, urlData.Channel.DisplayName)
s.Require().Equal(channel.Identity.Color, urlData.Channel.Color)
s.Require().Equal(channelUUID, urlData.Channel.ChannelUUID)
s.Require().Equal("", urlData.Channel.Emoji)
s.Require().Equal("", urlData.Channel.DisplayName)
s.Require().Equal("", urlData.Channel.Color)
}
func (s *MessengerShareUrlsSuite) TestShareCommunityChannelURLWithData() {
@ -359,7 +336,7 @@ func (s *MessengerShareUrlsSuite) TestShareCommunityChannelURLWithData() {
}
func (s *MessengerShareUrlsSuite) TestParseCommunityChannelURLWithData() {
urlData, err := s.m.ParseSharedURL(channelURLWithData)
urlData, err := ParseSharedURL(channelURLWithData)
s.Require().NoError(err)
s.Require().NotNil(urlData)
@ -382,7 +359,7 @@ func (s *MessengerShareUrlsSuite) TestShareAndParseCommunityChannelURLWithData()
url, err := s.m.ShareCommunityChannelURLWithData(request)
s.Require().NoError(err)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(url)
s.Require().NoError(err)
s.Require().Equal(community.Identity().DisplayName, urlData.Community.DisplayName)
@ -403,10 +380,7 @@ func (s *MessengerShareUrlsSuite) TestShareUserURLWithChatKey() {
url, err := s.m.ShareUserURLWithChatKey(contact.ID)
s.Require().NoError(err)
publicKey, err := common.HexToPubkey(contact.ID)
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(crypto.CompressPubkey(publicKey))
shortKey, err := multiformat.SerializeLegacyKey(contact.ID)
s.Require().NoError(err)
expectedURL := fmt.Sprintf("%s/u#%s", baseShareURL, shortKey)
@ -414,23 +388,13 @@ func (s *MessengerShareUrlsSuite) TestShareUserURLWithChatKey() {
}
func (s *MessengerShareUrlsSuite) TestParseUserURLWithChatKey() {
_, contact := s.createContact()
publicKey, err := common.HexToPubkey(contact.ID)
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(crypto.CompressPubkey(publicKey))
s.Require().NoError(err)
url := fmt.Sprintf("%s/u#%s", baseShareURL, shortKey)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(userURL)
s.Require().NoError(err)
s.Require().NotNil(urlData)
s.Require().NotNil(urlData.Contact)
s.Require().Equal(contact.DisplayName, urlData.Contact.DisplayName)
s.Require().Equal(contact.Bio, urlData.Contact.Description)
s.Require().Equal("", urlData.Contact.DisplayName)
s.Require().Equal("", urlData.Contact.Description)
}
func (s *MessengerShareUrlsSuite) TestShareUserURLWithENS() {
@ -449,7 +413,7 @@ func (s *MessengerShareUrlsSuite) TestShareUserURLWithENS() {
// url := fmt.Sprintf("%s/u#%s", baseShareURL, contact.EnsName)
// urlData, err := s.m.ParseSharedURL(url)
// urlData, err := ParseSharedURL(url)
// s.Require().NoError(err)
// s.Require().NotNil(urlData)
@ -459,7 +423,7 @@ func (s *MessengerShareUrlsSuite) TestShareUserURLWithENS() {
// }
func (s *MessengerShareUrlsSuite) TestParseUserURLWithData() {
urlData, err := s.m.ParseSharedURL(userURLWithData)
urlData, err := ParseSharedURL(userURLWithData)
s.Require().NoError(err)
s.Require().NotNil(urlData)
@ -484,16 +448,14 @@ func (s *MessengerShareUrlsSuite) TestShareUserURLWithData() {
func (s *MessengerShareUrlsSuite) TestShareAndParseUserURLWithData() {
_, contact := s.createContact()
pk, err := contact.PublicKey()
s.Require().NoError(err)
shortKey, err := s.m.SerializePublicKey(crypto.CompressPubkey(pk))
shortKey, err := multiformat.SerializeLegacyKey(contact.ID)
s.Require().NoError(err)
url, err := s.m.ShareUserURLWithData(contact.ID)
s.Require().NoError(err)
urlData, err := s.m.ParseSharedURL(url)
urlData, err := ParseSharedURL(url)
s.Require().NoError(err)
s.Require().NotNil(urlData.Contact)

View File

@ -1,15 +1,9 @@
package requests
import (
"errors"
"github.com/status-im/status-go/eth-node/types"
)
var (
ErrCommunityChannelShareURLCommunityInvalidID = errors.New("check-permission-to-join-community: invalid id")
)
type CommunityChannelShareURL struct {
CommunityID types.HexBytes
ChannelID string

View File

@ -1560,7 +1560,7 @@ func (api *PublicAPI) ShareUserURLWithData(pubKey string) (string, error) {
}
func (api *PublicAPI) ParseSharedURL(url string) (*protocol.URLDataResponse, error) {
return api.service.messenger.ParseSharedURL(url)
return protocol.ParseSharedURL(url)
}
func (api *PublicAPI) Messenger() *protocol.Messenger {