1mod audit;
24mod options;
25mod routes;
26mod schema;
27
28pub mod errors;
29pub mod filters;
30pub mod metadata;
31pub mod resources;
32pub mod validation;
33
34#[cfg(not(feature = "test-util"))]
35pub(crate) mod mappings;
36#[cfg(feature = "test-util")]
37pub mod mappings;
38
39#[cfg(not(feature = "test-util"))]
40pub(crate) mod patch;
41#[cfg(feature = "test-util")]
42pub mod patch;
43
44#[cfg(not(feature = "test-util"))]
45pub(crate) mod store;
46#[cfg(feature = "test-util")]
47pub mod store;
48
49#[cfg(not(feature = "test-util"))]
50pub(crate) mod token;
51#[cfg(feature = "test-util")]
52pub mod token;
53
54pub use audit::ScimAuditEventResolver;
55pub use options::{
56 AfterScimTokenGeneratedHook, AfterScimTokenGeneratedInput, BeforeScimTokenGeneratedHook,
57 BeforeScimTokenGeneratedInput, DefaultScimProvider, ProviderOwnershipOptions, ScimAuditEvent,
58 ScimAuditEventKind, ScimAuditSeverity, ScimBulkMode, ScimDeprovisionMode, ScimHookError,
59 ScimHookFuture, ScimOptions, ScimOrganizationMember, ScimTokenStorage, ScimTokenStorageFuture,
60 ScimTokenTransform,
61};
62
63use rustauth_core::plugin::AuthPlugin;
64
65pub const UPSTREAM_PLUGIN_ID: &str = "scim";
67
68pub const VERSION: &str = env!("CARGO_PKG_VERSION");
70
71#[must_use]
73pub fn scim(options: ScimOptions) -> AuthPlugin {
74 let mut plugin = AuthPlugin::new(UPSTREAM_PLUGIN_ID).with_version(VERSION);
75
76 for contribution in schema::contributions() {
77 plugin = plugin.with_schema(contribution);
78 }
79 for endpoint in routes::endpoints(options) {
80 plugin = plugin.with_endpoint(endpoint);
81 }
82
83 plugin
84}