mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-03 20:12:58 +00:00
106 lines
3.5 KiB
Go
106 lines
3.5 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AuditAction represents the type of action performed
|
|
type AuditAction string
|
|
|
|
const (
|
|
AuditActionCreate AuditAction = "create"
|
|
AuditActionRead AuditAction = "read"
|
|
AuditActionUpdate AuditAction = "update"
|
|
AuditActionDelete AuditAction = "delete"
|
|
AuditActionLogin AuditAction = "login"
|
|
AuditActionLogout AuditAction = "logout"
|
|
AuditActionLoginFail AuditAction = "login_failed"
|
|
AuditActionExport AuditAction = "export"
|
|
AuditActionImport AuditAction = "import"
|
|
AuditActionEnable AuditAction = "enable"
|
|
AuditActionDisable AuditAction = "disable"
|
|
AuditActionUpload AuditAction = "upload"
|
|
AuditActionDownload AuditAction = "download"
|
|
AuditActionShare AuditAction = "share"
|
|
AuditActionAccess AuditAction = "access"
|
|
)
|
|
|
|
// AuditResource represents the resource type
|
|
type AuditResource string
|
|
|
|
const (
|
|
AuditResourceUser AuditResource = "user"
|
|
AuditResourceNote AuditResource = "note"
|
|
AuditResourceFile AuditResource = "file"
|
|
AuditResourceBookmark AuditResource = "bookmark"
|
|
AuditResourceTask AuditResource = "task"
|
|
AuditResourceTimeEntry AuditResource = "time_entry"
|
|
AuditResourceIntegration AuditResource = "integration"
|
|
AuditResourceTeam AuditResource = "team"
|
|
AuditResourceGoal AuditResource = "goal"
|
|
AuditResourceHabit AuditResource = "habit"
|
|
AuditResourceCalendar AuditResource = "calendar"
|
|
AuditResourceSearch AuditResource = "search"
|
|
AuditResourceAI AuditResource = "ai"
|
|
AuditResourceAnalytics AuditResource = "analytics"
|
|
AuditResourceSecurity AuditResource = "security"
|
|
AuditResourceSystem AuditResource = "system"
|
|
)
|
|
|
|
// AuditLog represents an audit log entry
|
|
type AuditLog struct {
|
|
ID uint `json:"id" gorm:"primaryKey"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
|
|
|
|
// User information
|
|
UserID uint `json:"user_id" gorm:"not null;index"`
|
|
User User `json:"user,omitempty" gorm:"foreignKey:UserID;-:migration"`
|
|
UserEmail string `json:"user_email" gorm:"not null"`
|
|
UserIP string `json:"user_ip"`
|
|
UserAgent string `json:"user_agent"`
|
|
|
|
// Action information
|
|
Action AuditAction `json:"action" gorm:"not null;index"`
|
|
Resource AuditResource `json:"resource" gorm:"not null;index"`
|
|
ResourceID *uint `json:"resource_id,omitempty" gorm:"index"`
|
|
|
|
// Details
|
|
Description string `json:"description"`
|
|
Details map[string]interface{} `json:"details" gorm:"serializer:json"`
|
|
OldValues map[string]interface{} `json:"old_values" gorm:"serializer:json"`
|
|
NewValues map[string]interface{} `json:"new_values" gorm:"serializer:json"`
|
|
|
|
// Security context
|
|
SessionID string `json:"session_id"`
|
|
Success bool `json:"success" gorm:"default:true"`
|
|
FailureReason string `json:"failure_reason"`
|
|
|
|
// Geographic and device info
|
|
Country string `json:"country"`
|
|
City string `json:"city"`
|
|
Device string `json:"device"`
|
|
Platform string `json:"platform"`
|
|
Browser string `json:"browser"`
|
|
|
|
// Risk assessment
|
|
RiskLevel string `json:"risk_level" gorm:"default:low"` // low, medium, high, critical
|
|
Suspicious bool `json:"suspicious" gorm:"default:false"`
|
|
}
|
|
|
|
// TableName returns the table name for AuditLog
|
|
func (AuditLog) TableName() string {
|
|
return "audit_logs"
|
|
}
|
|
|
|
// BeforeCreate hook to set default values
|
|
func (a *AuditLog) BeforeCreate(tx *gorm.DB) error {
|
|
if a.RiskLevel == "" {
|
|
a.RiskLevel = "low"
|
|
}
|
|
return nil
|
|
}
|