Files
bssapp/svc/middlewares/auditlog_middleware.go
2026-02-11 17:46:22 +03:00

72 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package middlewares
import (
"bssapp-backend/auth"
"net/http"
"time"
"bssapp-backend/internal/auditlog"
)
type ResponseWriter struct {
http.ResponseWriter
status int
}
func NewResponseWriter(w http.ResponseWriter) *ResponseWriter {
return &ResponseWriter{
ResponseWriter: w,
status: http.StatusOK,
}
}
func (rw *ResponseWriter) WriteHeader(code int) {
rw.status = code
rw.ResponseWriter.WriteHeader(code)
}
func (rw *ResponseWriter) Status() int { return rw.status }
func Audit(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
rw := NewResponseWriter(w)
next.ServeHTTP(rw, r)
// ✅ AuthMiddleware sonrası burada claims VAR
var dfusrID int64
var username, roleCode string
if claims, ok := auth.GetClaimsFromContext(r.Context()); ok && claims != nil {
dfusrID = int64(claims.ID)
username = claims.Username
roleCode = claims.RoleCode // tokenda varsa
}
entry := auditlog.ActivityLog{
DfUsrID: dfusrID,
Username: username,
RoleCode: roleCode,
ActionType: "route_access",
ActionCategory: "nav",
ActionTarget: r.URL.Path,
Description: r.Method + " " + r.URL.Path,
IpAddress: r.RemoteAddr,
UserAgent: r.UserAgent(),
SessionID: "",
RequestStartedAt: start,
RequestFinishedAt: time.Now(),
DurationMs: int(time.Since(start).Milliseconds()),
HttpStatus: rw.Status(),
IsSuccess: rw.Status() < 400,
}
auditlog.Write(entry)
})
}