Fix account not being stored
This commit is contained in:
parent
1be356af93
commit
bafdf08529
|
@ -1,6 +1,7 @@
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
@ -33,6 +34,7 @@ import (
|
||||||
"github.com/status-im/status-go/protocol/requests"
|
"github.com/status-im/status-go/protocol/requests"
|
||||||
"github.com/status-im/status-go/rpc"
|
"github.com/status-im/status-go/rpc"
|
||||||
"github.com/status-im/status-go/services/typeddata"
|
"github.com/status-im/status-go/services/typeddata"
|
||||||
|
walletservice "github.com/status-im/status-go/services/wallet"
|
||||||
"github.com/status-im/status-go/signal"
|
"github.com/status-im/status-go/signal"
|
||||||
"github.com/status-im/status-go/sqlite"
|
"github.com/status-im/status-go/sqlite"
|
||||||
"github.com/status-im/status-go/t/helpers"
|
"github.com/status-im/status-go/t/helpers"
|
||||||
|
@ -768,7 +770,8 @@ func TestLoginAccount(t *testing.T) {
|
||||||
c <- struct{}{}
|
c <- struct{}{}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
require.NoError(t, b.CreateAccountAndLogin(createAccountRequest))
|
_, err := b.CreateAccountAndLogin(createAccountRequest)
|
||||||
|
require.NoError(t, err)
|
||||||
require.NoError(t, b.Logout())
|
require.NoError(t, b.Logout())
|
||||||
require.NoError(t, b.StopNode())
|
require.NoError(t, b.StopNode())
|
||||||
|
|
||||||
|
@ -1290,3 +1293,68 @@ func TestChangeDatabasePassword(t *testing.T) {
|
||||||
require.NotNil(t, key)
|
require.NotNil(t, key)
|
||||||
require.Equal(t, acc.Address, key.Address)
|
require.Equal(t, acc.Address, key.Address)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCreateWallet(t *testing.T) {
|
||||||
|
utils.Init()
|
||||||
|
password := "some-password2"
|
||||||
|
tmpdir := t.TempDir()
|
||||||
|
|
||||||
|
b := NewGethStatusBackend()
|
||||||
|
createAccountRequest := &requests.CreateAccount{
|
||||||
|
DisplayName: "some-display-name",
|
||||||
|
CustomizationColor: "#ffffff",
|
||||||
|
Password: password,
|
||||||
|
BackupDisabledDataDir: tmpdir,
|
||||||
|
NetworkID: 1,
|
||||||
|
LogFilePath: tmpdir + "/log",
|
||||||
|
}
|
||||||
|
c := make(chan interface{}, 10)
|
||||||
|
signal.SetMobileSignalHandler(func(data []byte) {
|
||||||
|
if strings.Contains(string(data), "node.login") {
|
||||||
|
c <- struct{}{}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
account, err := b.CreateAccountAndLogin(createAccountRequest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
statusNode := b.statusNode
|
||||||
|
require.NotNil(t, statusNode)
|
||||||
|
|
||||||
|
walletService := statusNode.WalletService()
|
||||||
|
require.NotNil(t, walletService)
|
||||||
|
walletAPI := walletservice.NewAPI(walletService)
|
||||||
|
|
||||||
|
paths := []string{"m/44'/60'/0'/0/1"}
|
||||||
|
|
||||||
|
db, err := accounts.NewDB(b.appDB)
|
||||||
|
require.NoError(t, err)
|
||||||
|
walletRootAddress, err := db.GetWalletRootAddress()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
masterRootAddress, err := db.GetMasterAddress()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
fmt.Println("WALLET ROOT", walletRootAddress.String())
|
||||||
|
fmt.Println("MASTER ROOT", masterRootAddress.String())
|
||||||
|
|
||||||
|
derivedAddress, err := walletAPI.GetDerivedAddresses(context.Background(), password, walletRootAddress.String(), paths)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, derivedAddress, 1)
|
||||||
|
|
||||||
|
fmt.Println("DERVIED", derivedAddress)
|
||||||
|
accountsService := statusNode.AccountService()
|
||||||
|
require.NotNil(t, accountsService)
|
||||||
|
accountsAPI := accountsService.AccountsAPI()
|
||||||
|
|
||||||
|
err = accountsAPI.AddAccount(context.Background(), password, &accounts.Account{
|
||||||
|
KeyUID: account.KeyUID,
|
||||||
|
Type: accounts.AccountTypeGenerated,
|
||||||
|
PublicKey: derivedAddress[0].PublicKey,
|
||||||
|
Emoji: "some",
|
||||||
|
ColorID: "so",
|
||||||
|
Name: "some name",
|
||||||
|
Path: derivedAddress[0].Path,
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ func TestCreateAccountAndLogin(t *testing.T) {
|
||||||
err := json.Unmarshal([]byte(requestJSON), &request)
|
err := json.Unmarshal([]byte(requestJSON), &request)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
statusBackend := NewGethStatusBackend()
|
statusBackend := NewGethStatusBackend()
|
||||||
err = statusBackend.CreateAccountAndLogin(&request)
|
_, err = statusBackend.CreateAccountAndLogin(&request)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
t.Logf("TestCreateAccountAndLogin: create account user1 and login successfully")
|
t.Logf("TestCreateAccountAndLogin: create account user1 and login successfully")
|
||||||
// wait waku node start working
|
// wait waku node start working
|
||||||
|
@ -57,6 +57,6 @@ func TestCreateAccountAndLogin(t *testing.T) {
|
||||||
requestJSON = fmt.Sprintf(requestJSONTemplateString, rootDir, "user2", rootDir)
|
requestJSON = fmt.Sprintf(requestJSONTemplateString, rootDir, "user2", rootDir)
|
||||||
err = json.Unmarshal([]byte(requestJSON), &request)
|
err = json.Unmarshal([]byte(requestJSON), &request)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
err = statusBackend.CreateAccountAndLogin(&request)
|
_, err = statusBackend.CreateAccountAndLogin(&request)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1236,10 +1236,10 @@ func (b *GethStatusBackend) ConvertToKeycardAccount(account multiaccounts.Accoun
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) RestoreAccountAndLogin(request *requests.RestoreAccount) error {
|
func (b *GethStatusBackend) RestoreAccountAndLogin(request *requests.RestoreAccount) (*multiaccounts.Account, error) {
|
||||||
|
|
||||||
if err := request.Validate(); err != nil {
|
if err := request.Validate(); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return b.generateOrImportAccount(request.Mnemonic, 0, &request.CreateAccount)
|
return b.generateOrImportAccount(request.Mnemonic, 0, &request.CreateAccount)
|
||||||
|
@ -1256,14 +1256,14 @@ func (b *GethStatusBackend) GetKeyUIDByMnemonic(mnemonic string) (string, error)
|
||||||
return info.KeyUID, nil
|
return info.KeyUID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizationColorClock uint64, request *requests.CreateAccount) error {
|
func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizationColorClock uint64, request *requests.CreateAccount) (*multiaccounts.Account, error) {
|
||||||
keystoreDir := keystoreRelativePath
|
keystoreDir := keystoreRelativePath
|
||||||
|
|
||||||
b.UpdateRootDataDir(request.BackupDisabledDataDir)
|
b.UpdateRootDataDir(request.BackupDisabledDataDir)
|
||||||
err := b.OpenAccounts()
|
err := b.OpenAccounts()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.log.Error("failed open accounts", err)
|
b.log.Error("failed open accounts", err)
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
accountGenerator := b.accountManager.AccountsGenerator()
|
accountGenerator := b.accountManager.AccountsGenerator()
|
||||||
|
@ -1275,30 +1275,35 @@ func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizati
|
||||||
info = generatedAccountInfos[0]
|
info = generatedAccountInfos[0]
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
info, err = accountGenerator.ImportMnemonic(mnemonic, "")
|
info, err = accountGenerator.ImportMnemonic(mnemonic, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
derivedAddresses, err := accountGenerator.DeriveAddresses(info.ID, paths)
|
derivedAddresses, err := accountGenerator.DeriveAddresses(info.ID, paths)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
userKeyStoreDir := filepath.Join(keystoreDir, info.KeyUID)
|
userKeyStoreDir := filepath.Join(keystoreDir, info.KeyUID)
|
||||||
// Initialize keystore dir with account
|
// Initialize keystore dir with account
|
||||||
if err := b.accountManager.InitKeystore(filepath.Join(b.rootDataDir, userKeyStoreDir)); err != nil {
|
if err := b.accountManager.InitKeystore(filepath.Join(b.rootDataDir, userKeyStoreDir)); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = accountGenerator.StoreAccount(info.ID, request.Password)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = accountGenerator.StoreDerivedAccounts(info.ID, request.Password, paths)
|
_, err = accountGenerator.StoreDerivedAccounts(info.ID, request.Password, paths)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
account := multiaccounts.Account{
|
account := multiaccounts.Account{
|
||||||
|
@ -1311,14 +1316,14 @@ func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizati
|
||||||
if request.ImagePath != "" {
|
if request.ImagePath != "" {
|
||||||
iis, err := images.GenerateIdentityImages(request.ImagePath, 0, 0, 1000, 1000)
|
iis, err := images.GenerateIdentityImages(request.ImagePath, 0, 0, 1000, 1000)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
account.Images = iis
|
account.Images = iis
|
||||||
}
|
}
|
||||||
|
|
||||||
settings, err := defaultSettings(info, derivedAddresses, nil)
|
settings, err := defaultSettings(info, derivedAddresses, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
settings.DeviceName = request.DeviceName
|
settings.DeviceName = request.DeviceName
|
||||||
|
@ -1334,7 +1339,7 @@ func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizati
|
||||||
|
|
||||||
nodeConfig, err := defaultNodeConfig(settings.InstallationID, request)
|
nodeConfig, err := defaultNodeConfig(settings.InstallationID, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
if mnemonic != "" {
|
if mnemonic != "" {
|
||||||
nodeConfig.ProcessBackedupMessages = true
|
nodeConfig.ProcessBackedupMessages = true
|
||||||
|
@ -1369,17 +1374,16 @@ func (b *GethStatusBackend) generateOrImportAccount(mnemonic string, customizati
|
||||||
err = b.StartNodeWithAccountAndInitialConfig(account, request.Password, *settings, nodeConfig, subAccounts)
|
err = b.StartNodeWithAccountAndInitialConfig(account, request.Password, *settings, nodeConfig, subAccounts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
b.log.Error("start node", err)
|
b.log.Error("start node", err)
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return &account, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) CreateAccountAndLogin(request *requests.CreateAccount) error {
|
func (b *GethStatusBackend) CreateAccountAndLogin(request *requests.CreateAccount) (*multiaccounts.Account, error) {
|
||||||
|
|
||||||
if err := request.Validate(); err != nil {
|
if err := request.Validate(); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
return b.generateOrImportAccount("", 1, request)
|
return b.generateOrImportAccount("", 1, request)
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,7 +279,7 @@ func CreateAccountAndLogin(requestJSON string) string {
|
||||||
|
|
||||||
api.RunAsync(func() error {
|
api.RunAsync(func() error {
|
||||||
log.Debug("starting a node and creating config")
|
log.Debug("starting a node and creating config")
|
||||||
err := statusBackend.CreateAccountAndLogin(&request)
|
_, err := statusBackend.CreateAccountAndLogin(&request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("failed to create account", "error", err)
|
log.Error("failed to create account", "error", err)
|
||||||
return err
|
return err
|
||||||
|
@ -328,7 +328,7 @@ func RestoreAccountAndLogin(requestJSON string) string {
|
||||||
|
|
||||||
api.RunAsync(func() error {
|
api.RunAsync(func() error {
|
||||||
log.Debug("starting a node and restoring account")
|
log.Debug("starting a node and restoring account")
|
||||||
err := statusBackend.RestoreAccountAndLogin(&request)
|
_, err := statusBackend.RestoreAccountAndLogin(&request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("failed to restore account", "error", err)
|
log.Error("failed to restore account", "error", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -55,7 +55,7 @@ func (s *Service) APIs() []rpc.API {
|
||||||
{
|
{
|
||||||
Namespace: "accounts",
|
Namespace: "accounts",
|
||||||
Version: "0.1.0",
|
Version: "0.1.0",
|
||||||
Service: NewAccountsAPI(s.manager, s.config, s.db, s.feed, &s.messenger),
|
Service: s.AccountsAPI(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Namespace: "multiaccounts",
|
Namespace: "multiaccounts",
|
||||||
|
@ -65,6 +65,10 @@ func (s *Service) APIs() []rpc.API {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) AccountsAPI() *API {
|
||||||
|
return NewAccountsAPI(s.manager, s.config, s.db, s.feed, &s.messenger)
|
||||||
|
}
|
||||||
|
|
||||||
// Protocols returns list of p2p protocols.
|
// Protocols returns list of p2p protocols.
|
||||||
func (s *Service) Protocols() []p2p.Protocol {
|
func (s *Service) Protocols() []p2p.Protocol {
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue