Skip to content

Commit f176cba

Browse files
committed
refactor: create store node facade
iterates: #6629
1 parent f78e935 commit f176cba

File tree

11 files changed

+221
-192
lines changed

11 files changed

+221
-192
lines changed

internal/enr/enr.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package enr
2+
3+
import (
4+
"github.com/ethereum/go-ethereum/p2p/enode"
5+
)
6+
7+
func MustDecode(enrStr string) *enode.Node {
8+
node, err := enode.Parse(enode.ValidSchemes, enrStr)
9+
if err != nil || node == nil {
10+
panic("could not decode enr: " + enrStr)
11+
}
12+
return node
13+
}

internal/multiaddr/multiaddr.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package multiaddr
2+
3+
import "github.com/multiformats/go-multiaddr"
4+
5+
func MustDecode(multiaddrsStr string) *multiaddr.Multiaddr {
6+
maddr, err := multiaddr.NewMultiaddr(multiaddrsStr)
7+
if err != nil || maddr == nil {
8+
panic("could not decode multiaddr: " + multiaddrsStr)
9+
}
10+
return &maddr
11+
}

messaging/types/store_node.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package types
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
"github.com/libp2p/go-libp2p/core/peer"
8+
"github.com/multiformats/go-multiaddr"
9+
10+
"github.com/ethereum/go-ethereum/p2p/enode"
11+
12+
wakutypes "github.com/status-im/status-go/waku/types"
13+
)
14+
15+
type StoreNode struct {
16+
ID string `json:"id"`
17+
Name string `json:"name"`
18+
Custom bool `json:"custom"`
19+
ENR *enode.Node `json:"enr"`
20+
Addr *multiaddr.Multiaddr `json:"addr"`
21+
}
22+
23+
func (m StoreNode) PeerID() (peer.ID, error) {
24+
return wakutypes.Mailserver{
25+
ID: m.ID,
26+
Name: m.Name,
27+
Custom: m.Custom,
28+
ENR: m.ENR,
29+
Addr: m.Addr,
30+
}.PeerID()
31+
}
32+
33+
func (m StoreNode) PeerInfo() (peer.AddrInfo, error) {
34+
return wakutypes.Mailserver{
35+
ID: m.ID,
36+
Name: m.Name,
37+
Custom: m.Custom,
38+
ENR: m.ENR,
39+
Addr: m.Addr,
40+
}.PeerInfo()
41+
}
42+
43+
// UnmarshalJSON implements the custom JSON unmarshaling logic for Mailserver.
44+
// It supports ENR and Addr being saved as strings.
45+
func (m *StoreNode) UnmarshalJSON(data []byte) error {
46+
type Alias StoreNode // Create an alias type to avoid infinite recursion
47+
aux := struct {
48+
Alias
49+
ENR string `json:"enr"` // Temporary field to handle ENR as a string
50+
Addr string `json:"addr"` // Temporary field to handle Addr as a string
51+
}{}
52+
53+
// Unmarshal the data into the temporary struct
54+
if err := json.Unmarshal(data, &aux); err != nil {
55+
return err
56+
}
57+
58+
// Set the basic fields
59+
*m = StoreNode(aux.Alias)
60+
61+
// Decode the ENR if present
62+
if aux.ENR != "" {
63+
decodedENR, err := enode.Parse(enode.ValidSchemes, aux.ENR)
64+
if err != nil {
65+
return fmt.Errorf("invalid ENR: %w", err)
66+
}
67+
m.ENR = decodedENR
68+
}
69+
70+
// Decode the Multiaddr if present
71+
if aux.Addr != "" {
72+
decodedAddr, err := multiaddr.NewMultiaddr(aux.Addr)
73+
if err != nil {
74+
return fmt.Errorf("invalid Addr: %w", err)
75+
}
76+
m.Addr = &decodedAddr
77+
}
78+
79+
return nil
80+
}

params/cluster.go

Lines changed: 66 additions & 82 deletions
Large diffs are not rendered by default.

