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