Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions acton-service/src/audit/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,17 @@ pub enum AuditEventKind {
/// Successful authentication
AuthLoginSuccess,
/// Failed authentication attempt
///
/// Reserved for credential-submission failures from application login
/// handlers (e.g. `/auth/login`). The auth middleware no longer emits
/// this kind for missing or invalid bearer tokens on protected routes —
/// see [`Self::AuthTokenMissing`] and [`Self::AuthTokenInvalid`].
AuthLoginFailed,
/// Protected route reached without a bearer token, or with one that was
/// malformed at extraction time
AuthTokenMissing,
/// Bearer token failed validation (bad signature, expired, malformed claims)
AuthTokenInvalid,
/// User logout
AuthLogout,
/// Token refresh
Expand Down Expand Up @@ -171,6 +181,8 @@ impl std::fmt::Display for AuditEventKind {
match self {
Self::AuthLoginSuccess => write!(f, "auth.login.success"),
Self::AuthLoginFailed => write!(f, "auth.login.failed"),
Self::AuthTokenMissing => write!(f, "auth.token.missing"),
Self::AuthTokenInvalid => write!(f, "auth.token.invalid"),
Self::AuthLogout => write!(f, "auth.logout"),
Self::AuthTokenRefresh => write!(f, "auth.token.refresh"),
Self::AuthTokenRevoked => write!(f, "auth.token.revoked"),
Expand Down
2 changes: 2 additions & 0 deletions acton-service/src/audit/storage/clickhouse_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ impl From<AuditQueryRow> for AuditEvent {
let kind = match row.kind.as_str() {
"auth.login.success" => AuditEventKind::AuthLoginSuccess,
"auth.login.failed" => AuditEventKind::AuthLoginFailed,
"auth.token.missing" => AuditEventKind::AuthTokenMissing,
"auth.token.invalid" => AuditEventKind::AuthTokenInvalid,
"auth.logout" => AuditEventKind::AuthLogout,
"auth.token.refresh" => AuditEventKind::AuthTokenRefresh,
"auth.token.revoked" => AuditEventKind::AuthTokenRevoked,
Expand Down
2 changes: 2 additions & 0 deletions acton-service/src/audit/storage/pg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,8 @@ impl From<AuditEventRow> for AuditEvent {
let kind = match row.kind.as_str() {
"auth.login.success" => AuditEventKind::AuthLoginSuccess,
"auth.login.failed" => AuditEventKind::AuthLoginFailed,
"auth.token.missing" => AuditEventKind::AuthTokenMissing,
"auth.token.invalid" => AuditEventKind::AuthTokenInvalid,
"auth.logout" => AuditEventKind::AuthLogout,
"auth.token.refresh" => AuditEventKind::AuthTokenRefresh,
"auth.token.revoked" => AuditEventKind::AuthTokenRevoked,
Expand Down
2 changes: 2 additions & 0 deletions acton-service/src/audit/storage/surrealdb_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,8 @@ fn parse_event_kind(s: &str) -> AuditEventKind {
match s {
"auth.login.success" => AuditEventKind::AuthLoginSuccess,
"auth.login.failed" => AuditEventKind::AuthLoginFailed,
"auth.token.missing" => AuditEventKind::AuthTokenMissing,
"auth.token.invalid" => AuditEventKind::AuthTokenInvalid,
"auth.logout" => AuditEventKind::AuthLogout,
"auth.token.refresh" => AuditEventKind::AuthTokenRefresh,
"auth.token.revoked" => AuditEventKind::AuthTokenRevoked,
Expand Down
2 changes: 2 additions & 0 deletions acton-service/src/audit/storage/turso.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ fn parse_event_kind(s: &str) -> AuditEventKind {
match s {
"auth.login.success" => AuditEventKind::AuthLoginSuccess,
"auth.login.failed" => AuditEventKind::AuthLoginFailed,
"auth.token.missing" => AuditEventKind::AuthTokenMissing,
"auth.token.invalid" => AuditEventKind::AuthTokenInvalid,
"auth.logout" => AuditEventKind::AuthLogout,
"auth.token.refresh" => AuditEventKind::AuthTokenRefresh,
"auth.token.revoked" => AuditEventKind::AuthTokenRevoked,
Expand Down
6 changes: 3 additions & 3 deletions acton-service/src/middleware/jwt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,8 @@ impl JwtAuth {
if logger.config().audit_auth_events {
logger
.log_auth(
crate::audit::event::AuditEventKind::AuthLoginFailed,
crate::audit::event::AuditSeverity::Warning,
crate::audit::event::AuditEventKind::AuthTokenMissing,
crate::audit::event::AuditSeverity::Informational,
audit_source,
)
.await;
Expand All @@ -222,7 +222,7 @@ impl JwtAuth {
if logger.config().audit_auth_events {
logger
.log_auth(
crate::audit::event::AuditEventKind::AuthLoginFailed,
crate::audit::event::AuditEventKind::AuthTokenInvalid,
crate::audit::event::AuditSeverity::Warning,
audit_source,
)
Expand Down
6 changes: 3 additions & 3 deletions acton-service/src/middleware/paseto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,8 @@ impl PasetoAuth {
if logger.config().audit_auth_events {
logger
.log_auth(
crate::audit::event::AuditEventKind::AuthLoginFailed,
crate::audit::event::AuditSeverity::Warning,
crate::audit::event::AuditEventKind::AuthTokenMissing,
crate::audit::event::AuditSeverity::Informational,
audit_source,
)
.await;
Expand All @@ -235,7 +235,7 @@ impl PasetoAuth {
if logger.config().audit_auth_events {
logger
.log_auth(
crate::audit::event::AuditEventKind::AuthLoginFailed,
crate::audit::event::AuditEventKind::AuthTokenInvalid,
crate::audit::event::AuditSeverity::Warning,
audit_source,
)
Expand Down
Loading