params/storenode_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package params_test
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
9+
messagingtypes "github.com/status-im/status-go/messaging/types"
10+
"github.com/status-im/status-go/params"
11+
)
12+
13+
func TestStoreNode_UnmarshalJSON(t *testing.T) {
14+
fleets := params.GetSupportedFleets()
15+
16+
for _, fleet := range fleets {
17+
for _, storeNode := range fleet.StoreNodes {
18+
jsonData, err := json.Marshal(storeNode)
19+
require.NoError(t, err)
20+
21+
var unmarshalled messagingtypes.StoreNode
22+
err = json.Unmarshal(jsonData, &unmarshalled)
23+
require.NoError(t, err)
24+
25+
require.Equal(t, storeNode, unmarshalled)
26+
}
27+
}
28+
}

protocol/messenger.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ func (m *Messenger) Start() (*MessengerResponse, error) {
631631
}
632632
response := &MessengerResponse{}
633633

634-
response.Mailservers, err = m.AllMailservers()
634+
response.StoreNodes, err = m.AllMailservers()
635635
if err != nil {
636636
return nil, err
637637
}

protocol/messenger_mailserver_cycle.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import (
55
"go.uber.org/zap"
66

77
gocommon "github.com/status-im/status-go/common"
8+
messagingtypes "github.com/status-im/status-go/messaging/types"
89
"github.com/status-im/status-go/params"
910
"github.com/status-im/status-go/signal"
10-
wakutypes "github.com/status-im/status-go/waku/types"
1111
)
1212

