feat: logging function for resource activities (#2369)
This commit is contained in:
parent
935259387a
commit
3ba68c2acf
26
audit/log.go
Normal file
26
audit/log.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package audit
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
// LogResourceActivity prints an entry to the audit log with information about the given event, file and user.
|
||||||
|
//
|
||||||
|
// The event should be describing the activity that was performed, e.g. Deletion.
|
||||||
|
// This results in a log entry like "Deletion of file with path /srv/test.txt by user test (42)".
|
||||||
|
func LogResourceActivity(info ResourceActivity) {
|
||||||
|
message := createLogMessage(info)
|
||||||
|
logToAuditLogger(message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createLogMessage(info ResourceActivity) string {
|
||||||
|
return fmt.Sprintf(
|
||||||
|
"%v of resource with path %v by user %v (%v)",
|
||||||
|
info.Event,
|
||||||
|
info.ResourcePath,
|
||||||
|
info.User.Username,
|
||||||
|
info.User.ID,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func logToAuditLogger(message string) {
|
||||||
|
auditLogger.Println(message)
|
||||||
|
}
|
||||||
59
audit/log_test.go
Normal file
59
audit/log_test.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"github.com/filebrowser/filebrowser/v2/users"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestLogFileActivity(t *testing.T) {
|
||||||
|
resultBuffer := setupTestLogger()
|
||||||
|
|
||||||
|
info := ResourceActivity{
|
||||||
|
Event: "Deletion",
|
||||||
|
ResourcePath: "/srv/test.txt",
|
||||||
|
User: &users.User{
|
||||||
|
Username: "test",
|
||||||
|
ID: 42,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
LogResourceActivity(info)
|
||||||
|
|
||||||
|
result := resultBuffer.String()
|
||||||
|
expectedResult := "Deletion of resource with path /srv/test.txt by user test (42)\n"
|
||||||
|
if result != expectedResult {
|
||||||
|
t.Errorf("Log entry should be \"%v\" but is \"%v\"", expectedResult, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLogFileActivityDirectory(t *testing.T) {
|
||||||
|
resultBuffer := setupTestLogger()
|
||||||
|
|
||||||
|
info := ResourceActivity{
|
||||||
|
Event: "Creation",
|
||||||
|
ResourcePath: "/srv/test.txt",
|
||||||
|
User: &users.User{
|
||||||
|
Username: "test",
|
||||||
|
ID: 42,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
LogResourceActivity(info)
|
||||||
|
|
||||||
|
result := resultBuffer.String()
|
||||||
|
expectedResult := "Creation of resource with path /srv/test.txt by user test (42)\n"
|
||||||
|
if result != expectedResult {
|
||||||
|
t.Errorf("Log entry should be \"%v\" but is \"%v\"", expectedResult, result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupTestLogger() *bytes.Buffer {
|
||||||
|
var testBuffer bytes.Buffer
|
||||||
|
testLogger := log.New(&testBuffer, "", 0)
|
||||||
|
|
||||||
|
auditLogger = testLogger
|
||||||
|
|
||||||
|
return &testBuffer
|
||||||
|
}
|
||||||
11
audit/types.go
Normal file
11
audit/types.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package audit
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/filebrowser/filebrowser/v2/users"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ResourceActivity struct {
|
||||||
|
Event string
|
||||||
|
ResourcePath string
|
||||||
|
User *users.User
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user