43 lines
954 B
Go
43 lines
954 B
Go
package middleware
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/gofiber/fiber/v2"
|
|
"go-humas-be/app/database/entity"
|
|
utilSvc "go-humas-be/utils/service"
|
|
"gorm.io/gorm"
|
|
"time"
|
|
)
|
|
|
|
func AuditTrailsMiddleware(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
start := time.Now()
|
|
requestBody := c.Body()
|
|
|
|
headersMap := c.GetReqHeaders()
|
|
headersJSON, _ := json.Marshal(headersMap)
|
|
|
|
authHeader := c.Get("Authorization")
|
|
userId := utilSvc.GetUserId(authHeader)
|
|
|
|
err := c.Next()
|
|
|
|
audit := entity.AuditTrails{
|
|
Method: c.Method(),
|
|
Path: c.OriginalURL(),
|
|
IP: c.IP(),
|
|
Status: c.Response().StatusCode(),
|
|
UserID: userId,
|
|
RequestHeaders: string(headersJSON),
|
|
RequestBody: string(requestBody),
|
|
ResponseBody: string(c.Response().Body()),
|
|
DurationMs: time.Since(start).Milliseconds(),
|
|
CreatedAt: time.Now(),
|
|
}
|
|
|
|
go db.Create(&audit)
|
|
|
|
return err
|
|
}
|
|
}
|