kanidmd_lib/
lib.rs

1//! The Kanidmd server library. This implements all of the internal components of the server
2//! which is used to process authentication, store identities and enforce access controls.
3
4#![deny(warnings)]
5#![deny(deprecated)]
6#![recursion_limit = "512"]
7#![warn(unused_extern_crates)]
8// Enable some groups of clippy lints.
9#![deny(clippy::suspicious)]
10#![deny(clippy::perf)]
11// Specific lints to enforce.
12#![deny(clippy::todo)]
13#![deny(clippy::unimplemented)]
14#![deny(clippy::unwrap_used)]
15#![deny(clippy::expect_used)]
16#![deny(clippy::panic)]
17#![deny(clippy::await_holding_lock)]
18#![deny(clippy::needless_pass_by_value)]
19#![deny(clippy::trivially_copy_pass_by_ref)]
20#![deny(clippy::disallowed_types)]
21#![deny(clippy::manual_let_else)]
22#![deny(clippy::indexing_slicing)]
23#![allow(clippy::unreachable)]
24
25#[cfg(all(test, not(any(feature = "dhat-heap", target_os = "illumos"))))]
26#[global_allocator]
27static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
28
29#[cfg(all(test, feature = "dhat-heap"))]
30#[global_allocator]
31static ALLOC: dhat::Alloc = dhat::Alloc;
32
33#[macro_use]
34extern crate rusqlite;
35
36#[macro_use]
37extern crate tracing;
38
39// #[macro_use]
40// extern crate sketching;
41
42// This has to be before 'be' so the import order works
43#[macro_use]
44pub mod macros;
45
46pub mod be;
47pub mod constants;
48pub mod credential;
49pub mod entry;
50pub mod event;
51pub mod filter;
52
53// If this module is ever made public outside of this crate, firstyear will be extremely sad.
54// This is *purely migration data*. Don't even think about using it in test cases for anything
55// else.
56pub(crate) mod migration_data;
57
58pub mod modify;
59pub mod time;
60pub(crate) mod utils;
61pub mod value;
62pub mod valueset;
63#[macro_use]
64mod plugins;
65pub mod idm;
66pub mod repl;
67pub mod schema;
68pub mod server;
69pub mod status;
70pub mod testkit;
71
72/// A prelude of imports that should be imported by all other Kanidm modules to
73/// help make imports cleaner.
74// Clippy is wrong, these are used. Hush little clippy.
75#[allow(unused_imports)]
76pub mod prelude {
77    pub(crate) use crate::be::Limits;
78    pub(crate) use crate::constants::uuids::*;
79    pub use crate::constants::*;
80    pub(crate) use crate::entry::{
81        entry_init_fn, Entry, EntryCommitted, EntryIncrementalCommitted, EntryIncrementalNew,
82        EntryInit, EntryInitNew, EntryInvalid, EntryInvalidCommitted, EntryInvalidNew, EntryNew,
83        EntryReduced, EntryReducedCommitted, EntryRefresh, EntryRefreshNew, EntrySealed,
84        EntrySealedCommitted, EntrySealedNew, EntryTuple, EntryValid,
85    };
86    pub use crate::event::{CreateEvent, DeleteEvent, ExistsEvent, ModifyEvent, SearchEvent};
87    pub use crate::filter::{
88        f_and, f_andnot, f_eq, f_gt, f_id, f_inc, f_invalid, f_lt, f_or, f_pres, f_self,
89        f_spn_name, f_sub, Filter, FilterInvalid, FilterValid, FC,
90    };
91    pub use crate::idm::authentication::{ClientAuthInfo, ClientCertInfo};
92    pub use crate::idm::server::{IdmServer, IdmServerAudit, IdmServerDelayed};
93    pub use crate::modify::{
94        m_assert, m_pres, m_purge, m_remove, Modify, ModifyInvalid, ModifyList, ModifyValid,
95    };
96    pub use crate::repl::cid::Cid;
97    pub use crate::schema::{SchemaAttribute, SchemaClass};
98    pub use crate::server::access::AccessControlsTransaction;
99    pub use crate::server::batch_modify::BatchModifyEvent;
100    pub use crate::server::identity::{
101        AccessScope, IdentType, IdentUser, Identity, IdentityId, InternalRole, Source,
102    };
103    pub use crate::server::{
104        QueryServer, QueryServerReadTransaction, QueryServerTransaction,
105        QueryServerWriteTransaction,
106    };
107    pub use crate::time::duration_from_epoch_now;
108    pub use crate::value::{
109        ApiTokenScope, IndexType, PartialValue, SessionScope, SyntaxType, Value,
110    };
111    pub(crate) use crate::valueset::{
112        ValueSet, ValueSetBool, ValueSetCid, ValueSetIname, ValueSetIutf8, ValueSetRefer,
113        ValueSetSha256, ValueSetSyntax, ValueSetT, ValueSetUtf8, ValueSetUuid,
114    };
115    pub use kanidm_proto::attribute::{AttrString, Attribute};
116    pub use kanidm_proto::constants::*;
117    pub use kanidm_proto::internal::{
118        ConsistencyError, Filter as ProtoFilter, OperationError, PluginError, SchemaError,
119    };
120    pub use kanidm_proto::scim_v1::JsonValue;
121    pub(crate) use kanidm_proto::scim_v1::{
122        server::{ScimEntryKanidm, ScimValueKanidm},
123        ScimEntryHeader,
124    };
125    #[cfg(test)]
126    pub use kanidmd_lib_macros::*;
127    pub use sketching::{
128        admin_debug, admin_error, admin_info, admin_warn, filter_error, filter_info, filter_trace,
129        filter_warn, perf_trace, request_error, request_info, request_trace, request_warn,
130        security_access, security_critical, security_debug, security_error, security_info,
131        tagged_event, EventTag,
132    };
133    pub(crate) use std::sync::LazyLock;
134    pub use std::time::Duration;
135    pub use time::format_description::well_known::Rfc3339;
136    pub use url::Url;
137    pub use uuid::{uuid, Uuid};
138}