48 lines
1.1 KiB
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)
|
|
}
|