forked from mirrors/pronouns.cc
49 lines
969 B
Go
49 lines
969 B
Go
|
package admin
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"codeberg.org/pronounscc/pronouns.cc/backend/server"
|
||
|
"github.com/go-chi/chi/v5"
|
||
|
"github.com/go-chi/render"
|
||
|
)
|
||
|
|
||
|
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.Post("/users/{id}/actions", server.WrapHandler(s.UserAction))
|
||
|
})
|
||
|
}
|
||
|
|
||
|
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)
|
||
|
}
|