fix: discard backed up messages if `ProcessBackedupMessages` is not set to `true`
If user followed onboarding flow to recover his account using seed phrase or keycard, then `ProcessBackedupMessages` property of node config json object should be set to `true`, otherwise it should be set to `false` or be omitted.
This commit is contained in:
parent
d60beb2283
commit
7c72d5ec99
|
@ -17,7 +17,7 @@ import (
|
||||||
type StatusBackend interface {
|
type StatusBackend interface {
|
||||||
// IsNodeRunning() bool // NOTE: Only used in tests
|
// IsNodeRunning() bool // NOTE: Only used in tests
|
||||||
StartNode(config *params.NodeConfig) error // NOTE: Only used in canary
|
StartNode(config *params.NodeConfig) error // NOTE: Only used in canary
|
||||||
StartNodeWithKey(acc multiaccounts.Account, password string, keyHex string) error
|
StartNodeWithKey(acc multiaccounts.Account, password string, keyHex string, conf *params.NodeConfig) error
|
||||||
StartNodeWithAccount(acc multiaccounts.Account, password string, conf *params.NodeConfig) error
|
StartNodeWithAccount(acc multiaccounts.Account, password string, conf *params.NodeConfig) error
|
||||||
StartNodeWithAccountAndInitialConfig(account multiaccounts.Account, password string, settings settings.Settings, conf *params.NodeConfig, subaccs []*accounts.Account) error
|
StartNodeWithAccountAndInitialConfig(account multiaccounts.Account, password string, settings settings.Settings, conf *params.NodeConfig, subaccs []*accounts.Account) error
|
||||||
StopNode() error
|
StopNode() error
|
||||||
|
|
|
@ -688,7 +688,7 @@ func TestLoginWithKey(t *testing.T) {
|
||||||
b.UpdateRootDataDir(conf.DataDir)
|
b.UpdateRootDataDir(conf.DataDir)
|
||||||
require.NoError(t, b.OpenAccounts())
|
require.NoError(t, b.OpenAccounts())
|
||||||
|
|
||||||
require.NoError(t, b.StartNodeWithKey(main, "test-pass", keyhex))
|
require.NoError(t, b.StartNodeWithKey(main, "test-pass", keyhex, conf))
|
||||||
defer func() {
|
defer func() {
|
||||||
assert.NoError(t, b.Logout())
|
assert.NoError(t, b.Logout())
|
||||||
assert.NoError(t, b.StopNode())
|
assert.NoError(t, b.StopNode())
|
||||||
|
|
|
@ -374,7 +374,7 @@ func (b *GethStatusBackend) setupLogSettings() error {
|
||||||
// and uses it in application.
|
// and uses it in application.
|
||||||
// TODO: we should use a proper struct with optional values instead of duplicating the regular functions
|
// TODO: we should use a proper struct with optional values instead of duplicating the regular functions
|
||||||
// with small variants for keycard, this created too many bugs
|
// with small variants for keycard, this created too many bugs
|
||||||
func (b *GethStatusBackend) startNodeWithKey(acc multiaccounts.Account, password string, keyHex string) error {
|
func (b *GethStatusBackend) startNodeWithKey(acc multiaccounts.Account, password string, keyHex string, inputNodeCfg *params.NodeConfig) error {
|
||||||
if acc.KDFIterations == 0 {
|
if acc.KDFIterations == 0 {
|
||||||
kdfIterations, err := b.multiaccountsDB.GetAccountKDFIterationsNumber(acc.KeyUID)
|
kdfIterations, err := b.multiaccountsDB.GetAccountKDFIterationsNumber(acc.KeyUID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -389,7 +389,7 @@ func (b *GethStatusBackend) startNodeWithKey(acc multiaccounts.Account, password
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = b.loadNodeConfig(nil)
|
err = b.loadNodeConfig(inputNodeCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -449,8 +449,8 @@ func (b *GethStatusBackend) startNodeWithKey(acc multiaccounts.Account, password
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) StartNodeWithKey(acc multiaccounts.Account, password string, keyHex string) error {
|
func (b *GethStatusBackend) StartNodeWithKey(acc multiaccounts.Account, password string, keyHex string, nodecfg *params.NodeConfig) error {
|
||||||
err := b.startNodeWithKey(acc, password, keyHex)
|
err := b.startNodeWithKey(acc, password, keyHex, nodecfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Stop node for clean up
|
// Stop node for clean up
|
||||||
_ = b.StopNode()
|
_ = b.StopNode()
|
||||||
|
@ -1308,7 +1308,7 @@ func (b *GethStatusBackend) SaveAccountAndStartNodeWithKey(account multiaccounts
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return b.StartNodeWithKey(account, password, keyHex)
|
return b.StartNodeWithKey(account, password, keyHex, nodecfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartNodeWithAccountAndInitialConfig is used after account and config was generated.
|
// StartNodeWithAccountAndInitialConfig is used after account and config was generated.
|
||||||
|
|
|
@ -440,15 +440,20 @@ func SaveAccountAndLoginWithKeycard(accountData, password, settingsJSON, configJ
|
||||||
|
|
||||||
// LoginWithKeycard initializes an account with a chat key and encryption key used for PFS.
|
// LoginWithKeycard initializes an account with a chat key and encryption key used for PFS.
|
||||||
// It purges all the previous identities from Whisper, and injects the key as shh identity.
|
// It purges all the previous identities from Whisper, and injects the key as shh identity.
|
||||||
func LoginWithKeycard(accountData, password, keyHex string) string {
|
func LoginWithKeycard(accountData, password, keyHex string, configJSON string) string {
|
||||||
var account multiaccounts.Account
|
var account multiaccounts.Account
|
||||||
err := json.Unmarshal([]byte(accountData), &account)
|
err := json.Unmarshal([]byte(accountData), &account)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return makeJSONResponse(err)
|
return makeJSONResponse(err)
|
||||||
}
|
}
|
||||||
|
var conf params.NodeConfig
|
||||||
|
err = json.Unmarshal([]byte(configJSON), &conf)
|
||||||
|
if err != nil {
|
||||||
|
return makeJSONResponse(err)
|
||||||
|
}
|
||||||
api.RunAsync(func() error {
|
api.RunAsync(func() error {
|
||||||
log.Debug("start a node with account", "key-uid", account.KeyUID)
|
log.Debug("start a node with account", "key-uid", account.KeyUID)
|
||||||
err := statusBackend.StartNodeWithKey(account, password, keyHex)
|
err := statusBackend.StartNodeWithKey(account, password, keyHex, &conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("failed to start a node", "key-uid", account.KeyUID, "error", err)
|
log.Error("failed to start a node", "key-uid", account.KeyUID, "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -485,6 +485,9 @@ type NodeConfig struct {
|
||||||
PushNotificationServerConfig pushnotificationserver.Config `json:"PushNotificationServerConfig"`
|
PushNotificationServerConfig pushnotificationserver.Config `json:"PushNotificationServerConfig"`
|
||||||
|
|
||||||
OutputMessageCSVEnabled bool
|
OutputMessageCSVEnabled bool
|
||||||
|
|
||||||
|
// ProcessBackedupMessages should be set to true when user follows recovery (using seed phrase or keycard) onboarding flow
|
||||||
|
ProcessBackedupMessages bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type TokenOverride struct {
|
type TokenOverride struct {
|
||||||
|
|
|
@ -171,6 +171,8 @@ type Messenger struct {
|
||||||
|
|
||||||
// flag to disable checking #hasPairedDevices
|
// flag to disable checking #hasPairedDevices
|
||||||
localPairing bool
|
localPairing bool
|
||||||
|
// flag to enable backedup messages processing, false by default
|
||||||
|
processBackedupMessages bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type connStatus int
|
type connStatus int
|
||||||
|
@ -595,6 +597,10 @@ func (m *Messenger) SetP2PServer(server *p2p.Server) {
|
||||||
m.server = server
|
m.server = server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Messenger) EnableBackedupMessagesProcessing() {
|
||||||
|
m.processBackedupMessages = true
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Messenger) processSentMessages(ids []string) error {
|
func (m *Messenger) processSentMessages(ids []string) error {
|
||||||
if m.connectionState.Offline {
|
if m.connectionState.Offline {
|
||||||
return errors.New("Can't mark message as sent while offline")
|
return errors.New("Can't mark message as sent while offline")
|
||||||
|
@ -3781,6 +3787,9 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
|
||||||
}
|
}
|
||||||
|
|
||||||
case protobuf.Backup:
|
case protobuf.Backup:
|
||||||
|
if !m.processBackedupMessages {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
|
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
|
||||||
logger.Warn("not coming from us, ignoring")
|
logger.Warn("not coming from us, ignoring")
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -115,6 +115,8 @@ func newMessengerWithKey(shh types.Waku, privateKey *ecdsa.PrivateKey, logger *z
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.EnableBackedupMessagesProcessing()
|
||||||
|
|
||||||
_, err = m.Start()
|
_, err = m.Start()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -97,7 +97,7 @@ func (s *SyncRawMessageHandler) HandleRawMessage(accountPayload *AccountPayload,
|
||||||
if len(accountPayload.chatKey) == 0 {
|
if len(accountPayload.chatKey) == 0 {
|
||||||
err = s.backend.StartNodeWithAccount(*account, accountPayload.password, nodeConfig)
|
err = s.backend.StartNodeWithAccount(*account, accountPayload.password, nodeConfig)
|
||||||
} else {
|
} else {
|
||||||
err = s.backend.StartNodeWithKey(*account, accountPayload.password, accountPayload.chatKey)
|
err = s.backend.StartNodeWithKey(*account, accountPayload.password, accountPayload.chatKey, nodeConfig)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
accountManager := s.backend.AccountManager()
|
accountManager := s.backend.AccountManager()
|
||||||
|
|
|
@ -173,6 +173,9 @@ func (s *Service) InitProtocol(nodeName string, identity *ecdsa.PrivateKey, db *
|
||||||
}
|
}
|
||||||
s.messenger = messenger
|
s.messenger = messenger
|
||||||
s.messenger.SetP2PServer(s.server)
|
s.messenger.SetP2PServer(s.server)
|
||||||
|
if s.config.ProcessBackedupMessages {
|
||||||
|
s.messenger.EnableBackedupMessagesProcessing()
|
||||||
|
}
|
||||||
return messenger.Init()
|
return messenger.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue