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 pub secrets: SecretsManagerConfig,
63 pub search: SearchIndexFactoryConfig,
65 pub storage: StorageLayerFactoryConfig,
67}
68
69#[derive(Debug, Error)]
70pub enum ServerConfigDataSecretError {
71 #[error("failed to load secret manager from env: {0}")]
72 SecretManager(AwsSecretsManagerConfigError),
73
74 #[error("failed to load secret: {0}")]
75 Secret(SecretManagerError),
76
77 #[error("secret not found")]
78 SecretNotFound,
79}
80
81pub async fn load_server_config_data_secret(
83 aws_config: &SdkConfig,
84 secret_name: &str,
85) -> Result<ServerConfigData, ServerConfigDataSecretError> {
86 let secrets = SecretManager::from_config(
87 aws_config,
88 SecretsManagerConfig::Aws(
89 AwsSecretManagerConfig::from_env()
90 .map_err(ServerConfigDataSecretError::SecretManager)?,
91 ),
92 );
93
94 secrets
95 .parsed_secret(secret_name)
96 .await
97 .map_err(ServerConfigDataSecretError::Secret)?
98 .ok_or(ServerConfigDataSecretError::SecretNotFound)
99}