Documentation
¶
Overview ¶
Package audit provides audit logging functionality.
Index ¶
- func Middleware(config *MiddlewareConfig) echo.MiddlewareFunc
- type Action
- type ArchiveConfig
- type AuditAction
- func (a *AuditAction) LogConfigChange(c echo.Context, userID uuid.UUID, username string, configKey string, ...)
- func (a *AuditAction) LogLogin(c echo.Context, userID uuid.UUID, username string, success bool)
- func (a *AuditAction) LogLogout(c echo.Context, userID uuid.UUID, username string)
- func (a *AuditAction) LogMFADisable(c echo.Context, userID uuid.UUID, username string)
- func (a *AuditAction) LogMFASetup(c echo.Context, userID uuid.UUID, username string, success bool)
- func (a *AuditAction) LogPasswordChange(c echo.Context, userID uuid.UUID, username string, success bool)
- func (a *AuditAction) LogUserCreate(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, ...)
- func (a *AuditAction) LogUserDelete(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, ...)
- func (a *AuditAction) LogUserLock(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, ...)
- func (a *AuditAction) LogUserUnlock(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, ...)
- func (a *AuditAction) LogUserUpdate(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, ...)
- type Entry
- func (e *Entry) WithChange(oldValue, newValue interface{}) *Entry
- func (e *Entry) WithDetails(details interface{}) *Entry
- func (e *Entry) WithRequest(ipAddress, userAgent, requestID string) *Entry
- func (e *Entry) WithResource(resourceType, resourceID string) *Entry
- func (e *Entry) WithUser(userID uuid.UUID, username string) *Entry
- type ExportRequest
- type Handler
- type ListRequest
- type Logger
- type LoggerConfig
- type MiddlewareConfig
- type QueryParams
- type QueryResult
- type RetentionConfig
- type RetentionManager
- type RetentionStats
- type SQLiteLogger
- type Status
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Middleware ¶
func Middleware(config *MiddlewareConfig) echo.MiddlewareFunc
Middleware returns an Echo middleware for audit logging.
Types ¶
type Action ¶
type Action string
Action represents the type of action being audited.
const ( // Authentication actions ActionLogin Action = "login" ActionLoginFailed Action = "login_failed" ActionLogout Action = "logout" ActionPasswordChange Action = "password_change" ActionPasswordReset Action = "password_reset" ActionMFASetup Action = "mfa_setup" ActionMFADisable Action = "mfa_disable" ActionMFAVerify Action = "mfa_verify" // User management actions ActionUserCreate Action = "user_create" ActionUserUpdate Action = "user_update" ActionUserDelete Action = "user_delete" ActionUserLock Action = "user_lock" ActionUserUnlock Action = "user_unlock" ActionRoleChange Action = "role_change" // API access actions ActionAPIAccess Action = "api_access" ActionConfigChange Action = "config_change" // System actions ActionSystemStart Action = "system_start" ActionSystemStop Action = "system_stop" ActionConfigReload Action = "config_reload" )
type ArchiveConfig ¶
type ArchiveConfig struct {
// ArchivePath is the path to store archived logs.
ArchivePath string
// ArchiveAfterDays is the number of days after which to archive logs.
ArchiveAfterDays int
// CompressArchives enables compression of archived logs.
CompressArchives bool
}
ArchiveConfig holds configuration for audit log archiving.
func DefaultArchiveConfig ¶
func DefaultArchiveConfig() *ArchiveConfig
DefaultArchiveConfig returns the default archive configuration.
type AuditAction ¶
type AuditAction struct {
// contains filtered or unexported fields
}
AuditAction is a helper to create audit entries for specific actions.
func NewAuditAction ¶
func NewAuditAction(logger Logger) *AuditAction
NewAuditAction creates a new AuditAction helper.
func (*AuditAction) LogConfigChange ¶
func (a *AuditAction) LogConfigChange(c echo.Context, userID uuid.UUID, username string, configKey string, oldValue, newValue interface{})
LogConfigChange logs a configuration change event.
func (*AuditAction) LogMFADisable ¶
LogMFADisable logs an MFA disable event.
func (*AuditAction) LogMFASetup ¶
LogMFASetup logs an MFA setup event.
func (*AuditAction) LogPasswordChange ¶
func (a *AuditAction) LogPasswordChange(c echo.Context, userID uuid.UUID, username string, success bool)
LogPasswordChange logs a password change event.
func (*AuditAction) LogUserCreate ¶
func (a *AuditAction) LogUserCreate(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, targetName string)
LogUserCreate logs a user creation event.
func (*AuditAction) LogUserDelete ¶
func (a *AuditAction) LogUserDelete(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, targetName string)
LogUserDelete logs a user deletion event.
func (*AuditAction) LogUserLock ¶
func (a *AuditAction) LogUserLock(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, targetName string)
LogUserLock logs a user lock event.
func (*AuditAction) LogUserUnlock ¶
func (a *AuditAction) LogUserUnlock(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, targetName string)
LogUserUnlock logs a user unlock event.
func (*AuditAction) LogUserUpdate ¶
func (a *AuditAction) LogUserUpdate(c echo.Context, actorID uuid.UUID, actorName string, targetID uuid.UUID, oldValue, newValue interface{})
LogUserUpdate logs a user update event.
type Entry ¶
type Entry struct {
// ID is the unique identifier for this entry.
ID uuid.UUID `json:"id" db:"id"`
// Timestamp is when the action occurred.
Timestamp time.Time `json:"timestamp" db:"timestamp"`
// UserID is the user who performed the action (nil for anonymous).
UserID *uuid.UUID `json:"user_id,omitempty" db:"user_id"`
// Username is the username (for display purposes).
Username string `json:"username,omitempty" db:"username"`
// Action is the type of action performed.
Action Action `json:"action" db:"action"`
// ResourceType is the type of resource affected.
ResourceType string `json:"resource_type,omitempty" db:"resource_type"`
// ResourceID is the ID of the resource affected.
ResourceID string `json:"resource_id,omitempty" db:"resource_id"`
// IPAddress is the client's IP address.
IPAddress string `json:"ip_address,omitempty" db:"ip_address"`
// UserAgent is the client's user agent string.
UserAgent string `json:"user_agent,omitempty" db:"user_agent"`
// RequestID is the unique request identifier.
RequestID string `json:"request_id,omitempty" db:"request_id"`
// Status is the outcome of the action.
Status Status `json:"status" db:"status"`
// Details contains additional action-specific information.
Details json.RawMessage `json:"details,omitempty" db:"details"`
// OldValue contains the previous value (for updates).
OldValue json.RawMessage `json:"old_value,omitempty" db:"old_value"`
// NewValue contains the new value (for updates).
NewValue json.RawMessage `json:"new_value,omitempty" db:"new_value"`
}
Entry represents a single audit log entry.
func (*Entry) WithChange ¶
WithChange sets the old and new values for update actions.
func (*Entry) WithDetails ¶
WithDetails sets the details field.
func (*Entry) WithRequest ¶
WithRequest sets the request information.
func (*Entry) WithResource ¶
WithResource sets the resource information.
type ExportRequest ¶
type ExportRequest struct {
Format string `query:"format"` // json or csv
UserID string `query:"user_id"`
Action string `query:"action"`
ResourceType string `query:"resource_type"`
ResourceID string `query:"resource_id"`
Status string `query:"status"`
StartTime string `query:"start_time"`
EndTime string `query:"end_time"`
IPAddress string `query:"ip_address"`
}
ExportRequest represents a request to export audit logs.
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler handles audit log API endpoints.
func (*Handler) RegisterRoutes ¶
RegisterRoutes registers the audit routes.
type ListRequest ¶
type ListRequest struct {
UserID string `query:"user_id"`
Action string `query:"action"`
ResourceType string `query:"resource_type"`
ResourceID string `query:"resource_id"`
Status string `query:"status"`
StartTime string `query:"start_time"`
EndTime string `query:"end_time"`
IPAddress string `query:"ip_address"`
Page int `query:"page"`
PageSize int `query:"page_size"`
SortBy string `query:"sort_by"`
SortDir string `query:"sort_dir"`
}
ListRequest represents a request to list audit logs.
type Logger ¶
type Logger interface {
// Log records an audit entry.
Log(ctx context.Context, entry *Entry) error
// Query retrieves audit entries based on parameters.
Query(ctx context.Context, params *QueryParams) (*QueryResult, error)
// GetByID retrieves a single audit entry.
GetByID(ctx context.Context, id uuid.UUID) (*Entry, error)
// Close closes the logger and flushes any pending entries.
Close() error
}
Logger provides audit logging functionality.
type LoggerConfig ¶
type LoggerConfig struct {
// BatchSize is the number of entries to batch before writing.
BatchSize int
// FlushInterval is how often to flush the buffer.
FlushInterval time.Duration
// BufferSize is the size of the entry buffer.
BufferSize int
}
LoggerConfig holds configuration for the logger.
func DefaultLoggerConfig ¶
func DefaultLoggerConfig() *LoggerConfig
DefaultLoggerConfig returns the default logger configuration.
type MiddlewareConfig ¶
type MiddlewareConfig struct {
// Logger is the audit logger to use.
Logger Logger
// SkipPaths are paths to skip auditing.
SkipPaths []string
// LogRequestBody enables logging of request bodies.
LogRequestBody bool
// LogResponseBody enables logging of response bodies.
LogResponseBody bool
// MaxBodySize is the maximum body size to log.
MaxBodySize int
// GetUserID extracts the user ID from the request context.
GetUserID func(c echo.Context) *uuid.UUID
// GetUsername extracts the username from the request context.
GetUsername func(c echo.Context) string
}
MiddlewareConfig holds configuration for the audit middleware.
func DefaultMiddlewareConfig ¶
func DefaultMiddlewareConfig() *MiddlewareConfig
DefaultMiddlewareConfig returns the default middleware configuration.
type QueryParams ¶
type QueryParams struct {
// UserID filters by user.
UserID *uuid.UUID
// Action filters by action type.
Action *Action
// ResourceType filters by resource type.
ResourceType string
// ResourceID filters by resource ID.
ResourceID string
// Status filters by status.
Status *Status
// StartTime filters entries after this time.
StartTime *time.Time
// EndTime filters entries before this time.
EndTime *time.Time
// IPAddress filters by IP address.
IPAddress string
// Page is the page number (1-indexed).
Page int
// PageSize is the number of entries per page.
PageSize int
// SortBy is the field to sort by.
SortBy string
// SortDir is the sort direction (asc/desc).
SortDir string
}
QueryParams represents parameters for querying audit logs.
type QueryResult ¶
type QueryResult struct {
Entries []*Entry `json:"entries"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
TotalPages int `json:"total_pages"`
}
QueryResult represents the result of a query.
type RetentionConfig ¶
type RetentionConfig struct {
// RetentionDays is the number of days to keep audit logs.
RetentionDays int
// CleanupInterval is how often to run the cleanup job.
CleanupInterval time.Duration
// BatchSize is the number of records to delete per batch.
BatchSize int
}
RetentionConfig holds configuration for audit log retention.
func DefaultRetentionConfig ¶
func DefaultRetentionConfig() *RetentionConfig
DefaultRetentionConfig returns the default retention configuration.
type RetentionManager ¶
type RetentionManager struct {
// contains filtered or unexported fields
}
RetentionManager manages audit log retention.
func NewRetentionManager ¶
func NewRetentionManager(db *sql.DB, config *RetentionConfig) *RetentionManager
NewRetentionManager creates a new retention manager.
func NewRetentionManagerWithReadDB ¶
func NewRetentionManagerWithReadDB(writeDB, readDB *sql.DB, config *RetentionConfig) *RetentionManager
NewRetentionManagerWithReadDB creates a new retention manager with separate write and read database handles.
func (*RetentionManager) CleanupNow ¶
func (m *RetentionManager) CleanupNow() error
CleanupNow runs the cleanup immediately.
func (*RetentionManager) GetRetentionStats ¶
func (m *RetentionManager) GetRetentionStats(ctx context.Context) (*RetentionStats, error)
GetRetentionStats returns statistics about audit log retention.
func (*RetentionManager) Start ¶
func (m *RetentionManager) Start()
Start starts the retention manager background job.
type RetentionStats ¶
type RetentionStats struct {
TotalCount int64 `json:"total_count"`
ExpiredCount int64 `json:"expired_count"`
OldestEntry *time.Time `json:"oldest_entry,omitempty"`
NewestEntry *time.Time `json:"newest_entry,omitempty"`
RetentionDays int `json:"retention_days"`
CutoffDate time.Time `json:"cutoff_date"`
}
RetentionStats holds statistics about audit log retention.
type SQLiteLogger ¶
type SQLiteLogger struct {
// contains filtered or unexported fields
}
SQLiteLogger implements Logger using SQLite.
func NewSQLiteLogger ¶
func NewSQLiteLogger(db *sql.DB, config *LoggerConfig) (*SQLiteLogger, error)
NewSQLiteLogger creates a new SQLite-based audit logger.
func NewSQLiteLoggerWithReadDB ¶
func NewSQLiteLoggerWithReadDB(writeDB, readDB *sql.DB, config *LoggerConfig) (*SQLiteLogger, error)
NewSQLiteLoggerWithReadDB creates a new SQLite-based audit logger with separate write and read database handles.
func (*SQLiteLogger) Close ¶
func (l *SQLiteLogger) Close() error
Close closes the logger and flushes any pending entries.
func (*SQLiteLogger) Log ¶
func (l *SQLiteLogger) Log(ctx context.Context, entry *Entry) error
Log records an audit entry.
func (*SQLiteLogger) Query ¶
func (l *SQLiteLogger) Query(ctx context.Context, params *QueryParams) (*QueryResult, error)
Query retrieves audit entries based on parameters.