status-im/status-go

View on GitHub
protocol/requests/restore_account.go

Summary

Maintainability
A
0 mins
Test Coverage
B
80%
package requests

import (
    "errors"
)

var (
    ErrRestoreAccountInvalidMnemonic    = errors.New("restore-account: no mnemonic or keycard is set")
    ErrRestoreAccountMnemonicAndKeycard = errors.New("restore-account: both mnemonic and keycard info are set")
)

type RestoreAccount struct {
    Mnemonic string `json:"mnemonic"`

    // Keycard info can be set instead of Mnemonic.
    // This is to log in using a keycard with existing account.
    Keycard *KeycardData `json:"keycard"`

    FetchBackup bool `json:"fetchBackup"`

    CreateAccount
}

func (c *RestoreAccount) Validate() error {
    if len(c.Mnemonic) == 0 && c.Keycard == nil {
        return ErrRestoreAccountInvalidMnemonic
    }

    if len(c.Mnemonic) > 0 && c.Keycard != nil {
        return ErrRestoreAccountMnemonicAndKeycard
    }

    return c.CreateAccount.Validate(&CreateAccountValidation{
        AllowEmptyDisplayName: true,
    })
}

type KeycardData struct {
    KeyUID              string `json:"keyUID"`
    Address             string `json:"address"`
    WhisperPrivateKey   string `json:"whisperPrivateKey"`
    WhisperPublicKey    string `json:"whisperPublicKey"`
    WhisperAddress      string `json:"whisperAddress"`
    WalletPublicKey     string `json:"walletPublicKey"`
    WalletAddress       string `json:"walletAddress"`
    WalletRootAddress   string `json:"walletRootAddress"`
    Eip1581Address      string `json:"eip1581Address"`
    EncryptionPublicKey string `json:"encryptionPublicKey"`
}