Skip to main content

cloakpipe_proxy/
state.rs

1//! Shared application state for the proxy server.
2
3use cloakpipe_audit::AuditLogger;
4use cloakpipe_core::{config::CloakPipeConfig, detector::Detector, vault::Vault};
5use std::sync::Arc;
6use tokio::sync::Mutex;
7
8/// Shared state accessible from all request handlers.
9pub struct AppState {
10    pub config: CloakPipeConfig,
11    pub detector: Detector,
12    pub vault: Arc<Mutex<Vault>>,
13    pub audit: AuditLogger,
14    pub http_client: reqwest::Client,
15    pub api_key: String,
16}
17
18impl AppState {
19    pub fn new(
20        config: CloakPipeConfig,
21        detector: Detector,
22        vault: Vault,
23        audit: AuditLogger,
24        api_key: String,
25    ) -> Self {
26        let http_client = reqwest::Client::builder()
27            .timeout(std::time::Duration::from_secs(config.proxy.timeout_seconds))
28            .build()
29            .expect("Failed to build HTTP client");
30
31        Self {
32            config,
33            detector,
34            vault: Arc::new(Mutex::new(vault)),
35            audit,
36            http_client,
37            api_key,
38        }
39    }
40}