Skip to content

Commit de903d0

Browse files
authored
Merge pull request #61 from JohanDevl/develop
Release: Complete Monitoring and Observability System v1.1
2 parents c7843d7 + b08d7d6 commit de903d0

File tree

10 files changed

+1972
-20
lines changed

10 files changed

+1972
-20
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ config/config.toml
220220

221221
# Go specific ignores
222222
export_trakt
223+
export-trakt
223224
*.exe
224225
*.exe~
225226
*.dll

export-trakt

-12.3 MB
Binary file not shown.

export_trakt_monitoring

-12.5 MB
Binary file not shown.

monitoring_example

-14.6 MB
Binary file not shown.

pkg/security/audit/logger.go

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -179,46 +179,49 @@ func (l *Logger) LogEvent(event AuditEvent) {
179179
"action": event.Action,
180180
"result": event.Result,
181181
}
182+
183+
// Override the timestamp with our event timestamp
184+
entry := l.logger.WithFields(fields).WithTime(event.Timestamp)
182185

183-
// Add optional fields
186+
// Add optional fields to the entry
184187
if event.UserID != "" {
185-
fields["user_id"] = event.UserID
188+
entry = entry.WithField("user_id", event.UserID)
186189
}
187190
if event.Target != "" {
188-
fields["target"] = event.Target
191+
entry = entry.WithField("target", event.Target)
189192
}
190193
if event.RemoteAddr != "" {
191-
fields["remote_addr"] = event.RemoteAddr
194+
entry = entry.WithField("remote_addr", event.RemoteAddr)
192195
}
193196
if event.UserAgent != "" {
194-
fields["user_agent"] = event.UserAgent
197+
entry = entry.WithField("user_agent", event.UserAgent)
195198
}
196199
if event.SessionID != "" {
197-
fields["session_id"] = event.SessionID
200+
entry = entry.WithField("session_id", event.SessionID)
198201
}
199202
if event.RequestID != "" {
200-
fields["request_id"] = event.RequestID
203+
entry = entry.WithField("request_id", event.RequestID)
201204
}
202205

203206
// Add details if present
204207
if event.Details != nil {
205208
for key, value := range event.Details {
206-
fields["detail_"+key] = value
209+
entry = entry.WithField("detail_"+key, value)
207210
}
208211
}
209212

210213
// Log based on severity
211214
switch event.Severity {
212215
case SeverityCritical:
213-
l.logger.WithFields(fields).Error(event.Message)
216+
entry.Error(event.Message)
214217
case SeverityHigh:
215-
l.logger.WithFields(fields).Warn(event.Message)
218+
entry.Warn(event.Message)
216219
case SeverityMedium:
217-
l.logger.WithFields(fields).Info(event.Message)
220+
entry.Info(event.Message)
218221
case SeverityLow:
219-
l.logger.WithFields(fields).Debug(event.Message)
222+
entry.Debug(event.Message)
220223
default:
221-
l.logger.WithFields(fields).Info(event.Message)
224+
entry.Info(event.Message)
222225
}
223226
}
224227

@@ -256,11 +259,41 @@ func (l *Logger) sanitizeString(s string) string {
256259
}
257260

258261
result := s
262+
lower := strings.ToLower(result)
263+
259264
for _, pattern := range sensitivePatterns {
260-
if strings.Contains(strings.ToLower(result), pattern) {
261-
// Mask the value after the pattern
262-
result = strings.ReplaceAll(result, pattern+"=*", pattern+"=[REDACTED]")
263-
result = strings.ReplaceAll(result, pattern+": *", pattern+": [REDACTED]")
265+
if strings.Contains(lower, pattern) {
266+
// Look for patterns like "password=value", "token: value", etc.
267+
// Replace everything after the = or : with [REDACTED]
268+
if idx := strings.Index(lower, pattern+"="); idx != -1 {
269+
start := idx + len(pattern) + 1
270+
end := len(result)
271+
// Find end of value (space or end of string)
272+
for i := start; i < len(result); i++ {
273+
if result[i] == ' ' || result[i] == '\n' || result[i] == '\t' {
274+
end = i
275+
break
276+
}
277+
}
278+
result = result[:start] + "[REDACTED]" + result[end:]
279+
lower = strings.ToLower(result) // Update lower case version
280+
} else if idx := strings.Index(lower, pattern+":"); idx != -1 {
281+
start := idx + len(pattern) + 1
282+
// Skip any spaces after the colon
283+
for start < len(result) && result[start] == ' ' {
284+
start++
285+
}
286+
end := len(result)
287+
// Find end of value (space or end of string)
288+
for i := start; i < len(result); i++ {
289+
if result[i] == ' ' || result[i] == '\n' || result[i] == '\t' {
290+
end = i
291+
break
292+
}
293+
}
294+
result = result[:start] + "[REDACTED]" + result[end:]
295+
lower = strings.ToLower(result) // Update lower case version
296+
}
264297
}
265298
}
266299

@@ -430,7 +463,9 @@ func (l *Logger) CleanupOldLogs() error {
430463
// Close closes the audit logger and any open files
431464
func (l *Logger) Close() error {
432465
if l.logFile != nil {
433-
return l.logFile.Close()
466+
err := l.logFile.Close()
467+
l.logFile = nil
468+
return err
434469
}
435470
return nil
436471
}

0 commit comments

Comments
 (0)