github.com/status-im/status-go@v1.1.0/protocol/requests/create_account.go (about)

     1  package requests
     2  
     3  import (
     4  	"github.com/pkg/errors"
     5  
     6  	utils "github.com/status-im/status-go/common"
     7  	"github.com/status-im/status-go/params"
     8  )
     9  
    10  var ErrCreateAccountInvalidDisplayName = errors.New("create-account: invalid display name")
    11  var ErrCreateAccountInvalidPassword = errors.New("create-account: invalid password")
    12  var ErrCreateAccountInvalidCustomizationColor = errors.New("create-account: invalid customization color")
    13  var ErrCreateAccountInvalidRootKeystoreDir = errors.New("create-account: invalid root keystore directory")
    14  var ErrCreateAccountInvalidRootDataDir = errors.New("create-account: invalid root data directory")
    15  
    16  type ImageCropRectangle struct {
    17  	Ax int `json:"ax"`
    18  	Ay int `json:"ay"`
    19  	Bx int `json:"bx"`
    20  	By int `json:"by"`
    21  }
    22  
    23  type APIConfig struct {
    24  	APIModules       string   `json:"apiModules"`
    25  	ConnectorEnabled bool     `json:"connectorEnabled"`
    26  	HTTPEnabled      bool     `json:"httpEnabled"`
    27  	HTTPHost         string   `json:"httpHost"`
    28  	HTTPPort         int      `json:"httpPort"`
    29  	HTTPVirtualHosts []string `json:"httpVirtualHosts"`
    30  	WSEnabled        bool     `json:"wsEnabled"`
    31  	WSHost           string   `json:"wsHost"`
    32  	WSPort           int      `json:"wsPort"`
    33  }
    34  
    35  type CreateAccount struct {
    36  	// RootDataDir is an absolute path to the root directory where all data will be stored.
    37  	RootDataDir   string `json:"rootDataDir"`
    38  	KdfIterations int    `json:"kdfIterations"`
    39  
    40  	DeviceName         string              `json:"deviceName"`
    41  	DisplayName        string              `json:"displayName"`
    42  	Password           string              `json:"password"`
    43  	ImagePath          string              `json:"imagePath"`
    44  	ImageCropRectangle *ImageCropRectangle `json:"imageCropRectangle"`
    45  	CustomizationColor string              `json:"customizationColor"`
    46  
    47  	WakuV2Nameserver                             *string `json:"wakuV2Nameserver"`
    48  	WakuV2LightClient                            bool    `json:"wakuV2LightClient"`
    49  	WakuV2EnableStoreConfirmationForMessagesSent bool    `json:"wakuV2EnableStoreConfirmationForMessagesSent"`
    50  	WakuV2EnableMissingMessageVerification       bool    `json:"wakuV2EnableMissingMessageVerification"`
    51  	WakuV2Fleet                                  string  `json:"wakuV2Fleet"`
    52  
    53  	LogLevel    *string `json:"logLevel"`
    54  	LogFilePath string  `json:"logFilePath"` // absolute path
    55  	LogEnabled  bool    `json:"logEnabled"`
    56  
    57  	PreviewPrivacy bool `json:"previewPrivacy"`
    58  
    59  	VerifyTransactionURL     *string `json:"verifyTransactionURL"`
    60  	VerifyENSURL             *string `json:"verifyENSURL"`
    61  	VerifyENSContractAddress *string `json:"verifyENSContractAddress"`
    62  	VerifyTransactionChainID *int64  `json:"verifyTransactionChainID"`
    63  	UpstreamConfig           string  `json:"upstreamConfig"`
    64  
    65  	// Deprecated: CurrentNetwork is deprecated. It was passed and not used, so nothing should be passed instead.
    66  	// If you want to use non-default network, use NetworkID.
    67  	CurrentNetwork       string           `json:"currentNetwork"`
    68  	NetworkID            *uint64          `json:"networkId"`
    69  	TestOverrideNetworks []params.Network `json:"-"` // This is used for testing purposes only
    70  
    71  	TestNetworksEnabled bool `json:"testNetworksEnabled"`
    72  
    73  	WalletSecretsConfig
    74  
    75  	TorrentConfigEnabled *bool
    76  	TorrentConfigPort    *int
    77  
    78  	TelemetryServerURL string `json:"telemetryServerURL"`
    79  
    80  	APIConfig *APIConfig `json:"apiConfig"`
    81  
    82  	KeycardInstanceUID     string  `json:"keycardInstanceUID"`
    83  	KeycardPairingDataFile *string `json:"keycardPairingDataFile"`
    84  	StatusProxyEnabled     bool    `json:"statusProxyEnabled"`
    85  }
    86  
    87  type WalletSecretsConfig struct {
    88  	PoktToken            string `json:"poktToken"`
    89  	InfuraToken          string `json:"infuraToken"`
    90  	InfuraSecret         string `json:"infuraSecret"`
    91  	OpenseaAPIKey        string `json:"openseaApiKey"`
    92  	RaribleMainnetAPIKey string `json:"raribleMainnetApiKey"`
    93  	RaribleTestnetAPIKey string `json:"raribleTestnetApiKey"`
    94  
    95  	AlchemyEthereumMainnetToken string `json:"alchemyEthereumMainnetToken"`
    96  	AlchemyEthereumGoerliToken  string `json:"alchemyEthereumGoerliToken"`
    97  	AlchemyEthereumSepoliaToken string `json:"alchemyEthereumSepoliaToken"`
    98  	AlchemyArbitrumMainnetToken string `json:"alchemyArbitrumMainnetToken"`
    99  	AlchemyArbitrumGoerliToken  string `json:"alchemyArbitrumGoerliToken"`
   100  	AlchemyArbitrumSepoliaToken string `json:"alchemyArbitrumSepoliaToken"`
   101  	AlchemyOptimismMainnetToken string `json:"alchemyOptimismMainnetToken"`
   102  	AlchemyOptimismGoerliToken  string `json:"alchemyOptimismGoerliToken"`
   103  	AlchemyOptimismSepoliaToken string `json:"alchemyOptimismSepoliaToken"`
   104  
   105  	StatusProxyStageName          string `json:"statusProxyStageName"`
   106  	StatusProxyMarketUser         string `json:"statusProxyMarketUser"`
   107  	StatusProxyMarketPassword     string `json:"statusProxyMarketPassword"`
   108  	StatusProxyBlockchainUser     string `json:"statusProxyBlockchainUser"`
   109  	StatusProxyBlockchainPassword string `json:"statusProxyBlockchainPassword"`
   110  
   111  	// Testing
   112  	GanacheURL string `json:"ganacheURL"`
   113  }
   114  
   115  func (c *CreateAccount) Validate(validation *CreateAccountValidation) error {
   116  	// TODO(cammellos): Add proper validation for password/displayname/etc
   117  	// Empty display name is allowed during account restore
   118  	if len(c.DisplayName) == 0 && !validation.AllowEmptyDisplayName {
   119  		return ErrCreateAccountInvalidDisplayName
   120  	}
   121  
   122  	if err := utils.ValidateDisplayName(&c.DisplayName); err != nil {
   123  		return errors.Wrap(ErrCreateAccountInvalidDisplayName, err.Error())
   124  	}
   125  
   126  	if len(c.Password) == 0 && !validation.AllowEmptyPassword {
   127  		return ErrCreateAccountInvalidPassword
   128  	}
   129  
   130  	if len(c.CustomizationColor) == 0 && !validation.AllowEmptyCustomizationColor {
   131  		return ErrCreateAccountInvalidCustomizationColor
   132  	}
   133  
   134  	if len(c.RootDataDir) == 0 {
   135  		return ErrCreateAccountInvalidRootDataDir
   136  	}
   137  
   138  	return nil
   139  }
   140  
   141  // NOTE: Reasoning for this struct here: https://github.com/status-im/status-go/pull/4980#discussion_r1539219099
   142  type CreateAccountValidation struct {
   143  	AllowEmptyDisplayName        bool
   144  	AllowEmptyPassword           bool
   145  	AllowEmptyCustomizationColor bool
   146  }