A community based topic aggregation platform built on atproto
at main 53 lines 2.1 kB view raw
1package adminreport 2 3import ( 4 "Coves/internal/api/xrpc" 5 "Coves/internal/core/adminreports" 6 "errors" 7 "log" 8 "net/http" 9) 10 11// writeError writes a JSON error response with the given status code 12func writeError(w http.ResponseWriter, statusCode int, errorType, message string) { 13 xrpc.WriteError(w, statusCode, errorType, message) 14} 15 16// handleServiceError maps service-layer errors to HTTP responses 17func handleServiceError(w http.ResponseWriter, err error) { 18 switch { 19 case adminreports.IsValidationError(err): 20 switch { 21 case errors.Is(err, adminreports.ErrInvalidReason): 22 writeError(w, http.StatusBadRequest, "InvalidReason", 23 "Invalid report reason. Must be one of: csam, doxing, harassment, spam, illegal, other") 24 case errors.Is(err, adminreports.ErrInvalidStatus): 25 writeError(w, http.StatusBadRequest, "InvalidStatus", 26 "Invalid report status. Must be one of: open, reviewing, resolved, dismissed") 27 case errors.Is(err, adminreports.ErrInvalidTarget): 28 writeError(w, http.StatusBadRequest, "InvalidTarget", 29 "Invalid target URI. Must be a valid AT Protocol URI starting with at://") 30 case errors.Is(err, adminreports.ErrExplanationTooLong): 31 writeError(w, http.StatusBadRequest, "ExplanationTooLong", 32 "Explanation exceeds maximum length of 1000 characters") 33 case errors.Is(err, adminreports.ErrReporterRequired): 34 writeError(w, http.StatusBadRequest, "ReporterRequired", 35 "Reporter DID is required") 36 case errors.Is(err, adminreports.ErrInvalidTargetType): 37 writeError(w, http.StatusBadRequest, "InvalidTargetType", 38 "Invalid target type. Must be one of: post, comment") 39 default: 40 log.Printf("Unhandled validation error in admin report handler: %v", err) 41 writeError(w, http.StatusBadRequest, "InvalidRequest", 42 "The request contains invalid data") 43 } 44 45 case adminreports.IsNotFound(err): 46 writeError(w, http.StatusNotFound, "NotFound", "Report not found") 47 48 default: 49 log.Printf("Unexpected error in admin report handler: %v", err) 50 writeError(w, http.StatusInternalServerError, "InternalServerError", 51 "An internal error occurred") 52 } 53}