Skip to main content

cloakpipe_proxy/
state.rs

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