feat(keycard): `ConvertToRegularAccount` endpoint added
It converts a keycard user to a regular user, setting all necessary details that logged in account looks like it has never been a keycard account.
This commit is contained in:
parent
902d4b7501
commit
6e656448ba
|
@ -565,7 +565,7 @@ func (b *GethStatusBackend) ChangeDatabasePassword(keyUID string, password strin
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) ConvertToKeycardAccount(keyStoreDir string, account multiaccounts.Account, s settings.Settings, password string, newPassword string) error {
|
func (b *GethStatusBackend) ConvertToKeycardAccount(keyStoreDir string, account multiaccounts.Account, s settings.Settings, password string, newPassword string) error {
|
||||||
err := b.multiaccountsDB.UpdateAccountKeycardPairing(account)
|
err := b.multiaccountsDB.UpdateAccountKeycardPairing(account.KeyUID, account.KeycardPairing)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -650,6 +650,87 @@ func (b *GethStatusBackend) ConvertToKeycardAccount(keyStoreDir string, account
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *GethStatusBackend) ConvertToRegularAccount(mnemonic string, currPassword string, newPassword string) error {
|
||||||
|
mnemonicNoExtraSpaces := strings.Join(strings.Fields(mnemonic), " ")
|
||||||
|
accountInfo, err := b.accountManager.AccountsGenerator().ImportMnemonic(mnemonicNoExtraSpaces, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
kdfIterations, err := b.multiaccountsDB.GetAccountKDFIterationsNumber(accountInfo.KeyUID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = b.ensureAppDBOpened(multiaccounts.Account{KeyUID: accountInfo.KeyUID, KDFIterations: kdfIterations}, newPassword)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
db, err := accounts.NewDB(b.appDB)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
knownAccounts, err := db.GetAccounts()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// We add these two paths, cause others will be added via `StoreAccount` function call
|
||||||
|
const pathWalletRoot = "m/44'/60'/0'/0"
|
||||||
|
const pathEIP1581 = "m/43'/60'/1581'"
|
||||||
|
var paths []string
|
||||||
|
paths = append(paths, pathWalletRoot, pathEIP1581)
|
||||||
|
for _, acc := range knownAccounts {
|
||||||
|
if accountInfo.KeyUID == acc.KeyUID {
|
||||||
|
paths = append(paths, acc.Path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = b.accountManager.AccountsGenerator().StoreAccount(accountInfo.ID, currPassword)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = b.accountManager.AccountsGenerator().StoreDerivedAccounts(accountInfo.ID, currPassword, paths)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = b.multiaccountsDB.UpdateAccountKeycardPairing(accountInfo.KeyUID, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.DeleteKeypair(accountInfo.KeyUID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.SaveSettingField(settings.KeycardInstanceUID, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.SaveSettingField(settings.KeycardPairedOn, 0)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.SaveSettingField(settings.KeycardPairing, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = b.closeAppDB()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.ChangeDatabasePassword(accountInfo.KeyUID, currPassword, newPassword)
|
||||||
|
}
|
||||||
|
|
||||||
func (b *GethStatusBackend) VerifyDatabasePassword(keyUID string, password string) error {
|
func (b *GethStatusBackend) VerifyDatabasePassword(keyUID string, password string) error {
|
||||||
kdfIterations, err := b.multiaccountsDB.GetAccountKDFIterationsNumber(keyUID)
|
kdfIterations, err := b.multiaccountsDB.GetAccountKDFIterationsNumber(keyUID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -847,6 +847,14 @@ func ConvertToKeycardAccount(keyStoreDir, accountData, settingsJSON, password, n
|
||||||
return makeJSONResponse(nil)
|
return makeJSONResponse(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ConvertToRegularAccount(mnemonic, currPassword, newPassword string) string {
|
||||||
|
err := statusBackend.ConvertToRegularAccount(mnemonic, currPassword, newPassword)
|
||||||
|
if err != nil {
|
||||||
|
return makeJSONResponse(err)
|
||||||
|
}
|
||||||
|
return makeJSONResponse(nil)
|
||||||
|
}
|
||||||
|
|
||||||
func ImageServerTLSCert() string {
|
func ImageServerTLSCert() string {
|
||||||
cert, err := server.PublicTLSCert()
|
cert, err := server.PublicTLSCert()
|
||||||
|
|
||||||
|
|
|
@ -317,8 +317,8 @@ func (db *Database) UpdateAccount(account Account) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) UpdateAccountKeycardPairing(account Account) error {
|
func (db *Database) UpdateAccountKeycardPairing(keyUID string, keycardPairing string) error {
|
||||||
_, err := db.db.Exec("UPDATE accounts SET keycardPairing = ? WHERE keyUid = ?", account.KeycardPairing, account.KeyUID)
|
_, err := db.db.Exec("UPDATE accounts SET keycardPairing = ? WHERE keyUid = ?", keycardPairing, keyUID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue