Skip to content

Commit 0ee8ad6

Browse files
committed
refactor: introduce encryption persistence interface
iterates: #6792
1 parent 0ac383b commit 0ee8ad6

37 files changed

+2341
-1860
lines changed

appdatabase/database.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (a DbInitializer) Initialize(path, password string, kdfIterationsNumber int
4444
}
4545

4646
func doMigration(db *sql.DB) error {
47-
lastMigration, migrationTableExists, err := sqlite.GetLastMigrationVersion(db)
47+
lastMigration, migrationTableExists, err := sqlite.GetLastMigrationVersion(db, sqlite.MigrationTableName)
4848
if err != nil {
4949
return err
5050
}

messaging/adapters/persistence.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package adapters
33
import (
44
"crypto/ecdsa"
55

6+
"github.com/status-im/status-go/messaging/internal"
7+
"github.com/status-im/status-go/messaging/layers/encryption"
68
"github.com/status-im/status-go/messaging/layers/transport"
79
"github.com/status-im/status-go/messaging/types"
810
wakupersistence "github.com/status-im/status-go/messaging/waku/persistence"
@@ -15,11 +17,11 @@ type KeysPersistence struct {
1517
var _ transport.KeysPersistence = (*KeysPersistence)(nil)
1618

1719
func (kp *KeysPersistence) All() (map[string][]byte, error) {
18-
return kp.P.WakuKeys()
20+
return kp.P.WakuStorage().Keys()
1921
}
2022

2123
func (kp *KeysPersistence) Add(chatID string, key []byte) error {
22-
return kp.P.AddWakuKey(chatID, key)
24+
return kp.P.WakuStorage().AddKey(chatID, key)
2325
}
2426

2527
type ProcessedMessageIDsCache struct {
@@ -48,19 +50,19 @@ type WakuProtectedTopics struct {
4850
var _ wakupersistence.ProtectedTopics = (*WakuProtectedTopics)(nil)
4951

5052
func (wpt *WakuProtectedTopics) Insert(pubsubTopic string, privKey *ecdsa.PrivateKey, publicKey *ecdsa.PublicKey) error {
51-
return wpt.P.WakuInsertProtectedTopic(pubsubTopic, privKey, publicKey)
53+
return wpt.P.WakuStorage().InsertProtectedTopic(pubsubTopic, privKey, publicKey)
5254
}
5355

5456
func (wpt *WakuProtectedTopics) Delete(pubsubTopic string) error {
55-
return wpt.P.WakuDeleteProtectedTopic(pubsubTopic)
57+
return wpt.P.WakuStorage().DeleteProtectedTopic(pubsubTopic)
5658
}
5759

5860
func (wpt *WakuProtectedTopics) FetchPrivateKey(topic string) (*ecdsa.PrivateKey, error) {
59-
return wpt.P.WakuFetchPrivateKeyForProtectedTopic(topic)
61+
return wpt.P.WakuStorage().FetchPrivateKeyForProtectedTopic(topic)
6062
}
6163

6264
func (wpt *WakuProtectedTopics) ProtectedTopics() ([]wakupersistence.ProtectedTopic, error) {
63-
pt, err := wpt.P.WakuProtectedTopics()
65+
pt, err := wpt.P.WakuStorage().ProtectedTopics()
6466
if err != nil {
6567
return nil, err
6668
}
@@ -73,3 +75,15 @@ func (wpt *WakuProtectedTopics) ProtectedTopics() ([]wakupersistence.ProtectedTo
7375
}
7476
return result, nil
7577
}
78+
79+
func EncryptionPersistence(p types.Persistence) encryption.Persistence {
80+
encryptionStorage := p.EncryptionStorage()
81+
if encryptionStorage == nil {
82+
return nil
83+
}
84+
internal, ok := encryptionStorage.(*internal.SQLiteEncryptionPersistence)
85+
if !ok {
86+
panic("custom EncryptionPersistence implementations are not supported yet")
87+
}
88+
return internal.SQLitePersistence
89+
}

messaging/common/message_segmentation.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,20 +165,20 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
165165
zap.Uint32("ParitySegmentIndex", segmentMessage.ParitySegmentIndex),
166166
zap.Uint32("ParitySegmentsCount", segmentMessage.ParitySegmentsCount))
167167

168-
alreadyCompleted, err := s.persistence.IsMessageAlreadyCompleted(segmentMessage.EntireMessageHash)
168+
alreadyCompleted, err := s.persistence.SegmentationStorage().IsMessageAlreadyCompleted(segmentMessage.EntireMessageHash)
169169
if err != nil {
170170
return err
171171
}
172172
if alreadyCompleted {
173173
return ErrMessageSegmentsAlreadyCompleted
174174
}
175175

176-
err = s.persistence.SaveMessageSegment(segmentMessage, message.TransportLayer.SigPubKey, time.Now().Unix())
176+
err = s.persistence.SegmentationStorage().SaveMessageSegment(segmentMessage, message.TransportLayer.SigPubKey, time.Now().Unix())
177177
if err != nil {
178178
return err
179179
}
180180

181-
segments, err := s.persistence.GetMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey)
181+
segments, err := s.persistence.SegmentationStorage().GetMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey)
182182
if err != nil {
183183
return err
184184
}
@@ -258,7 +258,7 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
258258
return ErrMessageSegmentsHashMismatch
259259
}
260260

261-
err = s.persistence.CompleteMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey, time.Now().Unix())
261+
err = s.persistence.SegmentationStorage().CompleteMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey, time.Now().Unix())
262262
if err != nil {
263263
return err
264264
}
@@ -271,12 +271,12 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
271271
func (s *MessageSender) CleanupSegments() error {
272272
monthAgo := time.Now().AddDate(0, -1, 0).Unix()
273273

274-
err := s.persistence.RemoveMessageSegmentsOlderThan(monthAgo)
274+
err := s.persistence.SegmentationStorage().RemoveMessageSegmentsOlderThan(monthAgo)
275275
if err != nil {
276276
return err
277277
}
278278

279-
err = s.persistence.RemoveMessageSegmentsCompletedOlderThan(monthAgo)
279+
err = s.persistence.SegmentationStorage().RemoveMessageSegmentsCompletedOlderThan(monthAgo)
280280
if err != nil {
281281
return err
282282
}

messaging/common/message_segmentation_test.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@ import (
99
"github.com/stretchr/testify/suite"
1010
"go.uber.org/zap"
1111

12-
"github.com/status-im/status-go/appdatabase"
1312
"github.com/status-im/status-go/crypto"
1413
"github.com/status-im/status-go/messaging/types"
1514
wakutypes "github.com/status-im/status-go/messaging/waku/types"
1615
"github.com/status-im/status-go/protocol/protobuf"
17-
"github.com/status-im/status-go/protocol/sqlite"
18-
"github.com/status-im/status-go/t/helpers"
1916
)
2017

2118
func TestMessageSegmentationSuite(t *testing.T) {
@@ -41,18 +38,13 @@ func (s *MessageSegmentationSuite) SetupTest() {
4138
identity, err := crypto.GenerateKey()
4239
s.Require().NoError(err)
4340

44-
database, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
45-
s.Require().NoError(err)
46-
err = sqlite.Migrate(database)
47-
s.Require().NoError(err)
48-
4941
s.logger, err = zap.NewDevelopment()
5042
s.Require().NoError(err)
5143

5244
s.sender, err = NewMessageSender(
5345
identity,
54-
database,
55-
NewStubPersistence(),
46+
nil,
47+
NewPersistenceInMemory(),
5648
nil,
5749
nil,
5850
s.logger,

messaging/common/message_sender_test.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,21 @@ import (
66

77
"github.com/golang/protobuf/proto"
88
"github.com/libp2p/go-libp2p/core/peer"
9+
bindata "github.com/status-im/migrate/v4/source/go_bindata"
10+
datasyncproto "github.com/status-im/mvds/protobuf"
911
"github.com/stretchr/testify/suite"
1012
"go.uber.org/zap"
1113

12-
datasyncproto "github.com/status-im/mvds/protobuf"
13-
14-
"github.com/status-im/status-go/appdatabase"
1514
"github.com/status-im/status-go/crypto"
1615
"github.com/status-im/status-go/messaging/adapters"
1716
"github.com/status-im/status-go/messaging/datasync"
1817
"github.com/status-im/status-go/messaging/layers/encryption"
18+
"github.com/status-im/status-go/messaging/layers/encryption/migrations"
1919
"github.com/status-im/status-go/messaging/layers/transport"
2020
messagingtypes "github.com/status-im/status-go/messaging/types"
2121
wakuv2 "github.com/status-im/status-go/messaging/waku"
2222
wakutypes "github.com/status-im/status-go/messaging/waku/types"
2323
"github.com/status-im/status-go/protocol/protobuf"
24-
"github.com/status-im/status-go/protocol/sqlite"
2524
v1protocol "github.com/status-im/status-go/protocol/v1"
2625
"github.com/status-im/status-go/t/helpers"
2726
)
@@ -56,13 +55,16 @@ func (s *MessageSenderSuite) SetupTest() {
5655
identity, err := crypto.GenerateKey()
5756
s.Require().NoError(err)
5857

59-
database, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
60-
s.Require().NoError(err)
61-
err = sqlite.Migrate(database)
58+
db, err := helpers.SetupTestMemorySQLDB(helpers.NewTestDBInitializer(bindata.Resource(
59+
migrations.AssetNames(),
60+
func(name string) ([]byte, error) {
61+
return migrations.Asset(name)
62+
},
63+
)))
6264
s.Require().NoError(err)
6365

6466
encryptionProtocol := encryption.New(
65-
database,
67+
encryption.NewSQLitePersistence(db),
6668
"installation-1",
6769
s.logger,
6870
)
@@ -80,7 +82,7 @@ func (s *MessageSenderSuite) SetupTest() {
8082
s.Require().NoError(err)
8183
s.Require().NoError(shh.Start())
8284

83-
stubPersistence := NewStubPersistence()
85+
stubPersistence := NewPersistenceInMemory()
8486

8587
transport, err := transport.NewTransport(
8688
shh,
@@ -94,7 +96,7 @@ func (s *MessageSenderSuite) SetupTest() {
9496

9597
s.sender, err = NewMessageSender(
9698
identity,
97-
database,
99+
db,
98100
stubPersistence,
99101
transport,
100102
encryptionProtocol,
@@ -196,13 +198,16 @@ func (s *MessageSenderSuite) TestHandleDecodedMessagesDatasyncEncrypted() {
196198
s.Require().NoError(err)
197199

198200
// Create sender encryption protocol.
199-
senderDatabase, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
200-
s.Require().NoError(err)
201-
err = sqlite.Migrate(senderDatabase)
201+
senderDatabase, err := helpers.SetupTestMemorySQLDB(helpers.NewTestDBInitializer(bindata.Resource(
202+
migrations.AssetNames(),
203+
func(name string) ([]byte, error) {
204+
return migrations.Asset(name)
205+
},
206+
)))
202207
s.Require().NoError(err)
203208

204209
senderEncryptionProtocol := encryption.New(
205-
senderDatabase,
210+
encryption.NewSQLitePersistence(senderDatabase),
206211
"installation-2",
207212
s.logger,
208213
)
@@ -246,13 +251,16 @@ func (s *MessageSenderSuite) TestHandleOutOfOrderHashRatchet() {
246251
s.Require().NoError(err)
247252

248253
// Create sender encryption protocol.
249-
senderDatabase, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
250-
s.Require().NoError(err)
251-
err = sqlite.Migrate(senderDatabase)
254+
senderDatabase, err := helpers.SetupTestMemorySQLDB(helpers.NewTestDBInitializer(bindata.Resource(
255+
migrations.AssetNames(),
256+
func(name string) ([]byte, error) {
257+
return migrations.Asset(name)
258+
},
259+
)))
252260
s.Require().NoError(err)
253261

254262
senderEncryptionProtocol := encryption.New(
255-
senderDatabase,
263+
encryption.NewSQLitePersistence(senderDatabase),
256264
"installation-2",
257265
s.logger,
258266
)

0 commit comments

Comments
 (0)