v_authorization_impl/
lib.rs

1#[macro_use]
2extern crate log;
3
4mod az_lmdb;
5mod az_mdbx;
6mod stat_manager;
7mod common;
8
9use az_lmdb::LmdbAzContext;
10use az_mdbx::MdbxAzContext;
11
12pub use v_authorization;
13
14// Re-export functions for test usage
15pub use az_lmdb::{reset_global_envs as reset_lmdb_global_envs, sync_env as sync_lmdb_env};
16pub use az_mdbx::{reset_global_envs as reset_mdbx_global_envs, sync_env as sync_mdbx_env};
17
18use v_authorization::common::AuthorizationContext;
19
20// Database backend type selection
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum AzDbType {
23    Lmdb,
24    Mdbx,
25}
26
27// Unified authorization context that wraps either implementation
28pub enum AzContext {
29    Lmdb(LmdbAzContext),
30    Mdbx(MdbxAzContext),
31}
32
33impl AzContext {
34    pub fn new(db_type: AzDbType, max_read_counter: u64) -> Self {
35        match db_type {
36            AzDbType::Lmdb => AzContext::Lmdb(LmdbAzContext::new(max_read_counter)),
37            AzDbType::Mdbx => AzContext::Mdbx(MdbxAzContext::new(max_read_counter)),
38        }
39    }
40
41    pub fn new_with_config(
42        db_type: AzDbType,
43        max_read_counter: u64,
44        stat_collector_url: Option<String>,
45        stat_mode_str: Option<String>,
46        use_cache: Option<bool>,
47    ) -> Self {
48        match db_type {
49            AzDbType::Lmdb => AzContext::Lmdb(LmdbAzContext::new_with_config(
50                max_read_counter,
51                stat_collector_url,
52                stat_mode_str,
53                use_cache,
54            )),
55            AzDbType::Mdbx => AzContext::Mdbx(MdbxAzContext::new_with_config(
56                max_read_counter,
57                stat_collector_url,
58                stat_mode_str,
59                use_cache,
60            )),
61        }
62    }
63}
64
65impl AuthorizationContext for AzContext {
66    fn authorize(
67        &mut self,
68        uri: &str,
69        user_uri: &str,
70        request_access: u8,
71        is_check_for_reload: bool,
72    ) -> Result<u8, std::io::Error> {
73        match self {
74            AzContext::Lmdb(ctx) => ctx.authorize(uri, user_uri, request_access, is_check_for_reload),
75            AzContext::Mdbx(ctx) => ctx.authorize(uri, user_uri, request_access, is_check_for_reload),
76        }
77    }
78
79    fn authorize_and_trace(
80        &mut self,
81        uri: &str,
82        user_uri: &str,
83        request_access: u8,
84        is_check_for_reload: bool,
85        trace: &mut v_authorization::common::Trace,
86    ) -> Result<u8, std::io::Error> {
87        match self {
88            AzContext::Lmdb(ctx) => ctx.authorize_and_trace(uri, user_uri, request_access, is_check_for_reload, trace),
89            AzContext::Mdbx(ctx) => ctx.authorize_and_trace(uri, user_uri, request_access, is_check_for_reload, trace),
90        }
91    }
92}
93