mockforge_grpc/reflection/
config.rs1use crate::reflection::error_handling::ErrorConfig;
4use mockforge_core::{openapi_routes::ValidationMode, overrides::Overrides};
5use serde::{Deserialize, Serialize};
6use std::collections::{HashMap, HashSet};
7
8#[derive(Debug, Clone, Deserialize, Serialize)]
10pub struct ProxyConfig {
11 pub allowlist: HashSet<String>,
13 pub denylist: HashSet<String>,
15 pub require_explicit_allow: bool,
17 pub grpc_port: u16,
19 pub error_config: Option<ErrorConfig>,
21 pub response_transform: ResponseTransformConfig,
23 pub upstream_endpoint: Option<String>,
25 pub mock_seed: Option<u64>,
27 pub request_timeout_seconds: u64,
29 pub admin_skip_prefixes: Vec<String>,
31 pub overrides: HashMap<String, ValidationMode>,
33 pub request_mode: ValidationMode,
35}
36
37impl Default for ProxyConfig {
38 fn default() -> Self {
39 Self {
40 allowlist: HashSet::new(),
41 denylist: HashSet::new(),
42 require_explicit_allow: false,
43 grpc_port: default_grpc_port(),
44 error_config: None,
45 response_transform: ResponseTransformConfig::default(),
46 upstream_endpoint: None,
47 mock_seed: None,
48 request_timeout_seconds: default_request_timeout_seconds(),
49 admin_skip_prefixes: Vec::new(),
50 overrides: HashMap::new(),
51 request_mode: ValidationMode::default(),
52 }
53 }
54}
55
56fn default_grpc_port() -> u16 {
58 50051
59}
60
61fn default_request_timeout_seconds() -> u64 {
63 30
64}
65
66#[derive(Debug, Clone, Deserialize, Serialize, Default)]
68pub struct ResponseTransformConfig {
69 pub enabled: bool,
71 pub custom_headers: std::collections::HashMap<String, String>,
73 pub overrides: Option<Overrides>,
75 pub validate_responses: bool,
77}
78
79impl ProxyConfig {
80 pub fn is_service_allowed(&self, service_name: &str) -> bool {
82 if self.denylist.contains(service_name) {
84 return false;
85 }
86
87 if self.require_explicit_allow
89 && !self.allowlist.is_empty()
90 && !self.allowlist.contains(service_name)
91 {
92 return false;
93 }
94
95 true
96 }
97
98 pub fn is_service_denied(&self, service_name: &str) -> bool {
100 self.denylist.contains(service_name)
101 }
102}
103
104#[cfg(test)]
105mod tests {
106
107 #[test]
108 fn test_module_compiles() {}
109}