forked from mirrors/pronouns.cc
72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package admin
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"codeberg.org/pronounscc/pronouns.cc/backend/common"
|
|
"codeberg.org/pronounscc/pronouns.cc/backend/db"
|
|
"codeberg.org/pronounscc/pronouns.cc/backend/log"
|
|
"codeberg.org/pronounscc/pronouns.cc/backend/server"
|
|
"emperror.dev/errors"
|
|
"github.com/go-chi/render"
|
|
)
|
|
|
|
type AuditLogEntryResponse struct {
|
|
ID common.AuditLogID `json:"id"`
|
|
TargetUserID common.UserID `json:"target_user_id"`
|
|
TargetMemberID *common.MemberID `json:"target_member_id"`
|
|
ModeratorID common.UserID `json:"moderator_id"`
|
|
ReportID *int64 `json:"report_id"`
|
|
|
|
Reason string `json:"reason"`
|
|
ActionTaken string `json:"action_taken"`
|
|
ClearedData *db.AuditLogClearedData `json:"cleared_data"`
|
|
|
|
TargetUsername *string `json:"target_name"`
|
|
TargetMemberName *string `json:"target_member_name"`
|
|
ModeratorUsername *string `json:"moderator_name"`
|
|
}
|
|
|
|
func dbAuditLogToResponse(e db.AuditLogEntry) AuditLogEntryResponse {
|
|
return AuditLogEntryResponse{
|
|
ID: e.ID,
|
|
TargetUserID: e.TargetUserID,
|
|
TargetMemberID: e.TargetMemberID,
|
|
ModeratorID: e.ModeratorID,
|
|
ReportID: e.ReportID,
|
|
Reason: e.Reason,
|
|
ActionTaken: e.ActionTaken,
|
|
ClearedData: e.ClearedData,
|
|
TargetUsername: e.TargetUsername,
|
|
TargetMemberName: e.TargetMemberName,
|
|
ModeratorUsername: e.ModeratorUsername,
|
|
}
|
|
}
|
|
|
|
func dbAuditLogsToResponse(es []db.AuditLogEntry) []AuditLogEntryResponse {
|
|
resps := make([]AuditLogEntryResponse, len(es))
|
|
for i := range es {
|
|
resps[i] = dbAuditLogToResponse(es[i])
|
|
}
|
|
return resps
|
|
}
|
|
|
|
func (s *Server) AuditLog(w http.ResponseWriter, r *http.Request) (err error) {
|
|
beforeID := common.AuditLogID(0)
|
|
if s := r.FormValue("before"); s != "" {
|
|
sf, err := common.ParseSnowflake(s)
|
|
if err != nil {
|
|
return server.NewV2Error(server.ErrBadRequest, "", server.NewModelParseError("query", "Invalid snowflake"))
|
|
}
|
|
beforeID = common.AuditLogID(sf)
|
|
}
|
|
|
|
es, err := s.DB.AuditLog(r.Context(), beforeID)
|
|
if err != nil {
|
|
log.Errorf("getting audit logs before %v: %v", beforeID, err)
|
|
return errors.Wrap(err, "getting audit logs")
|
|
}
|
|
|
|
render.JSON(w, r, dbAuditLogsToResponse(es))
|
|
return nil
|
|
}
|