diff --git a/app/server/src/main/scala/org/bitcoins/server/BitcoinSAppConfig.scala b/app/server/src/main/scala/org/bitcoins/server/BitcoinSAppConfig.scala index 95637cbc27..868036c9ac 100644 --- a/app/server/src/main/scala/org/bitcoins/server/BitcoinSAppConfig.scala +++ b/app/server/src/main/scala/org/bitcoins/server/BitcoinSAppConfig.scala @@ -1,6 +1,6 @@ package org.bitcoins.server -import java.nio.file.Path +import java.nio.file.{Path, Paths} import com.typesafe.config.{Config, ConfigFactory} import org.bitcoins.chain.config.ChainAppConfig @@ -81,6 +81,17 @@ case class BitcoinSAppConfig( */ object BitcoinSAppConfig { + def fromConfig(config: Config)(implicit + ec: ExecutionContext): BitcoinSAppConfig = { + val configDataDir: Path = Paths.get(config.getString("bitcoin-s.datadir")) + BitcoinSAppConfig(configDataDir, config) + } + + def fromClassPathConfig()(implicit + ec: ExecutionContext): BitcoinSAppConfig = { + fromConfig(ConfigFactory.load()) + } + /** Constructs an app configuration from the default Bitcoin-S * data directory and given list of configuration overrides. */ diff --git a/db-commons-test/src/test/scala/org/bitcoins/db/AppConfigTest.scala b/db-commons-test/src/test/scala/org/bitcoins/db/AppConfigTest.scala index 39a4386b2f..29cd1dd05f 100644 --- a/db-commons-test/src/test/scala/org/bitcoins/db/AppConfigTest.scala +++ b/db-commons-test/src/test/scala/org/bitcoins/db/AppConfigTest.scala @@ -1,7 +1,9 @@ package org.bitcoins.db import com.typesafe.config.ConfigFactory -import org.bitcoins.core.config.TestNet3 +import org.bitcoins.core.config._ +import org.bitcoins.dlc.oracle.DLCOracleAppConfig +import org.bitcoins.server.BitcoinSAppConfig import org.bitcoins.testkit.BitcoinSTestAppConfig import org.bitcoins.testkit.util.BitcoinSAsyncTest import org.bitcoins.wallet.config.WalletAppConfig @@ -46,6 +48,33 @@ class AppConfigTest extends BitcoinSAsyncTest { assert(walletConf.dbName != nodeConf.dbName) } + it must "create from config" in { + val dir = BitcoinSTestAppConfig.tmpDir().toAbsolutePath + val conf = ConfigFactory.parseString { + s""" + |bitcoin-s { + | datadir = $dir + |} + """.stripMargin + } + + val appConfig = BitcoinSAppConfig.fromConfig(conf) + assert(appConfig.walletConf.baseDatadir == dir) + assert(appConfig.nodeConf.baseDatadir == dir) + assert(appConfig.chainConf.baseDatadir == dir) + assert(appConfig.bitcoindRpcConf.baseDatadir == dir) + + val dlcOracleAppConfig = DLCOracleAppConfig.fromConfig(conf) + assert(dlcOracleAppConfig.baseDatadir == dir) + } + + it must "create from class path config" in { + val appConfig = BitcoinSAppConfig.fromClassPathConfig() + assert(appConfig.nodeConf.network == RegTest) + assert(appConfig.walletConf.requiredConfirmations == 6) + assert(!appConfig.chainConf.forceRecalcChainWork) + } + it must "fill in typesafe config variables correctly" in { val datadir = BitcoinSTestAppConfig.tmpDir() val walletAppConfig = WalletAppConfig(datadir) diff --git a/db-commons/src/main/scala/org/bitcoins/db/AppConfigFactory.scala b/db-commons/src/main/scala/org/bitcoins/db/AppConfigFactory.scala index 6478fb13a2..869e292ff0 100644 --- a/db-commons/src/main/scala/org/bitcoins/db/AppConfigFactory.scala +++ b/db-commons/src/main/scala/org/bitcoins/db/AppConfigFactory.scala @@ -1,13 +1,22 @@ package org.bitcoins.db -import java.nio.file.Path +import java.nio.file.{Path, Paths} -import com.typesafe.config.Config +import com.typesafe.config.{Config, ConfigFactory} import scala.concurrent.ExecutionContext trait AppConfigFactory[C <: AppConfig] { + def fromConfig(config: Config)(implicit ec: ExecutionContext): C = { + val configDataDir: Path = Paths.get(config.getString("bitcoin-s.datadir")) + fromDatadir(configDataDir, Vector(config)) + } + + def fromClassPathConfig()(implicit ec: ExecutionContext): C = { + fromConfig(ConfigFactory.load()) + } + def fromDefaultDatadir(confs: Vector[Config] = Vector.empty)(implicit ec: ExecutionContext): C = { fromDatadir(AppConfig.DEFAULT_BITCOIN_S_DATADIR, confs) diff --git a/dlc-oracle/src/main/scala/org/bitcoins/dlc/oracle/DLCOracleAppConfig.scala b/dlc-oracle/src/main/scala/org/bitcoins/dlc/oracle/DLCOracleAppConfig.scala index 361d320487..b0a98c8f32 100644 --- a/dlc-oracle/src/main/scala/org/bitcoins/dlc/oracle/DLCOracleAppConfig.scala +++ b/dlc-oracle/src/main/scala/org/bitcoins/dlc/oracle/DLCOracleAppConfig.scala @@ -6,10 +6,10 @@ import com.typesafe.config.Config import org.bitcoins.core.config.NetworkParameters import org.bitcoins.core.crypto.ExtKeyVersion.SegWitMainNetPriv import org.bitcoins.core.crypto.MnemonicCode -import org.bitcoins.core.util.{TimeUtil} +import org.bitcoins.core.util.TimeUtil import org.bitcoins.crypto.AesPassword import org.bitcoins.db.DatabaseDriver._ -import org.bitcoins.db.{AppConfig, DbManagement, JdbcProfileComponent} +import org.bitcoins.db._ import org.bitcoins.dlc.oracle.storage._ import org.bitcoins.keymanager.{DecryptedMnemonic, WalletStorage} @@ -123,3 +123,10 @@ case class DLCOracleAppConfig( override def allTables: List[TableQuery[Table[_]]] = List(rValueTable, eventTable, eventOutcomeTable) } + +object DLCOracleAppConfig extends AppConfigFactory[DLCOracleAppConfig] { + + override def fromDatadir(datadir: Path, confs: Vector[Config])(implicit + ec: ExecutionContext): DLCOracleAppConfig = + DLCOracleAppConfig(datadir, confs: _*) +}