summaryrefslogtreecommitdiff
path: root/app/graphql
Commit message (Collapse)AuthorAgeFilesLines
* Render GFM html in GraphQLBob Van Landuyt2019-06-207-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds a `markdown_field` to our types. Using this helper will render a model's markdown field using the existing `MarkupHelper` with the context of the GraphQL query available to the helper. Having the context available to the helper is needed for redacting links to resources that the current user is not allowed to see. Because rendering the HTML can cause queries, the complexity of a these fields is raised by 5 above the default. The markdown field helper can be used as follows: ``` markdown_field :note_html, null: false ``` This would generate a field that will render the markdown field `note` of the model. This could be overridden by adding the `method:` argument. Passing a symbol for the method name: ``` markdown_field :body_html, null: false, method: :note ``` It will have this description by default: > The GitLab Flavored Markdown rendering of `note` This could be overridden by passing a `description:` argument. The type of a `markdown_field` is always `GraphQL::STRING_TYPE`.
* Merge branch '62910-task-completion-status-gql-pderichs' into 'master'Sean McGivern2019-06-173-0/+15
|\ | | | | | | | | | | | | Make task completion status available via GraphQL Closes #62910 See merge request gitlab-org/gitlab-ce!29573
| * Add task count and completed count to graphql types62910-task-completion-status-gql-pderichsPatrick Derichs2019-06-153-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add specs for task completion status (graphql) Fix style issues Changed format of constants in spec Refactor specs to reduce creation of records Reduce parameters to merge request creation Use set's for project and user Move let's out of it_behaves_like block Fix description parameter Fix format of lets Use dig to get task completion status out of graphql response Modified rspec output Add changelog entry
* | Do not blindly expose public project statisticsMayra Cabrera2019-06-142-1/+3
| | | | | | | | Add the missing check on GraphQL API for project statistics
* | Expose comments on Noteables in GraphQLBob Van Landuyt2019-06-149-2/+162
|/ | | | | | | | | This exposes `Note`s on Issues & MergeRequests using a `Types::Notes::NoteableType` in GraphQL. Exposing notes on a new type can be done by implementing the `NoteableType` interface on the type. The presented object should be a `Noteable`.
* Rename `BatchCommitLoader` to `BatchLfsOidLoader`Bob Van Landuyt2019-06-111-1/+1
| | | | | Since we're not actually loading commits in that loader, but we're loading blobs with LFS oids in batch and returning only the oids.
* Add LFS blob ID to GraphQL blob typePhil Hughes2019-06-101-0/+3
|
* Merge branch '62706-graphql-complexity-values-are-incorrectly-doubled' into ↵Jan Provaznik2019-06-061-6/+9
|\ | | | | | | | | | | | | | | | | 'master' Reduce GraphQL complexity for non-connection fields Closes #62706 See merge request gitlab-org/gitlab-ce!29165
| * Grab field_defn to access certain values62706-graphql-complexity-values-are-incorrectly-doubledBrett Walker2019-06-051-2/+4
| |
| * Use :complexity_multiplier only with connectionsBrett Walker2019-06-051-6/+7
| | | | | | | | This helps reduce complexity for non-connections
* | Merge branch 'graphql-file-entry-url' into 'master'Nick Thomas2019-06-053-2/+16
|\ \ | | | | | | | | | | | | Add web_url to tree entry in GraphQL API See merge request gitlab-org/gitlab-ce!28646
| * | Add web_url to tree entry in GraphQL APIPhil Hughes2019-06-053-2/+16
| |/
* | Merge branch 'bvl-use-global-ids-graphql' into 'master'Jan Provaznik2019-06-057-7/+37
|\ \ | |/ |/| | | | | | | | | Use global IDs when exposing GraphQL resources Closes #62650 See merge request gitlab-org/gitlab-ce!29080
| * Fix incorrect instances of `GraphQL::ID_TYPE`Bob Van Landuyt2019-06-035-7/+7
| | | | | | | | | | | | | | | | | | | | | | Since the `GraphQL::ID_TYPE` usages should represent globally unique ids, this changes some fields for which this is not the case into strings. The `ID_TYPE` is a specialised, so this change should be backwards compatible. https://graphql-ruby.org/type_definitions/scalars.html
| * Expose IDs in GraphQL as a GlobalIDBob Van Landuyt2019-06-032-0/+30
| | | | | | | | | | | | | | | | | | | | This exposes all fields named `id` as GlobalIDs so they can be used across our entire GraphQL implementation. When the objects loaded are `ApplicationRecord`s. We'll use our existing batchloading to find them. Otherwise, we'll fall back to the default implementation of `GlobalID`: Calling the `.find` method on the class.
* | Expose wiki_size on GraphQL APIAlessio Caiazza2019-06-041-0/+1
|/
* Add Namespace and ProjectStatistics to GraphQL APIAlessio Caiazza2019-06-036-0/+75
| | | | | | We can query namespaces, and nested projects. Projects now exposes statistics
* Added common fields to the IssueType10795-add-epic-tree-BE-epic-graphql-supportBrett Walker2019-05-315-4/+10
| | | | | and allow passing of child_complexity to the 'resolver_complexity' metho
* Implement logger analyzercharlieablett2019-05-301-1/+1
| | | | | | | - Modify GraphqlLogger to subclass JsonLogger - Replace the single-line analyser with one that can log all the GraphQL query related information in one place. - Implement analyzer behavior with spec
* Enables GraphQL batch requestsPhil Hughes2019-05-281-2/+13
| | | | | | | | | Enabling GraphQL batch requests allows for multiple queries to be sent in 1 request reducing the amount of requests we send to the server. Responses come come back in the same order as the queries were provided.
* Merge branch 'graphql-tree' into 'master'Nick Thomas2019-05-229-0/+113
|\ | | | | | | | | Added repository files to GraphQL API See merge request gitlab-org/gitlab-ce!28325
| * Added repository files to GraphQL APIPhil Hughes2019-05-229-0/+113
| |
* | Use BatchModelLoader for parent in GroupType62066-use-batchmodelloader-for-grouptypeBrett Walker2019-05-201-2/+4
| |
* | Fix typos in the whole gitlab-ce projectYoginth2019-05-201-1/+1
|/
* Merge branch '58404-set-default-max-depth-for-GraphQL' into 'master'Sean McGivern2019-05-081-12/+30
|\ | | | | | | | | | | | | 58404 - setup max depth for graphql Closes #58404 See merge request gitlab-org/gitlab-ce!25737
| * 58404 - setup max depth for graphqlKen Ding2019-05-071-12/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | GraphQL - Add extra complexity for resolversJan Provaznik2019-05-066-4/+76
|/ | | | | | | | | | | | | | | | | | If a field is a resolver, its complexity is automatically increased. By default we add extra points for sort and search arguments (which will be common for various resolvers). For specific resolvers we add field-specific complexity, e.g. for Issues complexity is increased if we filter issues by `labelName` (because then SQL query is more complex). We may want to tune these values in future depending on real-life results. Complexity is also dependent on the number of loaded nodes, but only if we don't search by specific ID(s). Also added complexity is limited (by default only twice more than child complexity) - the reason is that although it's more complex to process more items, the complexity increase is not linear (there is not so much difference between loading 10, 20 or 100 records from DB).
* Add opentracing integration for graphqlJan Provaznik2019-05-021-1/+1
| | | | | | | Extends existing graphql's tracer with opentracing measurements. Because it also adds Tracing::Graphql class (for opentracing), it also renames Graphql::Tracing class to Graphql::GenericTracing to minimize confusion with similar class names.
* Merge branch 'bw-add-graphql-groups' into 'master'Grzegorz Bizon2019-04-307-3/+75
|\ | | | | | | | | | | | | Add basic GraphQL for a Group Closes #60786 See merge request gitlab-org/gitlab-ce!27492
| * Refactor group query specBrett Walker2019-04-231-4/+4
| | | | | | | | and removing unnecessary code
| * Basic GraphQL for a groupBrett Walker2019-04-237-3/+75
| | | | | | | | | | Add new query for Groups, with new GroupType and NamespaceType
* | Port changes for design management to CEBob Van Landuyt2019-04-291-0/+6
|/ | | | | | This ports the changes from https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/10462/ to CE
* Increase GraphQL complexityBrett Walker2019-04-081-5/+4
| | | | | An IntrospectionQuery required more complexity points.
* Fix a KeyError in GitlabSchemaNick Thomas2019-04-041-1/+1
|
* Merge branch '58405-basic-limiting-complexity-of-graphql-queries' into 'master'Rémy Coutable2019-04-042-0/+39
|\ | | | | | | | | | | | | Basic limiting complexity of GraphQL queries Closes #58405 See merge request gitlab-org/gitlab-ce!26629
| * Initial field and query complexity limits58405-basic-limiting-complexity-of-graphql-queriesBrett Walker2019-04-042-0/+39
| | | | | | | | | | | | | | | | It makes all Types::BaseField default to a complexity of 1. Queries themselves now have limited complexity, scaled to the type of user: no user, authenticated user, or an admin user.
* | Monitor GraphQL with PrometheusJan Provaznik2019-04-041-0/+1
|/ | | | | | | | Extends graphql's platform tracing class to observe duration of graphql methods. In graphql 1.8.11 is added prometheus class but it's not very useful for us because it uses prometheus_exporter to export results.
* Merge branch '54417-graphql-type-authorization' into 'master'Nick Thomas2019-04-047-20/+27
|\ | | | | | | | | | | | | GraphQL Type authorization Closes #54417 See merge request gitlab-org/gitlab-ce!25724
| * GraphQL Type authorizationLuke Duncalfe2019-04-037-20/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enables authorizations to be defined on GraphQL Types. module Types class ProjectType < BaseObject authorize :read_project end end If a field has authorizations defined on it, and the return type of the field also has authorizations defined on it. then all of the combined permissions in the authorizations will be checked and must pass. Connection fields are checked by "digging" to find the type class of the "node" field in the expected location of edges->node. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/54417
* | Revert "Merge branch 'jprovazn-graphql-prometheus' into 'master'"Jan Provaznik2019-04-021-1/+0
|/ | | | This reverts merge request !26569
* Monitor GraphQL with PrometheusJan Provaznik2019-04-021-0/+1
| | | | | | | | Extends graphql's platform tracing class to observe duration of graphql methods. In graphql 1.8.11 is added prometheus class but it's not very useful for us because it uses prometheus_exporter to export results.
* Add merge request popover with detailsSam Bigelow2019-03-212-0/+21
| | | | | | | | | - Show pipeline status, title, MR Status and project path - Popover attached to gitlab flavored markdown everywhere, including: + MR/Issue Title + MR/Issue description + MR/Issue comments + Rendered markdown files
* Add metadata about the GitLab server to GraphQLNick Thomas2019-03-053-1/+30
|
* Merge branch 'security-protect-private-repo-information' into 'master'Yorick Peterse2019-03-041-2/+0
|\ | | | | | | | | Fix leaking private repository information in API See merge request gitlab/gitlabhq!2881
| * Removing sensitive properties from ProjectTypeLuke Duncalfe2019-02-181-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | defaultBranch and ciConfigPath should only be available to users with the :download_code permission for the Project, as the respository might be private. When implementing the authorize check on these properties, it was found that our current Graphql::Authorize::Instrumentation class does not work with fields that resolve to subclasses of GraphQL::Schema::Scalar, like GraphQL::STRING_TYPE. After discussion with other Create Team members, it has been decided that because the GraphQL API is not GA, to remove these properties from ProjectType, and instead implement them as part of epic https://gitlab.com/groups/gitlab-org/-/epics/711 Issue: https://gitlab.com/gitlab-org/gitlab-ce/issues/55316
* | Improve GraphQL Authorization DSLLuke Duncalfe2019-02-264-18/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously GraphQL field authorization happened like this: class ProjectType field :my_field, MyFieldType do authorize :permission end end This change allowed us to authorize like this instead: class ProjectType field :my_field, MyFieldType, authorize: :permission end A new initializer registers the `authorize` metadata keyword on GraphQL Schema Objects and Fields, and we can collect this data within the context of Instrumentation like this: field.metadata[:authorize] The previous functionality of authorize is still being used for mutations, as the #authorize method here is called at during the code that executes during the mutation, rather than when a field resolves. https://gitlab.com/gitlab-org/gitlab-ce/issues/57828
* | Add GraphQL filters for issuables (state, labels, time fields)Rémy Coutable2019-02-216-3/+56
| | | | | | | | Signed-off-by: Rémy Coutable <remy@rymai.me>
* | Removing duplicate field from MergeRequestTypeLuke Duncalfe2019-02-181-1/+0
|/
* Use a block and move setup to example directly56485-implement-graphql-mergerequestsresolverLin Jen-Shin2019-02-141-1/+1
|
* Implement singular iid for IssuesResolver and ProjectTypeLin Jen-Shin2019-02-143-4/+12
|