appguard_client_authentication/
cache.rs

1use nullnet_libappguard::appguard_commands::{FirewallDefaults, FirewallPolicy};
2use std::collections::{BTreeMap, HashMap};
3
4pub struct Cache {
5    active: bool,
6    entries: HashMap<CacheKey, FirewallPolicy>,
7}
8
9impl Cache {
10    pub(crate) fn new(defaults: FirewallDefaults) -> Cache {
11        Self {
12            active: defaults.cache,
13            entries: HashMap::new(),
14        }
15    }
16
17    pub fn get(&self, key: &CacheKey) -> Option<&FirewallPolicy> {
18        if self.active {
19            self.entries.get(key)
20        } else {
21            None
22        }
23    }
24
25    pub fn insert(&mut self, key: CacheKey, policy: FirewallPolicy) {
26        if self.active {
27            self.entries.insert(key, policy);
28        }
29    }
30}
31
32/// Data structure used by clients to create a cache entry for each request.
33#[derive(PartialEq, Eq, Hash, Clone)]
34pub struct CacheKey {
35    pub original_url: String,
36    pub method: String,
37    pub query: BTreeMap<String, String>,
38    pub user_agent: String,
39    pub body: String,
40    pub source_ip: String,
41}