# frozen_string_literal: true class GitlabSchema < GraphQL::Schema # Took our current most complicated query in use, issues.graphql, # with a complexity of 19, and added a 20 point buffer to it. # These values will evolve over time. DEFAULT_MAX_COMPLEXITY = 40 AUTHENTICATED_COMPLEXITY = 50 ADMIN_COMPLEXITY = 60 use BatchLoader::GraphQL use Gitlab::Graphql::Authorize use Gitlab::Graphql::Present use Gitlab::Graphql::Connections use Gitlab::Graphql::Tracing query_analyzer Gitlab::Graphql::QueryAnalyzers::LogQueryComplexity.analyzer query(Types::QueryType) default_max_page_size 100 max_complexity DEFAULT_MAX_COMPLEXITY mutation(Types::MutationType) def self.execute(query_str = nil, **kwargs) kwargs[:max_complexity] ||= max_query_complexity(kwargs[:context]) super(query_str, **kwargs) end def self.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 end