v_authorization_impl/
lib.rs1#[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
14pub 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#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum AzDbType {
23 Lmdb,
24 Mdbx,
25}
26
27pub 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