56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package routes
|
|
|
|
import (
|
|
"gifuu/tools"
|
|
"net/http"
|
|
)
|
|
|
|
func POST_Art_ID_Reports(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
|
|
var Body struct {
|
|
ReasonType int `json:"type"`
|
|
ReasonText string `json:"reason"`
|
|
}
|
|
|
|
paramID := tools.ParseSnowflake(r.PathValue("id"))
|
|
if paramID == 0 {
|
|
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_FIELD)
|
|
return
|
|
}
|
|
|
|
if err := tools.ParseJSON(r.Body, &Body); err != nil {
|
|
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_DATA)
|
|
return
|
|
}
|
|
|
|
if Body.ReasonType < REPORT_REASON_EXPLICIT || Body.ReasonType > REPORT_REASON_ILLEGAL {
|
|
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_FIELD)
|
|
return
|
|
}
|
|
|
|
if str, ok := tools.NormalizeComment(Body.ReasonText); !ok {
|
|
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_FIELD)
|
|
return
|
|
} else {
|
|
Body.ReasonText = str
|
|
}
|
|
|
|
// Attempt to store the users report. It may be discarded if another moderator
|
|
// has previously review this item and deemed it didn't violate any rules.
|
|
|
|
if _, err := tools.Database.Exec(ctx,
|
|
`INSERT INTO gifuu.mod_report (upload_id, reason_type, reason_text, report_address_hash)
|
|
SELECT $1, $2, $3, $4 FROM gifuu.upload WHERE id = $1 AND flag_bypass = FALSE`,
|
|
paramID,
|
|
Body.ReasonType,
|
|
Body.ReasonText,
|
|
tools.RequestAddressHash(r),
|
|
); err != nil {
|
|
tools.SendServerError(w, r, err)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|