mod.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //! Environment variables module
  2. //!
  3. //! This module contains all environment variable definitions and parsing logic
  4. //! organized by component.
  5. mod common;
  6. mod info;
  7. mod ln;
  8. mod mint_info;
  9. #[cfg(feature = "auth")]
  10. mod auth;
  11. #[cfg(feature = "cln")]
  12. mod cln;
  13. #[cfg(feature = "fakewallet")]
  14. mod fake_wallet;
  15. #[cfg(feature = "grpc-processor")]
  16. mod grpc_processor;
  17. #[cfg(feature = "lnbits")]
  18. mod lnbits;
  19. #[cfg(feature = "lnd")]
  20. mod lnd;
  21. #[cfg(feature = "management-rpc")]
  22. mod management_rpc;
  23. use std::env;
  24. use std::str::FromStr;
  25. use anyhow::{anyhow, bail, Result};
  26. #[cfg(feature = "auth")]
  27. pub use auth::*;
  28. #[cfg(feature = "cln")]
  29. pub use cln::*;
  30. pub use common::*;
  31. #[cfg(feature = "fakewallet")]
  32. pub use fake_wallet::*;
  33. #[cfg(feature = "grpc-processor")]
  34. pub use grpc_processor::*;
  35. pub use ln::*;
  36. #[cfg(feature = "lnbits")]
  37. pub use lnbits::*;
  38. #[cfg(feature = "lnd")]
  39. pub use lnd::*;
  40. #[cfg(feature = "management-rpc")]
  41. pub use management_rpc::*;
  42. pub use mint_info::*;
  43. use crate::config::{Database, DatabaseEngine, LnBackend, Settings};
  44. impl Settings {
  45. pub fn from_env(&mut self) -> Result<Self> {
  46. if let Ok(database) = env::var(DATABASE_ENV_VAR) {
  47. let engine = DatabaseEngine::from_str(&database).map_err(|err| anyhow!(err))?;
  48. self.database = Database { engine };
  49. }
  50. self.info = self.info.clone().from_env();
  51. self.mint_info = self.mint_info.clone().from_env();
  52. self.ln = self.ln.clone().from_env();
  53. #[cfg(feature = "auth")]
  54. {
  55. // Check env vars for auth config even if None
  56. let auth = self.auth.clone().unwrap_or_default().from_env();
  57. // Only set auth if env vars are present and have non-default values
  58. if auth.openid_discovery != String::default()
  59. || auth.openid_client_id != String::default()
  60. || auth.mint_max_bat != 0
  61. || auth.enabled_mint
  62. || auth.enabled_melt
  63. || auth.enabled_swap
  64. {
  65. self.auth = Some(auth);
  66. } else {
  67. self.auth = None;
  68. }
  69. }
  70. #[cfg(feature = "management-rpc")]
  71. {
  72. self.mint_management_rpc = Some(
  73. self.mint_management_rpc
  74. .clone()
  75. .unwrap_or_default()
  76. .from_env(),
  77. );
  78. }
  79. match self.ln.ln_backend {
  80. #[cfg(feature = "cln")]
  81. LnBackend::Cln => {
  82. self.cln = Some(self.cln.clone().unwrap_or_default().from_env());
  83. }
  84. #[cfg(feature = "lnbits")]
  85. LnBackend::LNbits => {
  86. self.lnbits = Some(self.lnbits.clone().unwrap_or_default().from_env());
  87. }
  88. #[cfg(feature = "fakewallet")]
  89. LnBackend::FakeWallet => {
  90. self.fake_wallet = Some(self.fake_wallet.clone().unwrap_or_default().from_env());
  91. }
  92. #[cfg(feature = "lnd")]
  93. LnBackend::Lnd => {
  94. self.lnd = Some(self.lnd.clone().unwrap_or_default().from_env());
  95. }
  96. #[cfg(feature = "grpc-processor")]
  97. LnBackend::GrpcProcessor => {
  98. self.grpc_processor =
  99. Some(self.grpc_processor.clone().unwrap_or_default().from_env());
  100. }
  101. LnBackend::None => bail!("Ln backend must be set"),
  102. #[allow(unreachable_patterns)]
  103. _ => bail!("Selected Ln backend is not enabled in this build"),
  104. }
  105. Ok(self.clone())
  106. }
  107. }