diff options
author | Ken Ding <ken.ding@mail.com> | 2019-05-06 17:00:03 +0300 |
---|---|---|
committer | Ken Ding <ken.ding@mail.com> | 2019-05-06 18:02:29 +0300 |
commit | f80f68d520b98ae60300ecf0758ff241218e9cd0 (patch) | |
tree | 81acd1781304ba593b1c140f535c252e9a7990bb /app/graphql | |
parent | 4ebbfb9f1e95091a7753a10e12d989d72f4332f8 (diff) |
58404 - setup max depth for graphql
58404 - add change log
58404 - add spec
58404 - add more spec to test depth 2
58404 - fix spec
58404 - fix rubocop
58404 - refactor the code by Bob's advice
58404 - revert changes of all_graphql_fields_for
58404 - change text only
58404 - fix rspec according to gitlab's standard
58404 - revert previous spec
58404 - fix rubocop
Diffstat (limited to 'app/graphql')
-rw-r--r-- | app/graphql/gitlab_schema.rb | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/app/graphql/gitlab_schema.rb b/app/graphql/gitlab_schema.rb index a12568d5d31..897e12c1b56 100644 --- a/app/graphql/gitlab_schema.rb +++ b/app/graphql/gitlab_schema.rb @@ -7,6 +7,9 @@ class GitlabSchema < GraphQL::Schema AUTHENTICATED_COMPLEXITY = 250 ADMIN_COMPLEXITY = 300 + ANONYMOUS_MAX_DEPTH = 10 + AUTHENTICATED_MAX_DEPTH = 15 + use BatchLoader::GraphQL use Gitlab::Graphql::Authorize use Gitlab::Graphql::Present @@ -23,21 +26,36 @@ class GitlabSchema < GraphQL::Schema mutation(Types::MutationType) - def self.execute(query_str = nil, **kwargs) - kwargs[:max_complexity] ||= max_query_complexity(kwargs[:context]) + class << self + def execute(query_str = nil, **kwargs) + kwargs[:max_complexity] ||= max_query_complexity(kwargs[:context]) + kwargs[:max_depth] ||= max_query_depth(kwargs[:context]) - super(query_str, **kwargs) - end + super(query_str, **kwargs) + end + + private + + def max_query_complexity(ctx) + current_user = ctx&.fetch(:current_user, nil) + + if current_user&.admin + ADMIN_COMPLEXITY + elsif current_user + AUTHENTICATED_COMPLEXITY + else + DEFAULT_MAX_COMPLEXITY + end + end - def self.max_query_complexity(ctx) - current_user = ctx&.fetch(:current_user, nil) + def max_query_depth(ctx) + current_user = ctx&.fetch(:current_user, nil) - if current_user&.admin - ADMIN_COMPLEXITY - elsif current_user - AUTHENTICATED_COMPLEXITY - else - DEFAULT_MAX_COMPLEXITY + if current_user + AUTHENTICATED_MAX_DEPTH + else + ANONYMOUS_MAX_DEPTH + end end end end |