diff --git a/protocol/communities/manager.go b/protocol/communities/manager.go index 2101fc43d..b7ed08c64 100644 --- a/protocol/communities/manager.go +++ b/protocol/communities/manager.go @@ -4,6 +4,7 @@ import ( "crypto/ecdsa" "database/sql" "fmt" + "io/ioutil" "net" "os" "sort" @@ -22,6 +23,7 @@ import ( "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" "github.com/status-im/status-go/params" "github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/encryption" @@ -2701,16 +2703,39 @@ func (m *Manager) GetCommunityTokens(communityID string) ([]*CommunityToken, err return m.persistence.GetCommunityTokens(communityID) } -func (m *Manager) AddCommunityToken(token *CommunityToken) error { +func (m *Manager) ImageToBase64(uri string) string { + file, err := os.Open(uri) + if err != nil { + m.logger.Error(err.Error()) + return "" + } + defer file.Close() + + payload, err := ioutil.ReadAll(file) + if err != nil { + m.logger.Error(err.Error()) + return "" + } + base64img, err := images.GetPayloadDataURI(payload) + if err != nil { + m.logger.Error(err.Error()) + return "" + } + return base64img +} + +func (m *Manager) AddCommunityToken(token *CommunityToken) (*CommunityToken, error) { community, err := m.GetByIDString(token.CommunityID) if err != nil { - return err + return nil, err } if community == nil { - return ErrOrgNotFound + return nil, ErrOrgNotFound } + token.Base64Image = m.ImageToBase64(token.Base64Image) + tokenMetadata := &protobuf.CommunityTokenMetadata{ ContractAddresses: map[uint64]string{uint64(token.ChainID): token.Address}, Description: token.Description, @@ -2721,17 +2746,17 @@ func (m *Manager) AddCommunityToken(token *CommunityToken) error { } _, err = community.AddCommunityTokensMetadata(tokenMetadata) if err != nil { - return err + return nil, err } err = m.persistence.SaveCommunity(community) if err != nil { - return err + return nil, err } m.publish(&Subscription{Community: community}) - return m.persistence.AddCommunityToken(token) + return token, m.persistence.AddCommunityToken(token) } func (m *Manager) UpdateCommunityTokenState(contractAddress string, deployState DeployState) error { diff --git a/protocol/messenger_communities.go b/protocol/messenger_communities.go index 710ece22e..777f1da7b 100644 --- a/protocol/messenger_communities.go +++ b/protocol/messenger_communities.go @@ -3340,7 +3340,7 @@ func (m *Messenger) GetCommunityTokens(communityID string) ([]*communities.Commu return m.communitiesManager.GetCommunityTokens(communityID) } -func (m *Messenger) AddCommunityToken(token *communities.CommunityToken) error { +func (m *Messenger) AddCommunityToken(token *communities.CommunityToken) (*communities.CommunityToken, error) { return m.communitiesManager.AddCommunityToken(token) } diff --git a/services/ext/api.go b/services/ext/api.go index a5984e4ea..ab8cb41d4 100644 --- a/services/ext/api.go +++ b/services/ext/api.go @@ -1265,7 +1265,7 @@ func (api *PublicAPI) GetCommunityTokens(communityID string) ([]*communities.Com return api.service.messenger.GetCommunityTokens(communityID) } -func (api *PublicAPI) AddCommunityToken(token *communities.CommunityToken) error { +func (api *PublicAPI) AddCommunityToken(token *communities.CommunityToken) (*communities.CommunityToken, error) { return api.service.messenger.AddCommunityToken(token) }