docbox_management/
config.rs1use aws_config::SdkConfig;
2use docbox_core::{
3 search::SearchIndexFactoryConfig,
4 secrets::{
5 SecretManager, SecretManagerError, SecretsManagerConfig,
6 aws::{AwsSecretManagerConfig, AwsSecretsManagerConfigError},
7 },
8 storage::StorageLayerFactoryConfig,
9};
10use serde::{Deserialize, Serialize};
11use thiserror::Error;
12
13#[derive(Clone, Deserialize, Serialize)]
15pub struct AdminDatabaseConfiguration {
16 pub host: String,
18 pub port: u16,
20 pub setup_user: Option<AdminDatabaseSetupUserConfig>,
22 pub setup_user_secret_name: Option<String>,
24
25 pub root_secret_name: Option<String>,
28
29 #[serde(default)]
32 pub root_iam: bool,
33}
34
35#[derive(Clone, Deserialize, Serialize)]
37pub struct AdminDatabaseSetupUserConfig {
38 #[serde(alias = "user")]
40 pub username: String,
41 pub password: String,
43}
44
45#[derive(Clone, Deserialize, Serialize)]
47pub struct ApiConfig {
48 pub url: String,
50 pub api_key: Option<String>,
52}
53
54#[derive(Clone, Deserialize, Serialize)]
56pub struct ServerConfigData {
57 pub api: ApiConfig,
59 pub database: AdminDatabaseConfiguration,
61 #[serde(default)]
63 pub secrets: SecretsManagerConfig,
64 #[serde(default)]
66 pub search: SearchIndexFactoryConfig,
67 #[serde(default)]
69 pub storage: StorageLayerFactoryConfig,
70}
71
72#[derive(Debug, Error)]
73pub enum ServerConfigDataSecretError {
74 #[error("failed to load secret manager from env: {0}")]
75 SecretManager(AwsSecretsManagerConfigError),
76
77 #[error("failed to load secret: {0}")]
78 Secret(SecretManagerError),
79
80 #[error("secret not found")]
81 SecretNotFound,
82}
83
84pub async fn load_server_config_data_secret(
86 aws_config: &SdkConfig,
87 secret_name: &str,
88) -> Result<ServerConfigData, ServerConfigDataSecretError> {
89 let secrets = SecretManager::from_config(
90 aws_config,
91 SecretsManagerConfig::Aws(
92 AwsSecretManagerConfig::from_env()
93 .map_err(ServerConfigDataSecretError::SecretManager)?,
94 ),
95 );
96
97 secrets
98 .parsed_secret(secret_name)
99 .await
100 .map_err(ServerConfigDataSecretError::Secret)?
101 .ok_or(ServerConfigDataSecretError::SecretNotFound)
102}