2021-01-08 22:10:31 +00:00
|
|
|
import options, chronicles, json, json_serialization, sequtils, sugar
|
2020-05-29 19:54:35 +00:00
|
|
|
import libstatus/accounts as status_accounts
|
2020-07-16 06:23:00 +00:00
|
|
|
import libstatus/settings as status_settings
|
2020-05-29 19:54:35 +00:00
|
|
|
import libstatus/types
|
2020-06-24 18:52:49 +00:00
|
|
|
import libstatus/utils
|
2020-10-12 05:21:41 +00:00
|
|
|
import ../eventemitter
|
2020-05-29 19:54:35 +00:00
|
|
|
|
|
|
|
type
|
|
|
|
AccountModel* = ref object
|
|
|
|
generatedAddresses*: seq[GeneratedAccount]
|
|
|
|
nodeAccounts*: seq[NodeAccount]
|
2020-06-04 07:38:24 +00:00
|
|
|
events: EventEmitter
|
2020-05-29 19:54:35 +00:00
|
|
|
|
2020-06-04 07:38:24 +00:00
|
|
|
proc newAccountModel*(events: EventEmitter): AccountModel =
|
2020-05-29 19:54:35 +00:00
|
|
|
result = AccountModel()
|
2020-06-04 07:38:24 +00:00
|
|
|
result.events = events
|
2020-05-29 19:54:35 +00:00
|
|
|
|
|
|
|
proc generateAddresses*(self: AccountModel): seq[GeneratedAccount] =
|
|
|
|
var accounts = status_accounts.generateAddresses()
|
|
|
|
for account in accounts.mitems:
|
|
|
|
account.name = status_accounts.generateAlias(account.derived.whisper.publicKey)
|
2020-11-30 17:03:52 +00:00
|
|
|
account.identicon = status_accounts.generateIdenticon(account.derived.whisper.publicKey)
|
2020-05-29 19:54:35 +00:00
|
|
|
self.generatedAddresses.add(account)
|
2020-06-04 07:38:24 +00:00
|
|
|
result = self.generatedAddresses
|
|
|
|
|
|
|
|
proc openAccounts*(self: AccountModel): seq[NodeAccount] =
|
|
|
|
result = status_accounts.openAccounts()
|
2020-05-29 19:54:35 +00:00
|
|
|
|
|
|
|
proc login*(self: AccountModel, selectedAccountIndex: int, password: string): NodeAccount =
|
|
|
|
let currentNodeAccount = self.nodeAccounts[selectedAccountIndex]
|
|
|
|
result = status_accounts.login(currentNodeAccount, password)
|
|
|
|
|
2020-11-03 19:42:55 +00:00
|
|
|
proc storeAccountAndLogin*(self: AccountModel, fleetConfig: FleetConfig, selectedAccountIndex: int, password: string): Account =
|
2020-05-29 19:54:35 +00:00
|
|
|
let generatedAccount: GeneratedAccount = self.generatedAddresses[selectedAccountIndex]
|
2020-11-03 19:42:55 +00:00
|
|
|
result = status_accounts.setupAccount(fleetConfig, generatedAccount, password)
|
2020-06-02 08:41:24 +00:00
|
|
|
|
2020-11-03 19:42:55 +00:00
|
|
|
proc storeDerivedAndLogin*(self: AccountModel, fleetConfig: FleetConfig, importedAccount: GeneratedAccount, password: string): Account =
|
|
|
|
result = status_accounts.setupAccount(fleetConfig, importedAccount, password)
|
2020-06-02 08:41:24 +00:00
|
|
|
|
|
|
|
proc importMnemonic*(self: AccountModel, mnemonic: string): GeneratedAccount =
|
|
|
|
let importedAccount = status_accounts.multiAccountImportMnemonic(mnemonic)
|
|
|
|
importedAccount.derived = status_accounts.deriveAccounts(importedAccount.id)
|
|
|
|
importedAccount.name = status_accounts.generateAlias(importedAccount.derived.whisper.publicKey)
|
2020-11-30 17:03:52 +00:00
|
|
|
importedAccount.identicon = status_accounts.generateIdenticon(importedAccount.derived.whisper.publicKey)
|
2020-06-02 08:41:24 +00:00
|
|
|
result = importedAccount
|
2020-06-04 07:38:24 +00:00
|
|
|
|
|
|
|
proc reset*(self: AccountModel) =
|
|
|
|
self.nodeAccounts = @[]
|
|
|
|
self.generatedAddresses = @[]
|
2020-06-24 18:52:49 +00:00
|
|
|
|
|
|
|
proc generateAlias*(publicKey: string): string =
|
|
|
|
result = status_accounts.generateAlias(publicKey)
|
2020-07-07 13:45:00 +00:00
|
|
|
|
|
|
|
proc generateIdenticon*(publicKey: string): string =
|
|
|
|
result = status_accounts.generateIdenticon(publicKey)
|
2020-07-16 06:23:00 +00:00
|
|
|
|
2020-11-03 19:42:55 +00:00
|
|
|
proc changeNetwork*(self: AccountModel, fleetConfig: FleetConfig, network: string) =
|
2020-07-16 06:23:00 +00:00
|
|
|
|
|
|
|
# 1. update current network setting
|
|
|
|
var statusGoResult = status_settings.saveSetting(Setting.Networks_CurrentNetwork, network)
|
|
|
|
if statusGoResult.error != "":
|
|
|
|
error "Error saving current network setting", msg=statusGoResult.error
|
|
|
|
|
|
|
|
# 2. update node config setting
|
|
|
|
let installationId = status_settings.getSetting[string](Setting.InstallationId)
|
2021-01-08 22:10:31 +00:00
|
|
|
|
|
|
|
let networks = getSetting[JsonNode](Setting.Networks_Networks)
|
|
|
|
let networkData = networks.getElems().find((n:JsonNode) => n["id"].getStr() == network)
|
|
|
|
|
|
|
|
let updatedNodeConfig = status_accounts.getNodeConfig(fleetConfig, installationId, networkData)
|
2020-07-16 06:23:00 +00:00
|
|
|
statusGoResult = status_settings.saveSetting(Setting.NodeConfig, updatedNodeConfig)
|
|
|
|
if statusGoResult.error != "":
|
|
|
|
error "Error saving updated node config", msg=statusGoResult.error
|
|
|
|
|
|
|
|
# 3. remove all installed sticker packs (pack ids do not match across networks)
|
|
|
|
statusGoResult = status_settings.saveSetting(Setting.Stickers_PacksInstalled, %* {})
|
|
|
|
if statusGoResult.error != "":
|
|
|
|
error "Error removing all installed sticker packs", msg=statusGoResult.error
|
|
|
|
|
|
|
|
# 4. remove all recent stickers (pack ids do not match across networks)
|
|
|
|
statusGoResult = status_settings.saveSetting(Setting.Stickers_Recent, %* {})
|
|
|
|
if statusGoResult.error != "":
|
|
|
|
error "Error removing all recent stickers", msg=statusGoResult.error
|