From be80de0208a6561d97e1b7fc4a82acedf55324a6 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 14 May 2020 09:38:11 -0400 Subject: [PATCH] API: Add (basic) complexity limit --- api/gqlgen.yml | 4 +-- api/graph/{generated => api}/generated.go | 2 +- api/graph/schema.resolvers.go | 30 +++++++++++------------ api/server.go | 16 +++++++----- 4 files changed, 28 insertions(+), 24 deletions(-) rename api/graph/{generated => api}/generated.go (99%) diff --git a/api/gqlgen.yml b/api/gqlgen.yml index ebefa20..52b15d0 100644 --- a/api/gqlgen.yml +++ b/api/gqlgen.yml @@ -4,8 +4,8 @@ schema: # Where should the generated server code go? exec: - filename: graph/generated/generated.go - package: generated + filename: graph/api/generated.go + package: api # Uncomment to enable federation # federation: diff --git a/api/graph/generated/generated.go b/api/graph/api/generated.go similarity index 99% rename from api/graph/generated/generated.go rename to api/graph/api/generated.go index 5c07fed..be5e16e 100644 --- a/api/graph/generated/generated.go +++ b/api/graph/api/generated.go @@ -1,6 +1,6 @@ // Code generated by git.sr.ht/~sircmpwn/gqlgen, DO NOT EDIT. -package generated +package api import ( "bytes" diff --git a/api/graph/schema.resolvers.go b/api/graph/schema.resolvers.go index 9edf28d..88f6e50 100644 --- a/api/graph/schema.resolvers.go +++ b/api/graph/schema.resolvers.go @@ -11,7 +11,7 @@ import ( "git.sr.ht/~sircmpwn/git.sr.ht/api/auth" "git.sr.ht/~sircmpwn/git.sr.ht/api/database" - "git.sr.ht/~sircmpwn/git.sr.ht/api/graph/generated" + "git.sr.ht/~sircmpwn/git.sr.ht/api/graph/api" "git.sr.ht/~sircmpwn/git.sr.ht/api/graph/model" "git.sr.ht/~sircmpwn/git.sr.ht/api/loaders" "git.sr.ht/~sircmpwn/gqlgen/graphql" @@ -371,26 +371,26 @@ func (r *userResolver) Repositories(ctx context.Context, obj *model.User, cursor return &model.RepositoryCursor{repos, cursor}, nil } -// ACL returns generated.ACLResolver implementation. -func (r *Resolver) ACL() generated.ACLResolver { return &aCLResolver{r} } +// ACL returns api.ACLResolver implementation. +func (r *Resolver) ACL() api.ACLResolver { return &aCLResolver{r} } -// Commit returns generated.CommitResolver implementation. -func (r *Resolver) Commit() generated.CommitResolver { return &commitResolver{r} } +// Commit returns api.CommitResolver implementation. +func (r *Resolver) Commit() api.CommitResolver { return &commitResolver{r} } -// Mutation returns generated.MutationResolver implementation. -func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} } +// Mutation returns api.MutationResolver implementation. +func (r *Resolver) Mutation() api.MutationResolver { return &mutationResolver{r} } -// Query returns generated.QueryResolver implementation. -func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} } +// Query returns api.QueryResolver implementation. +func (r *Resolver) Query() api.QueryResolver { return &queryResolver{r} } -// Repository returns generated.RepositoryResolver implementation. -func (r *Resolver) Repository() generated.RepositoryResolver { return &repositoryResolver{r} } +// Repository returns api.RepositoryResolver implementation. +func (r *Resolver) Repository() api.RepositoryResolver { return &repositoryResolver{r} } -// Tree returns generated.TreeResolver implementation. -func (r *Resolver) Tree() generated.TreeResolver { return &treeResolver{r} } +// Tree returns api.TreeResolver implementation. +func (r *Resolver) Tree() api.TreeResolver { return &treeResolver{r} } -// User returns generated.UserResolver implementation. -func (r *Resolver) User() generated.UserResolver { return &userResolver{r} } +// User returns api.UserResolver implementation. +func (r *Resolver) User() api.UserResolver { return &userResolver{r} } type aCLResolver struct{ *Resolver } type commitResolver struct{ *Resolver } diff --git a/api/server.go b/api/server.go index 6f9685c..7c2936b 100644 --- a/api/server.go +++ b/api/server.go @@ -7,7 +7,7 @@ import ( "os" "git.sr.ht/~sircmpwn/getopt" - "git.sr.ht/~sircmpwn/gqlgen/graphql/handler" + "git.sr.ht/~sircmpwn/gqlgen/handler" "git.sr.ht/~sircmpwn/gqlgen/graphql/playground" "github.com/go-chi/chi" "github.com/go-chi/chi/middleware" @@ -17,11 +17,11 @@ import ( "git.sr.ht/~sircmpwn/git.sr.ht/api/auth" "git.sr.ht/~sircmpwn/git.sr.ht/api/crypto" "git.sr.ht/~sircmpwn/git.sr.ht/api/graph" - "git.sr.ht/~sircmpwn/git.sr.ht/api/graph/generated" + "git.sr.ht/~sircmpwn/git.sr.ht/api/graph/api" "git.sr.ht/~sircmpwn/git.sr.ht/api/loaders" ) -const defaultAddr = ":8080" +const defaultAddr = ":5101" func main() { var ( @@ -70,14 +70,18 @@ func main() { router.Use(loaders.Middleware(db)) router.Use(middleware.Logger) - srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{ + gqlConfig := api.Config{ Resolvers: &graph.Resolver{DB: db}, - })) + } + srv := handler.GraphQL( + api.NewExecutableSchema(gqlConfig), + handler.ComplexityLimit(50)) + + router.Handle("/query", srv) if debug { router.Handle("/", playground.Handler("GraphQL playground", "/query")) } - router.Handle("/query", srv) log.Printf("running on %s", addr) log.Fatal(http.ListenAndServe(addr, router)) -- 2.38.4