Skip to content

Commit 23d6c9b

Browse files
committed
Support updating audit trail providers.
1 parent cad1217 commit 23d6c9b

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

crates/backend/src/audit.rs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,45 @@ pub type AuditProvider =
1010

1111
type AuditProviders = Vec<AuditProvider>;
1212

13-
static PROVIDERS: OnceLock<AuditProviders> = OnceLock::new();
13+
static mut PROVIDERS: OnceLock<AuditProviders> = OnceLock::new();
1414

1515
/// Initialize audit trail providers.
1616
pub fn init_providers(providers: AuditProviders) {
17-
PROVIDERS.get_or_init(|| providers);
17+
unsafe {
18+
PROVIDERS.get_or_init(|| providers);
19+
}
20+
}
21+
22+
/// Update audit trail providers.
23+
///
24+
/// # Panics
25+
///
26+
/// If the audit trail providers have not already been set.
27+
pub fn update_providers(providers: AuditProviders) {
28+
unsafe {
29+
let audit_providers = PROVIDERS.get_mut().unwrap();
30+
*audit_providers = providers;
31+
}
1832
}
1933

2034
/// Configured audit providers.
2135
pub fn providers<'a>() -> Option<&'a AuditProviders> {
22-
PROVIDERS.get()
36+
unsafe { PROVIDERS.get() }
2337
}
2438

2539
/// Append audit events to all configured providers.
2640
pub async fn append_audit_events(events: &[AuditEvent]) -> Result<()> {
2741
#[cfg(not(debug_assertions))]
2842
{
29-
let providers = PROVIDERS
30-
.get()
31-
.ok_or_else(|| Error::AuditProvidersNotConfigured)?;
43+
let providers =
44+
providers().ok_or_else(|| Error::AuditProvidersNotConfigured)?;
3245
for provider in providers {
3346
provider.append_audit_events(events).await?;
3447
}
3548
}
3649
#[cfg(debug_assertions)]
3750
{
38-
let providers = PROVIDERS.get();
39-
if let Some(providers) = providers {
51+
if let Some(providers) = providers() {
4052
for provider in providers {
4153
provider.append_audit_events(events).await?;
4254
}

crates/backend/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#![deny(missing_docs)]
2-
#![forbid(unsafe_code)]
32
#![cfg_attr(all(doc, CHANNEL_NIGHTLY), feature(doc_auto_cfg))]
43
//! Backend database and file system storage.
54
mod access_point;

0 commit comments

Comments
 (0)