chatai/auth_v2.169.0/internal/api/audit.go

48 lines
1.1 KiB
Go

package api
import (
"net/http"
"strings"
"github.com/supabase/auth/internal/models"
)
var filterColumnMap = map[string][]string{
"author": {"actor_username", "actor_name"},
"action": {"action"},
"type": {"log_type"},
}
func (a *API) adminAuditLog(w http.ResponseWriter, r *http.Request) error {
ctx := r.Context()
db := a.db.WithContext(ctx)
// aud := a.requestAud(ctx, r)
pageParams, err := paginate(r)
if err != nil {
return badRequestError(ErrorCodeValidationFailed, "Bad Pagination Parameters: %v", err)
}
var col []string
var qval string
q := r.URL.Query().Get("query")
if q != "" {
var exists bool
qparts := strings.SplitN(q, ":", 2)
col, exists = filterColumnMap[qparts[0]]
if !exists || len(qparts) < 2 {
return badRequestError(ErrorCodeValidationFailed, "Invalid query scope: %s", q)
}
qval = qparts[1]
}
logs, err := models.FindAuditLogEntries(db, col, qval, pageParams)
if err != nil {
return internalServerError("Error searching for audit logs").WithInternalError(err)
}
addPaginationHeaders(w, r, pageParams)
return sendJSON(w, http.StatusOK, logs)
}