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};
16
17use v_authorization::common::AuthorizationContext;
18
19#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21pub enum AzDbType {
22 Lmdb,
23 Mdbx,
24}
25
26pub 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