From 948d2b424e91427e1ee98b87a7d55cbd22ef6e53 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Sat, 16 Jul 2022 09:33:10 -0500 Subject: [PATCH] Make KeyManagerAppConfig.walletName return String rather than Option[String] (#4507) --- .../bitcoins/server/BitcoinSServerMain.scala | 4 +-- .../org/bitcoins/server/WalletRoutes.scala | 2 +- .../bitcoins/server/util/WebsocketUtil.scala | 7 ++--- .../scala/org/bitcoins/db/PostgresUtil.scala | 14 +++++++++ .../bitcoins/dlc/wallet/DLCAppConfig.scala | 29 ++++++++++--------- .../keymanager/WalletStorageTest.scala | 2 +- .../config/KeyManagerAppConfig.scala | 17 +++++++---- .../wallet/config/WalletAppConfig.scala | 24 +++++++-------- 8 files changed, 58 insertions(+), 41 deletions(-) create mode 100644 db-commons/src/main/scala/org/bitcoins/db/PostgresUtil.scala diff --git a/app/server/src/main/scala/org/bitcoins/server/BitcoinSServerMain.scala b/app/server/src/main/scala/org/bitcoins/server/BitcoinSServerMain.scala index 8533a0ba89..bec26bcc70 100644 --- a/app/server/src/main/scala/org/bitcoins/server/BitcoinSServerMain.scala +++ b/app/server/src/main/scala/org/bitcoins/server/BitcoinSServerMain.scala @@ -230,7 +230,7 @@ class BitcoinSServerMain(override val serverArgParser: ServerArgParser)(implicit chainConf.addCallbacks(chainCallbacks) val walletCallbacks = - WebsocketUtil.buildWalletCallbacks(wsQueue, walletConf.walletNameOpt) + WebsocketUtil.buildWalletCallbacks(wsQueue, walletConf.walletName) walletConf.addCallbacks(walletCallbacks) val dlcWalletCallbacks = WebsocketUtil.buildDLCWalletCallbacks(wsQueue) @@ -341,7 +341,7 @@ class BitcoinSServerMain(override val serverArgParser: ServerArgParser)(implicit walletCallbacks = WebsocketUtil.buildWalletCallbacks( wsQueue, - walletConf.walletNameOpt) + walletConf.walletName) _ = walletConf.addCallbacks(walletCallbacks) (wallet, chainCallbacks) <- walletF diff --git a/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala b/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala index f73f3eeae1..ffe0748faf 100644 --- a/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala +++ b/app/server/src/main/scala/org/bitcoins/server/WalletRoutes.scala @@ -1011,7 +1011,7 @@ case class WalletRoutes(wallet: AnyDLCHDWalletApi)(implicit KeyManagerAppConfig.moduleName -> Obj( "rootXpub" -> Str(wallet.keyManager.getRootXPub.toString) ), - "walletName" -> Str(walletConf.walletNameOpt.getOrElse("")), + "walletName" -> Str(walletConf.walletName), "xpub" -> Str(accountDb.xpub.toString), "hdPath" -> Str(accountDb.hdAccount.toString), "height" -> Num(walletState.height), diff --git a/app/server/src/main/scala/org/bitcoins/server/util/WebsocketUtil.scala b/app/server/src/main/scala/org/bitcoins/server/util/WebsocketUtil.scala index d3ba016732..1c6a3f579e 100644 --- a/app/server/src/main/scala/org/bitcoins/server/util/WebsocketUtil.scala +++ b/app/server/src/main/scala/org/bitcoins/server/util/WebsocketUtil.scala @@ -84,8 +84,7 @@ object WebsocketUtil extends Logging { /** Builds websocket callbacks for the wallet */ def buildWalletCallbacks( walletQueue: SourceQueueWithComplete[Message], - walletNameOpt: Option[String])(implicit - ec: ExecutionContext): WalletCallbacks = { + walletName: String)(implicit ec: ExecutionContext): WalletCallbacks = { val onAddressCreated: OnNewAddressGenerated = { addr => val notification = WalletNotification.NewAddressNotification(addr) val json = @@ -118,9 +117,7 @@ object WebsocketUtil extends Logging { } val onRescanComplete: OnRescanComplete = { _ => - val name = - walletNameOpt.getOrElse("") // default name empty string on the wallet - val notification = WalletNotification.RescanComplete(name) + val notification = WalletNotification.RescanComplete(walletName) val notificationJson = upickle.default.writeJs(notification)(WsPicklers.rescanPickler) val msg = TextMessage.Strict(notificationJson.toString()) diff --git a/db-commons/src/main/scala/org/bitcoins/db/PostgresUtil.scala b/db-commons/src/main/scala/org/bitcoins/db/PostgresUtil.scala new file mode 100644 index 0000000000..56c9a42758 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/PostgresUtil.scala @@ -0,0 +1,14 @@ +package org.bitcoins.db + +import org.bitcoins.keymanager.config.KeyManagerAppConfig + +object PostgresUtil { + + def getSchemaName(moduleName: String, walletName: String): String = { + if (walletName == KeyManagerAppConfig.DEFAULT_WALLET_NAME) { + moduleName + } else { + s"${moduleName}_$walletName" + } + } +} diff --git a/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCAppConfig.scala b/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCAppConfig.scala index 58b4f6fecf..f5df6291f0 100644 --- a/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCAppConfig.scala +++ b/dlc-wallet/src/main/scala/org/bitcoins/dlc/wallet/DLCAppConfig.scala @@ -17,6 +17,7 @@ import org.bitcoins.dlc.wallet.models.{ OfferedDbState, SetupCompleteDLCDbState } +import org.bitcoins.keymanager.config.KeyManagerAppConfig import org.bitcoins.wallet.config.WalletAppConfig import org.bitcoins.wallet.models.TransactionDAO import org.bitcoins.wallet.{Wallet, WalletLogger} @@ -75,28 +76,30 @@ case class DLCAppConfig(baseDatadir: Path, configOverrides: Vector[Config])( lazy val walletConf: WalletAppConfig = WalletAppConfig(baseDatadir, configOverrides) - lazy val walletNameOpt: Option[String] = walletConf.walletNameOpt + lazy val walletName: String = walletConf.walletName override lazy val dbPath: Path = { val pathStrOpt = config.getStringOrNone(s"bitcoin-s.$moduleName.db.path") - (pathStrOpt, walletNameOpt) match { - case (Some(pathStr), Some(walletName)) => - Paths.get(pathStr).resolve(walletName) - case (Some(pathStr), None) => - Paths.get(pathStr) - case (None, Some(_)) | (None, None) => + pathStrOpt match { + case Some(pathStr) => + if (walletName == KeyManagerAppConfig.DEFAULT_WALLET_NAME) { + Paths.get(pathStr) + } else { + Paths.get(pathStr).resolve(walletName) + } + case None => sys.error(s"Could not find dbPath for $moduleName.db.path") } } override lazy val schemaName: Option[String] = { - (driver, walletNameOpt) match { - case (PostgreSQL, Some(walletName)) => - Some(s"${moduleName}_$walletName") - case (PostgreSQL, None) => - Some(moduleName) - case (SQLite, None) | (SQLite, Some(_)) => + driver match { + case PostgreSQL => + val schema = PostgresUtil.getSchemaName(moduleName = moduleName, + walletName = walletName) + Some(schema) + case SQLite => None } } diff --git a/key-manager-test/src/test/scala/org/bitcoins/keymanager/WalletStorageTest.scala b/key-manager-test/src/test/scala/org/bitcoins/keymanager/WalletStorageTest.scala index 5ce1f9bed0..772cc32b5c 100644 --- a/key-manager-test/src/test/scala/org/bitcoins/keymanager/WalletStorageTest.scala +++ b/key-manager-test/src/test/scala/org/bitcoins/keymanager/WalletStorageTest.scala @@ -670,7 +670,7 @@ class WalletStorageTest extends BitcoinSWalletTest with BeforeAndAfterEach { assert(walletConfA.kmConf.seedExists()) val otherWalletName = StringGenerators.genNonEmptyString - .suchThat(_ != walletConfA.walletNameOpt.getOrElse("")) + .suchThat(_ != walletConfA.walletName) .sampleSome val walletConfB = walletConfA.withOverrides( diff --git a/key-manager/src/main/scala/org/bitcoins/keymanager/config/KeyManagerAppConfig.scala b/key-manager/src/main/scala/org/bitcoins/keymanager/config/KeyManagerAppConfig.scala index 6e9be0d603..d7c1971a8d 100644 --- a/key-manager/src/main/scala/org/bitcoins/keymanager/config/KeyManagerAppConfig.scala +++ b/key-manager/src/main/scala/org/bitcoins/keymanager/config/KeyManagerAppConfig.scala @@ -9,6 +9,7 @@ import org.bitcoins.core.wallet.keymanagement.KeyManagerParams import org.bitcoins.crypto.{AesPassword, CryptoUtil} import org.bitcoins.keymanager.{ReadMnemonicError, WalletStorage} import org.bitcoins.keymanager.bip39.BIP39KeyManager +import org.bitcoins.keymanager.config.KeyManagerAppConfig.DEFAULT_WALLET_NAME import scodec.bits.BitVector import java.nio.file.{Files, Path} @@ -29,11 +30,11 @@ case class KeyManagerAppConfig( lazy val networkParameters: NetworkParameters = chain.network - lazy val walletNameOpt: Option[String] = { + lazy val walletName: String = { val nameOpt = config.getStringOrNone(s"bitcoin-s.wallet.walletName") require(nameOpt.map(KeyManagerAppConfig.validateWalletName).getOrElse(true), s"Invalid wallet name, only alphanumeric with _, got=$nameOpt") - nameOpt + nameOpt.getOrElse(KeyManagerAppConfig.DEFAULT_WALLET_NAME) } lazy val seedFolder: Path = baseDatadir @@ -45,10 +46,10 @@ case class KeyManagerAppConfig( } private val seedFileName: String = { - val prefix = walletNameOpt match { - case Some(walletName) => - s"$walletName-" - case None => "" + val prefix = if (walletName == DEFAULT_WALLET_NAME) { + DEFAULT_WALLET_NAME + } else { + s"$walletName-" } s"$prefix${WalletStorage.ENCRYPTED_SEED_FILE_NAME}" } @@ -214,6 +215,10 @@ case class KeyManagerAppConfig( } object KeyManagerAppConfig extends AppConfigFactory[KeyManagerAppConfig] { + + /** Default wallet name is the empty string for now */ + final val DEFAULT_WALLET_NAME: String = "" + override val moduleName: String = "keymanager" override def fromDatadir(datadir: Path, confs: Vector[Config])(implicit diff --git a/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala index c86fc06e3d..4dfc50d1e1 100644 --- a/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala +++ b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala @@ -155,28 +155,26 @@ case class WalletAppConfig(baseDatadir: Path, configOverrides: Vector[Config])( lazy val aesPasswordOpt: Option[AesPassword] = kmConf.aesPasswordOpt - lazy val walletNameOpt: Option[String] = kmConf.walletNameOpt + lazy val walletName: String = kmConf.walletName override lazy val dbPath: Path = { val pathStrOpt = config.getStringOrNone(s"bitcoin-s.$moduleName.db.path") - (pathStrOpt, walletNameOpt) match { - case (Some(pathStr), Some(walletName)) => + pathStrOpt match { + case Some(pathStr) => Paths.get(pathStr).resolve(walletName) - case (Some(pathStr), None) => - Paths.get(pathStr) - case (None, Some(_)) | (None, None) => + case None => sys.error(s"Could not find dbPath for $moduleName.db.path") } } override lazy val schemaName: Option[String] = { - (driver, walletNameOpt) match { - case (PostgreSQL, Some(walletName)) => - Some(s"${moduleName}_$walletName") - case (PostgreSQL, None) => - Some(moduleName) - case (SQLite, None) | (SQLite, Some(_)) => + driver match { + case PostgreSQL => + val schema = PostgresUtil.getSchemaName(moduleName = moduleName, + walletName = walletName) + Some(schema) + case SQLite => None } } @@ -195,7 +193,7 @@ case class WalletAppConfig(baseDatadir: Path, configOverrides: Vector[Config])( isExists <- seedExists() _ <- { logger.info( - s"Starting wallet with xpub=${masterXpub} walletName=${walletNameOpt}") + s"Starting wallet with xpub=${masterXpub} walletName=${walletName}") if (!isExists) { masterXPubDAO .create(masterXpub)