Skip to content

Commit 246675e

Browse files
wojcik91Maciej Wójcik
and
Maciej Wójcik
authored
add MFA login event (#1214)
* add mfa login events * remove unnecessary event * remove duplicate event * rename helper method * log failed logins * update frontend event types * add event for using a recovery code * emit mfa login events * emit MFA login failed events * rename field kind -> event --------- Co-authored-by: Maciej Wójcik <[email protected]>
1 parent 3c9bb41 commit 246675e

File tree

15 files changed

+283
-58
lines changed

15 files changed

+283
-58
lines changed

crates/defguard_core/src/appstate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ impl AppState {
9898
/// Sends event to the main event router
9999
///
100100
/// This method is fallible since events are used for communication between services
101-
pub fn send_event(&self, event: ApiEvent) -> Result<(), WebError> {
101+
pub fn emit_event(&self, event: ApiEvent) -> Result<(), WebError> {
102102
Ok(self.event_tx.send(event)?)
103103
}
104104

crates/defguard_core/src/db/models/audit_log/metadata.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
use crate::db::{Device, Id, WireguardNetwork};
1+
use crate::db::{Device, Id, MFAMethod, WireguardNetwork};
2+
3+
#[derive(Serialize)]
4+
pub struct MfaLoginMetadata {
5+
pub mfa_method: MFAMethod,
6+
}
27

38
#[derive(Serialize)]
49
pub struct DeviceAddedMetadata {

crates/defguard_core/src/db/models/audit_log/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ pub enum AuditModule {
2626
pub enum EventType {
2727
// authentication
2828
UserLogin,
29+
UserLoginFailed,
30+
UserMfaLogin,
31+
UserMfaLoginFailed,
32+
RecoveryCodeUsed,
2933
UserLogout,
3034
// mfa management
3135
MfaDisabled,

crates/defguard_core/src/enterprise/handlers/audit_stream.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ pub async fn create_audit_stream(
5858
};
5959
let stream = stream_model.save(&appstate.pool).await?;
6060
info!("User {session_username} created audit stream");
61-
appstate.send_event(ApiEvent {
61+
appstate.emit_event(ApiEvent {
6262
context,
63-
kind: ApiEventType::AuditStreamCreated {
63+
event: ApiEventType::AuditStreamCreated {
6464
stream_id: stream.id,
6565
stream_name: stream.name,
6666
},
@@ -90,9 +90,9 @@ pub async fn modify_audit_stream(
9090
stream.config = data.stream_config;
9191
stream.save(&appstate.pool).await?;
9292
info!("User {session_username} modified audit stream");
93-
appstate.send_event(ApiEvent {
93+
appstate.emit_event(ApiEvent {
9494
context,
95-
kind: ApiEventType::AuditStreamModified {
95+
event: ApiEventType::AuditStreamModified {
9696
stream_id: stream.id,
9797
stream_name: stream.name,
9898
},
@@ -119,9 +119,9 @@ pub async fn delete_audit_stream(
119119
let stream_id = stream.id;
120120
let stream_name = stream.name.clone();
121121
stream.delete(&appstate.pool).await?;
122-
appstate.send_event(ApiEvent {
122+
appstate.emit_event(ApiEvent {
123123
context,
124-
kind: ApiEventType::AuditStreamRemoved {
124+
event: ApiEventType::AuditStreamRemoved {
125125
stream_id,
126126
stream_name,
127127
},

crates/defguard_core/src/events.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::net::IpAddr;
22

3-
use crate::db::{Device, Id, WireguardNetwork};
3+
use crate::db::{Device, Id, MFAMethod, WireguardNetwork};
44
use chrono::{NaiveDateTime, Utc};
55
use ipnetwork::IpNetwork;
66

@@ -67,6 +67,14 @@ impl GrpcRequestContext {
6767
#[derive(Debug)]
6868
pub enum ApiEventType {
6969
UserLogin,
70+
UserLoginFailed,
71+
UserMfaLogin {
72+
mfa_method: MFAMethod,
73+
},
74+
UserMfaLoginFailed {
75+
mfa_method: MFAMethod,
76+
},
77+
RecoveryCodeUsed,
7078
UserLogout,
7179
MfaDisabled,
7280
MfaTotpDisabled,
@@ -141,7 +149,7 @@ pub enum ApiEventType {
141149
#[derive(Debug)]
142150
pub struct ApiEvent {
143151
pub context: ApiRequestContext,
144-
pub kind: ApiEventType,
152+
pub event: ApiEventType,
145153
}
146154

147155
/// Events from gRPC server

0 commit comments

Comments
 (0)