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