13-
func (m *Messenger) AllMailservers() ([]wakutypes.Mailserver, error) {
13+
func (m *Messenger) AllMailservers() ([]messagingtypes.StoreNode, error) {
1414
// Get configured fleet
1515
fleet, err := m.getFleet()
1616
if err != nil {
@@ -20,7 +20,7 @@ func (m *Messenger) AllMailservers() ([]wakutypes.Mailserver, error) {
2020
return m.allMailserversByFleet(fleet)
2121
}
2222

23-
func (m *Messenger) allMailserversByFleet(fleet string) ([]wakutypes.Mailserver, error) {
23+
func (m *Messenger) allMailserversByFleet(fleet string) ([]messagingtypes.StoreNode, error) {
2424
// Get default mailservers for given fleet
2525
allMailservers := params.DefaultStoreNodes(fleet)
2626
return allMailservers, nil
@@ -124,7 +124,7 @@ func (m *Messenger) checkForStorenodeCycleSignals() {
124124
return
125125
}
126126

127-
mailserverMap := make(map[peer.ID]wakutypes.Mailserver)
127+
mailserverMap := make(map[peer.ID]messagingtypes.StoreNode)
128128
for _, ms := range allMailservers {
129129
peerID, err := ms.PeerID()
130130
if err != nil {
@@ -139,22 +139,22 @@ func (m *Messenger) checkForStorenodeCycleSignals() {
139139
case <-m.ctx.Done():
140140
return
141141
case <-notWorking:
142-
signal.SendMailserverNotWorking()
142+
signal.SendStoreNodeNotWorking()
143143

144144
case activeMailserver := <-changed:
145145
if activeMailserver != "" {
146146
ms, ok := mailserverMap[activeMailserver]
147147
if ok {
148-
signal.SendMailserverChanged(&ms)
148+
signal.SendStoreNodeChanged(&ms)
149149
}
150150
} else {
151-
signal.SendMailserverChanged(nil)
151+
signal.SendStoreNodeChanged(nil)
152152
}
153153
case activeMailserver := <-available:
154154
if activeMailserver != "" {
155155
ms, ok := mailserverMap[activeMailserver]
156156
if ok {
157-
signal.SendMailserverAvailable(&ms)
157+
signal.SendStoreNodeAvailable(&ms)
158158
}
159159
m.asyncRequestAllHistoricMessages()
160160
}

protocol/messenger_response.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"golang.org/x/exp/maps"
77

88
ensservice "github.com/status-im/status-go/services/ens"
9-
"github.com/status-im/status-go/waku/types"
109

1110
"github.com/status-im/status-go/services/browsers"
1211
"github.com/status-im/status-go/services/wallet"
@@ -46,7 +45,7 @@ type MessengerResponse struct {
4645
Contacts []*Contact
4746
Invitations []*GroupChatInvitation
4847
CommunityChanges []*communities.CommunityChanges
49-
Mailservers []types.Mailserver
48+
StoreNodes []messagingtypes.StoreNode
5049
Bookmarks []*browsers.Bookmark
5150
Settings []*settings.SyncSettingField
5251
IdentityImages []images.IdentityImage
@@ -105,7 +104,7 @@ func (r *MessengerResponse) MarshalJSON() ([]byte, error) {
105104
Invitations []*GroupChatInvitation `json:"invitations,omitempty"`
106105
CommunityChanges []*communities.CommunityChanges `json:"communityChanges,omitempty"`
107106
RequestsToJoinCommunity []*communities.RequestToJoin `json:"requestsToJoinCommunity,omitempty"`
108-
Mailservers []types.Mailserver `json:"mailservers,omitempty"`
107+
StoreNodes []messagingtypes.StoreNode `json:"mailservers,omitempty"`
109108
Bookmarks []*browsers.Bookmark `json:"bookmarks,omitempty"`
110109
ClearedHistories []*ClearedHistory `json:"clearedHistories,omitempty"`
111110
VerificationRequests []*verification.Request `json:"verificationRequests,omitempty"`
@@ -142,7 +141,7 @@ func (r *MessengerResponse) MarshalJSON() ([]byte, error) {
142141
Invitations: r.Invitations,
143142
CommunityChanges: r.CommunityChanges,
144143
RequestsToJoinCommunity: r.RequestsToJoinCommunity(),
145-
Mailservers: r.Mailservers,
144+
StoreNodes: r.StoreNodes,
146145
Bookmarks: r.Bookmarks,
147146
CurrentStatus: r.currentStatus,
148147
Settings: r.Settings,
@@ -311,7 +310,7 @@ func (r *MessengerResponse) IsEmpty() bool {
311310
len(r.removedChats)+
312311
len(r.removedMessages)+
313312
len(r.deletedMessages)+
314-
len(r.Mailservers)+
313+
len(r.StoreNodes)+
315314
len(r.IdentityImages)+
316315
len(r.WatchOnlyAccounts)+
317316
len(r.Keypairs)+
@@ -337,7 +336,7 @@ func (r *MessengerResponse) IsEmpty() bool {
337336
// the existing Messages & Chats if they have the same ID
338337
func (r *MessengerResponse) Merge(response *MessengerResponse) error {
339338
if len(response.Invitations)+
340-
len(response.Mailservers)+
339+
len(response.StoreNodes)+
341340
len(response.clearedHistories)+
342341
len(response.DiscordChannels)+
343342
len(response.DiscordCategories) != 0 {

signal/events_shhext.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"github.com/status-im/status-go/crypto/types"
1313
messagingtypes "github.com/status-im/status-go/messaging/types"
14-
wakutypes "github.com/status-im/status-go/waku/types"
1514
)
1615

1716
const (
@@ -105,7 +104,7 @@ type BundleAddedSignal struct {
105104
InstallationID string `json:"installationID"`
106105
}
107106

108-
type MailserverSignal struct {
107+
type StoreNodeSignal struct {
109108
Address *multiaddr.Multiaddr `json:"address"`
110109
ID string `json:"id"`
111110
}
@@ -222,23 +221,23 @@ func SendNewMessages(obj json.Marshaler) {
222221
send(EventNewMessages, obj)
223222
}
224223

225-
func sendMailserverSignal(ms *wakutypes.Mailserver, event string) {
226-
msSignal := MailserverSignal{}
224+
func sendStoreNodeSignal(ms *messagingtypes.StoreNode, event string) {
225+
msSignal := StoreNodeSignal{}
227226
if ms != nil {
228227
msSignal.Address = ms.Addr
229228
msSignal.ID = ms.ID
230229
}
231230
send(event, msSignal)
232231
}
233232

234-
func SendMailserverAvailable(ms *wakutypes.Mailserver) {
235-
sendMailserverSignal(ms, EventMailserverAvailable)
233+
func SendStoreNodeAvailable(ms *messagingtypes.StoreNode) {
234+
sendStoreNodeSignal(ms, EventMailserverAvailable)
236235
}
237236

238-
func SendMailserverChanged(ms *wakutypes.Mailserver) {
239-
sendMailserverSignal(ms, EventMailserverChanged)
237+
func SendStoreNodeChanged(ms *messagingtypes.StoreNode) {
238+
sendStoreNodeSignal(ms, EventMailserverChanged)
240239
}
241240

242-
func SendMailserverNotWorking() {
243-
sendMailserverSignal(nil, EventMailserverNotWorking)
241+
func SendStoreNodeNotWorking() {
242+
sendStoreNodeSignal(nil, EventMailserverNotWorking)
244243
}

waku/types/mailserver.go

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ package types
22

33
import (
44
"database/sql"
5-
"encoding/json"
65
"errors"
7-
"fmt"
86

97
"github.com/ethereum/go-ethereum/p2p/enode"
108

@@ -47,22 +45,6 @@ type SyncEventResponse struct {
4745
Error string
4846
}
4947

50-
func MustDecodeENR(enrStr string) *enode.Node {
51-
node, err := enode.Parse(enode.ValidSchemes, enrStr)
52-
if err != nil || node == nil {
53-
panic("could not decode enr: " + enrStr)
54-
}
55-
return node
56-
}
57-
58-
func MustDecodeMultiaddress(multiaddrsStr string) *multiaddr.Multiaddr {
59-
maddr, err := multiaddr.NewMultiaddr(multiaddrsStr)
60-
if err != nil || maddr == nil {
61-
panic("could not decode multiaddr: " + multiaddrsStr)
62-
}
63-
return &maddr
64-
}
65-
6648
type Mailserver struct {
6749
ID string `json:"id"`
6850
Name string `json:"name"`
@@ -119,42 +101,3 @@ func (m Mailserver) NullablePassword() (val sql.NullString) {
119101
}
120102
return
121103
}
122-
123-
// UnmarshalJSON implements the custom JSON unmarshaling logic for Mailserver.
124-
// It supports ENR and Addr being saved as strings.
125-
func (m *Mailserver) UnmarshalJSON(data []byte) error {
126-
type Alias Mailserver // Create an alias type to avoid infinite recursion
127-
aux := struct {
128-
Alias
129-
ENR string `json:"enr"` // Temporary field to handle ENR as a string
130-
Addr string `json:"addr"` // Temporary field to handle Addr as a string
131-
}{}
132-
133-
// Unmarshal the data into the temporary struct
134-
if err := json.Unmarshal(data, &aux); err != nil {
135-
return err
136-
}
137-
138-
// Set the basic fields
139-
*m = Mailserver(aux.Alias)
140-
141-
// Decode the ENR if present
142-
if aux.ENR != "" {
143-
decodedENR, err := enode.Parse(enode.ValidSchemes, aux.ENR)
144-
if err != nil {
145-
return fmt.Errorf("invalid ENR: %w", err)
146-
}
147-
m.ENR = decodedENR
148-
}
149-
150-
// Decode the Multiaddr if present
151-
if aux.Addr != "" {
152-
decodedAddr, err := multiaddr.NewMultiaddr(aux.Addr)
153-
if err != nil {
154-
return fmt.Errorf("invalid Addr: %w", err)
155-
}
156-
m.Addr = &decodedAddr
157-
}
158-
159-
return nil
160-
}

0 commit comments

Comments
 (0)