Add entity filters back in for api

This commit is contained in:
Jamie Curnow
2023-05-29 13:53:16 +10:00
parent 1ae247b2a6
commit 4b39ef0eba
20 changed files with 247 additions and 205 deletions

View File

@ -5,12 +5,13 @@ import (
"encoding/json"
"fmt"
"net/http"
"strings"
c "npm/internal/api/context"
h "npm/internal/api/http"
"npm/internal/entity"
"npm/internal/model"
"npm/internal/util"
"strings"
"github.com/qri-io/jsonschema"
)
@ -19,7 +20,9 @@ import (
// passed in to this endpoint. This will ensure that the filters are not injecting SQL.
// After we have determined what the Filters are to be, they are saved on the Context
// to be used later in other endpoints.
func Filters(schemaData string) func(http.Handler) http.Handler {
func Filters(obj interface{}) func(http.Handler) http.Handler {
schemaData := entity.GetFilterSchema(obj, true)
reservedFilterKeys := []string{
"limit",
"offset",
@ -93,9 +96,10 @@ func Filters(schemaData string) func(http.Handler) http.Handler {
return
}
// todo: populate filters object with the gorm database name
ctx = context.WithValue(ctx, c.FiltersCtxKey, filters)
next.ServeHTTP(w, r.WithContext(ctx))
} else {
next.ServeHTTP(w, r)
}
@ -108,8 +112,7 @@ func GetFiltersFromContext(r *http.Request) []model.Filter {
filters, ok := r.Context().Value(c.FiltersCtxKey).([]model.Filter)
if !ok {
// the assertion failed
var emptyFilters []model.Filter
return emptyFilters
return nil
}
return filters
}

View File

@ -8,6 +8,14 @@ import (
"npm/internal/api/middleware"
"npm/internal/api/schema"
"npm/internal/config"
"npm/internal/entity/accesslist"
"npm/internal/entity/certificate"
"npm/internal/entity/certificateauthority"
"npm/internal/entity/dnsprovider"
"npm/internal/entity/host"
"npm/internal/entity/nginxtemplate"
"npm/internal/entity/stream"
"npm/internal/entity/upstream"
"npm/internal/entity/user"
"npm/internal/logger"
"npm/internal/serverevents"
@ -93,9 +101,10 @@ func applyRoutes(r chi.Router) chi.Router {
r.With(middleware.Enforce(user.CapabilityUsersManage)).Route("/", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityUsersManage), middleware.Filters(user.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityUsersManage)).
Get("/", handler.GetUsers())
r.With(
middleware.Enforce(user.CapabilityUsersManage),
middleware.Filters(user.Model{}),
).Get("/", handler.GetUsers())
// Specific Item
r.Get("/{userID:[0-9]+}", handler.GetUser())
@ -136,9 +145,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Access Lists
r.With(middleware.EnforceSetup(true)).Route("/access-lists", func(r chi.Router) {
// List
// r.With(middleware.Filters(accesslist.GetFilterSchema()), middleware.Enforce(user.CapabilityAccessListsView)).
r.With(middleware.Enforce(user.CapabilityAccessListsView)).
Get("/", handler.GetAccessLists())
r.With(
middleware.Enforce(user.CapabilityAccessListsView),
middleware.Filters(accesslist.Model{}),
).Get("/", handler.GetAccessLists())
// Create
r.With(middleware.Enforce(user.CapabilityAccessListsManage), middleware.EnforceRequestSchema(schema.CreateAccessList())).
@ -159,9 +169,10 @@ func applyRoutes(r chi.Router) chi.Router {
// DNS Providers
r.With(middleware.EnforceSetup(true)).Route("/dns-providers", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityDNSProvidersView), middleware.Filters(dnsprovider.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityDNSProvidersView)).
Get("/", handler.GetDNSProviders())
r.With(
middleware.Enforce(user.CapabilityDNSProvidersView),
middleware.Filters(dnsprovider.Model{}),
).Get("/", handler.GetDNSProviders())
// Create
r.With(middleware.Enforce(user.CapabilityDNSProvidersManage), middleware.EnforceRequestSchema(schema.CreateDNSProvider())).
@ -188,9 +199,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Certificate Authorities
r.With(middleware.EnforceSetup(true)).Route("/certificate-authorities", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityCertificateAuthoritiesView), middleware.Filters(certificateauthority.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityCertificateAuthoritiesView)).
Get("/", handler.GetCertificateAuthorities())
r.With(
middleware.Enforce(user.CapabilityCertificateAuthoritiesView),
middleware.Filters(certificateauthority.Model{}),
).Get("/", handler.GetCertificateAuthorities())
// Create
r.With(middleware.Enforce(user.CapabilityCertificateAuthoritiesManage), middleware.EnforceRequestSchema(schema.CreateCertificateAuthority())).
@ -217,9 +229,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Certificates
r.With(middleware.EnforceSetup(true)).Route("/certificates", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityCertificatesView), middleware.Filters(certificate.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityCertificatesView)).
Get("/", handler.GetCertificates())
r.With(
middleware.Enforce(user.CapabilityCertificatesView),
middleware.Filters(certificate.Model{}),
).Get("/", handler.GetCertificates())
// Create
r.With(middleware.Enforce(user.CapabilityCertificatesManage), middleware.EnforceRequestSchema(schema.CreateCertificate())).
@ -243,9 +256,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Hosts
r.With(middleware.EnforceSetup(true)).Route("/hosts", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityHostsView), middleware.Filters(host.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityHostsView)).
Get("/", handler.GetHosts())
r.With(
middleware.Enforce(user.CapabilityHostsView),
middleware.Filters(host.Model{}),
).Get("/", handler.GetHosts())
// Create
r.With(middleware.Enforce(user.CapabilityHostsManage), middleware.EnforceRequestSchema(schema.CreateHost())).
@ -268,9 +282,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Nginx Templates
r.With(middleware.EnforceSetup(true)).Route("/nginx-templates", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityNginxTemplatesView), middleware.Filters(nginxtemplate.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityNginxTemplatesView)).
Get("/", handler.GetNginxTemplates())
r.With(
middleware.Enforce(user.CapabilityNginxTemplatesView),
middleware.Filters(nginxtemplate.Model{}),
).Get("/", handler.GetNginxTemplates())
// Create
r.With(middleware.Enforce(user.CapabilityNginxTemplatesManage), middleware.EnforceRequestSchema(schema.CreateNginxTemplate())).
@ -291,9 +306,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Streams
r.With(middleware.EnforceSetup(true)).Route("/streams", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityStreamsView), middleware.Filters(stream.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityStreamsView)).
Get("/", handler.GetStreams())
r.With(
middleware.Enforce(user.CapabilityStreamsView),
middleware.Filters(stream.Model{}),
).Get("/", handler.GetStreams())
// Create
r.With(middleware.Enforce(user.CapabilityStreamsManage), middleware.EnforceRequestSchema(schema.CreateStream())).
@ -314,9 +330,10 @@ func applyRoutes(r chi.Router) chi.Router {
// Upstreams
r.With(middleware.EnforceSetup(true)).Route("/upstreams", func(r chi.Router) {
// List
// r.With(middleware.Enforce(user.CapabilityHostsView), middleware.Filters(upstream.GetFilterSchema())).
r.With(middleware.Enforce(user.CapabilityHostsView)).
Get("/", handler.GetUpstreams())
r.With(
middleware.Enforce(user.CapabilityHostsView),
middleware.Filters(upstream.Model{}),
).Get("/", handler.GetUpstreams())
// Create
r.With(middleware.Enforce(user.CapabilityHostsManage), middleware.EnforceRequestSchema(schema.CreateUpstream())).