forked from baron/baron-sso
45 lines
1.5 KiB
Go
45 lines
1.5 KiB
Go
package domain
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// AuditLog represents a single audit event
|
|
type AuditLog struct {
|
|
EventID string `json:"event_id"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
UserID string `json:"user_id"`
|
|
SessionID string `json:"session_id,omitempty"`
|
|
EventType string `json:"event_type"` // e.g., "login_success", "login_failed", "otp_sent"
|
|
Status string `json:"status"` // e.g., "success", "failure"
|
|
AuthMethod string `json:"auth_method,omitempty"`
|
|
IPAddress string `json:"ip_address"`
|
|
UserAgent string `json:"user_agent"`
|
|
DeviceID string `json:"device_id,omitempty"`
|
|
Details string `json:"details,omitempty"` // JSON string or simple text
|
|
}
|
|
|
|
// AuditRepository defines interface for storing logs
|
|
type AuditRepository interface {
|
|
Create(log *AuditLog) error
|
|
FindPage(ctx context.Context, limit int, cursor *AuditCursor) ([]AuditLog, error)
|
|
FindByUserAndEvents(ctx context.Context, userID string, eventTypes []string, limit int) ([]AuditLog, error)
|
|
Ping(ctx context.Context) error
|
|
}
|
|
|
|
type AuditCursor struct {
|
|
Timestamp time.Time
|
|
EventID string
|
|
}
|
|
|
|
// RedisRepository defines interface for KV storage (Redis)
|
|
type RedisRepository interface {
|
|
Set(key string, value string, expiration time.Duration) error
|
|
Get(key string) (string, error)
|
|
Delete(key string) error
|
|
StoreVerificationCode(phone, code string) error
|
|
GetVerificationCode(phone string) (string, error)
|
|
DeleteVerificationCode(phone string) error
|
|
}
|