mod.rs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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 database;
  7. mod info;
  8. mod ln;
  9. mod mint_info;
  10. #[cfg(feature = "auth")]
  11. mod auth;
  12. #[cfg(feature = "cln")]
  13. mod cln;
  14. #[cfg(feature = "fakewallet")]
  15. mod fake_wallet;
  16. #[cfg(feature = "grpc-processor")]
  17. mod grpc_processor;
  18. #[cfg(feature = "ldk-node")]
  19. mod ldk_node;
  20. #[cfg(feature = "lnbits")]
  21. mod lnbits;
  22. #[cfg(feature = "lnd")]
  23. mod lnd;
  24. #[cfg(feature = "management-rpc")]
  25. mod management_rpc;
  26. #[cfg(feature = "prometheus")]
  27. mod prometheus;
  28. use std::env;
  29. use std::str::FromStr;
  30. use anyhow::{anyhow, bail, Result};
  31. #[cfg(feature = "auth")]
  32. pub use auth::*;
  33. #[cfg(feature = "cln")]
  34. pub use cln::*;
  35. pub use common::*;
  36. pub use database::*;
  37. #[cfg(feature = "fakewallet")]
  38. pub use fake_wallet::*;
  39. #[cfg(feature = "grpc-processor")]
  40. pub use grpc_processor::*;
  41. #[cfg(feature = "ldk-node")]
  42. pub use ldk_node::*;
  43. pub use ln::*;
  44. #[cfg(feature = "lnbits")]
  45. pub use lnbits::*;
  46. #[cfg(feature = "lnd")]
  47. pub use lnd::*;
  48. #[cfg(feature = "management-rpc")]
  49. pub use management_rpc::*;
  50. pub use mint_info::*;
  51. #[cfg(feature = "prometheus")]
  52. pub use prometheus::*;
  53. use crate::config::{DatabaseEngine, LnBackend, Settings};
  54. impl Settings {
  55. pub fn from_env(&mut self) -> Result<Self> {
  56. if let Ok(database) = env::var(DATABASE_ENV_VAR) {
  57. let engine = DatabaseEngine::from_str(&database).map_err(|err| anyhow!(err))?;
  58. self.database.engine = engine;
  59. }
  60. // Parse PostgreSQL-specific configuration from environment variables
  61. if self.database.engine == DatabaseEngine::Postgres {
  62. self.database.postgres = Some(
  63. self.database
  64. .postgres
  65. .clone()
  66. .unwrap_or_default()
  67. .from_env(),
  68. );
  69. }
  70. // Parse auth database configuration from environment variables (when auth is enabled)
  71. #[cfg(feature = "auth")]
  72. {
  73. self.auth_database = Some(crate::config::AuthDatabase {
  74. postgres: Some(
  75. self.auth_database
  76. .clone()
  77. .unwrap_or_default()
  78. .postgres
  79. .unwrap_or_default()
  80. .from_env(),
  81. ),
  82. });
  83. }
  84. self.info = self.info.clone().from_env();
  85. self.mint_info = self.mint_info.clone().from_env();
  86. self.ln = self.ln.clone().from_env();
  87. #[cfg(feature = "auth")]
  88. {
  89. // Check env vars for auth config even if None
  90. let auth = self.auth.clone().unwrap_or_default().from_env();
  91. // Only set auth if auth_enabled flag is true
  92. if auth.auth_enabled {
  93. self.auth = Some(auth);
  94. } else {
  95. self.auth = None;
  96. }
  97. }
  98. #[cfg(feature = "management-rpc")]
  99. {
  100. self.mint_management_rpc = Some(
  101. self.mint_management_rpc
  102. .clone()
  103. .unwrap_or_default()
  104. .from_env(),
  105. );
  106. }
  107. #[cfg(feature = "prometheus")]
  108. {
  109. self.prometheus = Some(self.prometheus.clone().unwrap_or_default().from_env());
  110. }
  111. match self.ln.ln_backend {
  112. #[cfg(feature = "cln")]
  113. LnBackend::Cln => {
  114. self.cln = Some(self.cln.clone().unwrap_or_default().from_env());
  115. }
  116. #[cfg(feature = "lnbits")]
  117. LnBackend::LNbits => {
  118. self.lnbits = Some(self.lnbits.clone().unwrap_or_default().from_env());
  119. }
  120. #[cfg(feature = "fakewallet")]
  121. LnBackend::FakeWallet => {
  122. self.fake_wallet = Some(self.fake_wallet.clone().unwrap_or_default().from_env());
  123. }
  124. #[cfg(feature = "lnd")]
  125. LnBackend::Lnd => {
  126. self.lnd = Some(self.lnd.clone().unwrap_or_default().from_env());
  127. }
  128. #[cfg(feature = "ldk-node")]
  129. LnBackend::LdkNode => {
  130. self.ldk_node = Some(self.ldk_node.clone().unwrap_or_default().from_env());
  131. }
  132. #[cfg(feature = "grpc-processor")]
  133. LnBackend::GrpcProcessor => {
  134. self.grpc_processor =
  135. Some(self.grpc_processor.clone().unwrap_or_default().from_env());
  136. }
  137. LnBackend::None => bail!("Ln backend must be set"),
  138. #[allow(unreachable_patterns)]
  139. _ => bail!("Selected Ln backend is not enabled in this build"),
  140. }
  141. Ok(self.clone())
  142. }
  143. }