pronounscc/backend/routes/mod/routes.go

62 lines
1.6 KiB
Go
Raw Permalink Normal View History

2023-03-19 16:14:09 +01:00
package mod
import (
"net/http"
2023-06-03 16:18:47 +02:00
"codeberg.org/pronounscc/pronouns.cc/backend/server"
2023-03-19 16:14:09 +01:00
"github.com/go-chi/chi/v5"
"github.com/go-chi/render"
2023-04-17 23:44:21 +02:00
"github.com/prometheus/client_golang/prometheus/promhttp"
2023-03-19 16:14:09 +01:00
)
type Server struct {
*server.Server
}
func Mount(srv *server.Server, r chi.Router) {
s := &Server{Server: srv}
r.With(MustAdmin).Route("/admin", func(r chi.Router) {
r.Get("/reports", server.WrapHandler(s.getReports))
2023-03-21 14:27:39 +01:00
r.Get("/reports/by-user/{id}", server.WrapHandler(s.getReportsByUser))
r.Get("/reports/by-reporter/{id}", server.WrapHandler(s.getReportsByReporter))
2023-03-19 16:14:09 +01:00
r.Patch("/reports/{id}", server.WrapHandler(s.resolveReport))
2023-03-19 16:14:09 +01:00
})
2023-04-17 23:44:21 +02:00
r.With(MustAdmin).Handle("/metrics", promhttp.Handler())
r.With(server.MustAuth).Post("/users/{id}/reports", server.WrapHandler(s.createUserReport))
r.With(server.MustAuth).Post("/members/{id}/reports", server.WrapHandler(s.createMemberReport))
r.With(server.MustAuth).Get("/auth/warnings", server.WrapHandler(s.getWarnings))
r.With(server.MustAuth).Post("/auth/warnings/{id}/ack", server.WrapHandler(s.ackWarning))
2023-03-19 16:14:09 +01:00
}
func MustAdmin(next http.Handler) http.Handler {
fn := func(w http.ResponseWriter, r *http.Request) {
claims, ok := server.ClaimsFromContext(r.Context())
if !ok {
render.Status(r, http.StatusForbidden)
render.JSON(w, r, server.APIError{
Code: server.ErrForbidden,
Message: "Forbidden",
})
return
}
if !claims.UserIsAdmin {
render.Status(r, http.StatusForbidden)
render.JSON(w, r, server.APIError{
Code: server.ErrForbidden,
Message: "Forbidden",
})
return
}
next.ServeHTTP(w, r)
}
return http.HandlerFunc(fn)
}