From 49a923c646a2c24b5377cfde8236c73094c60d42 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 19 Mar 2020 21:09:17 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/frontend.gitlab-ci.yml | 2 + .../concerns/has_unique_internal_users.rb | 51 +++++++ app/models/user.rb | 52 ++------ app/models/user_type_enums.rb | 6 +- .../210025-migrate-ghost-to-user-type.yml | 5 + .../20200313101649_fill_ghost_user_type.rb | 13 ++ doc/administration/auth/cognito.md | 8 +- .../insert_into_tables_in_batches.md | 7 +- doc/development/what_requires_downtime.md | 2 +- doc/user/application_security/sast/index.md | 28 ++-- doc/user/group/saml_sso/index.md | 11 +- package.json | 3 +- spec/models/user_spec.rb | 2 + yarn.lock | 125 ++++-------------- 14 files changed, 145 insertions(+), 170 deletions(-) create mode 100644 app/models/concerns/has_unique_internal_users.rb create mode 100644 changelogs/unreleased/210025-migrate-ghost-to-user-type.yml create mode 100644 db/migrate/20200313101649_fill_ghost_user_type.rb diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index 630e9dfd06a..5b29a76e886 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -37,6 +37,8 @@ paths: - webpack-report/ - assets-compile.log + # We consume these files in GitLab UI for integration tests: + # https://gitlab.com/gitlab-org/gitlab-ui/-/blob/e88493b3c855aea30bf60baee692a64606b0eb1e/.storybook/preview-head.pug#L1 - public/assets/application-*.css - public/assets/application-*.css.gz when: always diff --git a/app/models/concerns/has_unique_internal_users.rb b/app/models/concerns/has_unique_internal_users.rb new file mode 100644 index 00000000000..4d60cfa03b0 --- /dev/null +++ b/app/models/concerns/has_unique_internal_users.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +module HasUniqueInternalUsers + extend ActiveSupport::Concern + + class_methods do + private + + def unique_internal(scope, username, email_pattern, &block) + scope.first || create_unique_internal(scope, username, email_pattern, &block) + end + + def create_unique_internal(scope, username, email_pattern, &creation_block) + # Since we only want a single one of these in an instance, we use an + # exclusive lease to ensure than this block is never run concurrently. + lease_key = "user:unique_internal:#{username}" + lease = Gitlab::ExclusiveLease.new(lease_key, timeout: 1.minute.to_i) + + until uuid = lease.try_obtain + # Keep trying until we obtain the lease. To prevent hammering Redis too + # much we'll wait for a bit between retries. + sleep(1) + end + + # Recheck if the user is already present. One might have been + # added between the time we last checked (first line of this method) + # and the time we acquired the lock. + existing_user = uncached { scope.first } + return existing_user if existing_user.present? + + uniquify = Uniquify.new + + username = uniquify.string(username) { |s| User.find_by_username(s) } + + email = uniquify.string(-> (n) { Kernel.sprintf(email_pattern, n) }) do |s| + User.find_by_email(s) + end + + user = scope.build( + username: username, + email: email, + &creation_block + ) + + Users::UpdateService.new(user, user: user).execute(validate: false) + user + ensure + Gitlab::ExclusiveLease.cancel(lease_key, uuid) + end + end +end diff --git a/app/models/user.rb b/app/models/user.rb index 6972a465c30..48438d0e7e2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -21,6 +21,7 @@ class User < ApplicationRecord include OptionallySearch include FromUnion include BatchDestroyDependentAssociations + include HasUniqueInternalUsers include IgnorableColumns DEFAULT_NOTIFICATION_LEVEL = :participating @@ -612,7 +613,7 @@ class User < ApplicationRecord # owns records previously belonging to deleted users. def ghost email = 'ghost%s@example.com' - unique_internal(where(ghost: true), 'ghost', email) do |u| + unique_internal(where(ghost: true, user_type: :ghost), 'ghost', email) do |u| u.bio = _('This is a "Ghost User", created to hold all issues authored by users that have since been deleted. This user cannot be removed.') u.name = 'Ghost User' end @@ -650,6 +651,13 @@ class User < ApplicationRecord ghost? || bot? end + # We are transitioning from ghost boolean column to user_type + # so we need to read from old column for now + # @see https://gitlab.com/gitlab-org/gitlab/-/issues/210025 + def ghost? + ghost + end + def self.internal where(ghost: true).or(bots) end @@ -1793,48 +1801,6 @@ class User < ApplicationRecord end end - def self.unique_internal(scope, username, email_pattern, &block) - scope.first || create_unique_internal(scope, username, email_pattern, &block) - end - - def self.create_unique_internal(scope, username, email_pattern, &creation_block) - # Since we only want a single one of these in an instance, we use an - # exclusive lease to ensure than this block is never run concurrently. - lease_key = "user:unique_internal:#{username}" - lease = Gitlab::ExclusiveLease.new(lease_key, timeout: 1.minute.to_i) - - until uuid = lease.try_obtain - # Keep trying until we obtain the lease. To prevent hammering Redis too - # much we'll wait for a bit between retries. - sleep(1) - end - - # Recheck if the user is already present. One might have been - # added between the time we last checked (first line of this method) - # and the time we acquired the lock. - existing_user = uncached { scope.first } - return existing_user if existing_user.present? - - uniquify = Uniquify.new - - username = uniquify.string(username) { |s| User.find_by_username(s) } - - email = uniquify.string(-> (n) { Kernel.sprintf(email_pattern, n) }) do |s| - User.find_by_email(s) - end - - user = scope.build( - username: username, - email: email, - &creation_block - ) - - Users::UpdateService.new(user, user: user).execute(validate: false) # rubocop: disable CodeReuse/ServiceClass - user - ensure - Gitlab::ExclusiveLease.cancel(lease_key, uuid) - end - def groups_with_developer_maintainer_project_access project_creation_levels = [::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS] diff --git a/app/models/user_type_enums.rb b/app/models/user_type_enums.rb index 2d0d2f3a4ce..795cc4b2889 100644 --- a/app/models/user_type_enums.rb +++ b/app/models/user_type_enums.rb @@ -2,13 +2,11 @@ module UserTypeEnums def self.types - bots.merge(human: nil) + @types ||= bots.merge(human: nil, ghost: 5) end def self.bots - { - alert_bot: 2 - }.with_indifferent_access + @bots ||= { alert_bot: 2 }.with_indifferent_access end end diff --git a/changelogs/unreleased/210025-migrate-ghost-to-user-type.yml b/changelogs/unreleased/210025-migrate-ghost-to-user-type.yml new file mode 100644 index 00000000000..cd789d2c5af --- /dev/null +++ b/changelogs/unreleased/210025-migrate-ghost-to-user-type.yml @@ -0,0 +1,5 @@ +--- +title: Fill user_type for ghost users +merge_request: 27387 +author: +type: other diff --git a/db/migrate/20200313101649_fill_ghost_user_type.rb b/db/migrate/20200313101649_fill_ghost_user_type.rb new file mode 100644 index 00000000000..fa0c02e5413 --- /dev/null +++ b/db/migrate/20200313101649_fill_ghost_user_type.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class FillGhostUserType < ActiveRecord::Migration[6.0] + DOWNTIME = false + + def up + execute('UPDATE users SET user_type = 5 WHERE ghost IS TRUE AND user_type IS NULL') + end + + def down + execute('UPDATE users SET user_type = NULL WHERE ghost IS TRUE AND user_type IS NOT NULL') + end +end diff --git a/doc/administration/auth/cognito.md b/doc/administration/auth/cognito.md index 84923952131..8d5580ccb6c 100644 --- a/doc/administration/auth/cognito.md +++ b/doc/administration/auth/cognito.md @@ -26,7 +26,7 @@ The following steps enable AWS Cognito as an authentication provider: - **Callback URL** - `https://gitlab.example.com/users/auth/cognito/callback` - Substitute the URL of your GitLab instance for `gitlab.example.com` - **Allowed OAuth Flows** - Authorization code grant - - **Allowed OAuth Scopes** - `email` and `openid` + - **Allowed OAuth2 Scopes** - `email`, `openid`, and `profile` 1. Save changes for the app client settings. 1. Under **Domain name** include the AWS domain name for your AWS Cognito application. @@ -54,15 +54,17 @@ Include the code block in the `/etc/gitlab/gitlab.rb` file: "app_id" => "CLIENT ID", "app_secret" => "CLIENT SECRET", "args" => { + "scope" => "openid profile email", client_options: { 'site' => 'https://your_domain.auth.your_region.amazoncognito.com', - 'authorize_url' => '/login', + 'authorize_url' => '/oauth2/authorize', 'token_url' => '/oauth2/token', 'user_info_url' => '/oauth2/userInfo' }, user_response_structure: { root_path: [], - attributes: { nickname: 'email'} + id_path: ['sub'], + attributes: { nickname: 'email', name: 'email', email: 'email' } }, name: 'cognito', strategy_class: "OmniAuth::Strategies::OAuth2Generic" diff --git a/doc/development/insert_into_tables_in_batches.md b/doc/development/insert_into_tables_in_batches.md index de62d2cca52..e5c4dc6ee56 100644 --- a/doc/development/insert_into_tables_in_batches.md +++ b/doc/development/insert_into_tables_in_batches.md @@ -184,10 +184,9 @@ simply be treated as if you had invoked `save` from outside the block. There are a few restrictions to how these APIs can be used: -- `ON CONFLICT` behavior cannot currently be configured; an error will be raised on primary key conflicts. -- `BulkInsertableAssociations` furthermore has the following restrictions: - - only compatible with `has_many` relations. - - does not support `has_many through: ...` relations. +- `BulkInsertableAssociations`: + - It is currently only compatible with `has_many` relations. + - It does not yet support `has_many through: ...` relations. - Writing [`jsonb`](https://www.postgresql.org/docs/current/datatype-json.html) content is [not currently supported](https://gitlab.com/gitlab-org/gitlab/-/issues/210560). diff --git a/doc/development/what_requires_downtime.md b/doc/development/what_requires_downtime.md index b7ea56be873..9ece6eff41e 100644 --- a/doc/development/what_requires_downtime.md +++ b/doc/development/what_requires_downtime.md @@ -162,7 +162,7 @@ class CleanupUsersUpdatedAtRename < ActiveRecord::Migration[4.2] end ``` -NOTE: **Note:** If you're renaming a large table, please carefully consider the state when the first migration has run but the second cleanup migration hasn't been run yet. +NOTE: **Note:** If you're renaming a [large table](https://gitlab.com/gitlab-org/gitlab/-/blob/master/rubocop/migration_helpers.rb#L9), please carefully consider the state when the first migration has run but the second cleanup migration hasn't been run yet. With [Canary](https://about.gitlab.com/handbook/engineering/infrastructure/library/canary/) it is possible that the system runs in this state for a significant amount of time. ## Changing Column Constraints diff --git a/doc/user/application_security/sast/index.md b/doc/user/application_security/sast/index.md index 70d31f8e1d6..82a7256a984 100644 --- a/doc/user/application_security/sast/index.md +++ b/doc/user/application_security/sast/index.md @@ -17,10 +17,11 @@ to learn how to protect your organization. If you are using [GitLab CI/CD](../../../ci/README.md), you can analyze your source code for known vulnerabilities using Static Application Security Testing (SAST). -You can take advantage of SAST by either [including the CI job](#configuration) in -your existing `.gitlab-ci.yml` file or by implicitly using -[Auto SAST](../../../topics/autodevops/index.md#auto-sast-ultimate) -that is provided by [Auto DevOps](../../../topics/autodevops/index.md). +You can take advantage of SAST by doing one of the following: + +- [Including the CI job](#configuration) in your existing `.gitlab-ci.yml` file. +- Implicitly using [Auto SAST](../../../topics/autodevops/index.md#auto-sast-ultimate) provided by + [Auto DevOps](../../../topics/autodevops/index.md). GitLab checks the SAST report, compares the found vulnerabilities between the source and target branches, and shows the information right on the merge request. @@ -91,12 +92,14 @@ The Java analyzers can also be used for variants like the ## Configuration -For GitLab 11.9 and later, to enable SAST, you must -[include](../../../ci/yaml/README.md#includetemplate) the -[`SAST.gitlab-ci.yml` template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml) -that's provided as a part of your GitLab installation. -For GitLab versions earlier than 11.9, you can copy and use the job as defined -that template. +NOTE: **Note:** +You don't have to configure SAST manually as shown in this section if you're using [Auto SAST](../../../topics/autodevops/index.md#auto-sast-ultimate) +provided by [Auto DevOps](../../../topics/autodevops/index.md). + +For GitLab 11.9 and later, to enable SAST you must [include](../../../ci/yaml/README.md#includetemplate) +the [`SAST.gitlab-ci.yml` template](https://gitlab.com/gitlab-org/gitlab/blob/master/lib/gitlab/ci/templates/Security/SAST.gitlab-ci.yml) +that is provided as a part of your GitLab installation. For GitLab versions earlier than 11.9, you +can copy and use the job as defined that template. Add the following to your `.gitlab-ci.yml` file: @@ -448,8 +451,9 @@ the report JSON unless stated otherwise. Presence of optional fields depends on ## Secret detection -GitLab is also able to detect secrets and credentials that have been unintentionally pushed to the repository. -For example, an API key that allows write access to third-party deployment environments. +GitLab is also able to detect secrets and credentials that have been unintentionally pushed to the +repository (for example, an API key that allows write access to third-party deployment +environments). This check is performed by a specific analyzer during the `sast` job. It runs regardless of the programming language of your app, and you don't need to change anything to your diff --git a/doc/user/group/saml_sso/index.md b/doc/user/group/saml_sso/index.md index 25493a42d83..66ea6684f5d 100644 --- a/doc/user/group/saml_sso/index.md +++ b/doc/user/group/saml_sso/index.md @@ -190,12 +190,8 @@ NOTE: **Note:** GitLab is unable to provide support for IdPs that are not listed |----------|---------------| | ADFS (Active Directory Federation Services) | [Create a Relying Party Trust](https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/create-a-relying-party-trust) | | Azure | [Configuring single sign-on to applications](https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-single-sign-on-non-gallery-applications) | -| Auth0 | [Auth0 as Identity Provider](https://auth0.com/docs/protocols/saml/saml-idp-generic) | -| G Suite | [Set up your own custom SAML application](https://support.google.com/a/answer/6087519?hl=en) | -| JumpCloud | [Single Sign On (SSO) with GitLab](https://support.jumpcloud.com/support/s/article/single-sign-on-sso-with-gitlab-2019-08-21-10-36-47) | | Okta | [Setting up a SAML application in Okta](https://developer.okta.com/docs/guides/saml-application-setup/overview/) | | OneLogin | [Use the OneLogin SAML Test Connector](https://onelogin.service-now.com/support?id=kb_article&sys_id=93f95543db109700d5505eea4b96198f) | -| Ping One for Enterprise | [Add and configure a new SAML application](https://support.pingidentity.com/s/document-item?bundleId=pingone&topicId=xsh1564020480660-1.html) | When [configuring your identify provider](#configuring-your-identity-provider), please consider the notes below for specific providers to help avoid common issues and as a guide for terminology used. @@ -360,6 +356,13 @@ This can be prevented by configuring the [NameID](#nameid) to return a consisten Not a problem, the SAML standard means that a wide range of identity providers will work with GitLab. Unfortunately we aren't familiar with all of them so can only offer support configuring the [listed providers](#providers). +Your identity provider may also have relevant documentation. It may be generic SAML documentation, or specifically targeted for GitLab. Examples: + +- [Auth0](https://auth0.com/docs/protocols/saml/saml-idp-generic) +- [G Suite](https://support.google.com/a/answer/6087519?hl=en) +- [JumpCloud](https://support.jumpcloud.com/support/s/article/single-sign-on-sso-with-gitlab-2019-08-21-10-36-47) +- [OneLogin](https://onelogin.service-now.com/support?id=kb_article&sys_id=93f95543db109700d5505eea4b96198f). + ### I need additional information to configure my identity provider Many SAML terms can vary between providers. It is possible that the information you are looking for is listed under another name. diff --git a/package.json b/package.json index f4f5d3a7070..abf790f00fc 100644 --- a/package.json +++ b/package.json @@ -66,8 +66,7 @@ "core-js": "^3.6.4", "cropper": "^2.3.0", "css-loader": "^1.0.0", - "d3": "^4.13.0", - "d3-scale": "^1.0.7", + "d3-scale": "^2.2.2", "d3-selection": "^1.2.0", "dateformat": "^3.0.3", "deckar01-task_list": "^2.3.1", diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index c87272b2309..3286a891203 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -3134,6 +3134,8 @@ describe User, :do_not_mock_admin_mode do expect(ghost).to be_persisted expect(ghost.namespace).not_to be_nil expect(ghost.namespace).to be_persisted + expect(ghost.user_type).to eq 'ghost' + expect(ghost.ghost).to eq true end it "does not create a second ghost user if one is already present" do diff --git a/yarn.lock b/yarn.lock index 00c6486764b..7b3a0c5042f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3303,17 +3303,17 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= -d3-array@1, d3-array@1.2.1, d3-array@^1.1.1, d3-array@^1.2.0: +d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" integrity sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw== -d3-axis@1, d3-axis@1.0.8: +d3-axis@1: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa" integrity sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo= -d3-brush@1, d3-brush@1.0.4: +d3-brush@1: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4" integrity sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q= @@ -3324,7 +3324,7 @@ d3-brush@1, d3-brush@1.0.4: d3-selection "1" d3-transition "1" -d3-chord@1, d3-chord@1.0.4: +d3-chord@1: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c" integrity sha1-fexPC6iG9xP+ERxF92NBT290yiw= @@ -3332,12 +3332,12 @@ d3-chord@1, d3-chord@1.0.4: d3-array "1" d3-path "1" -d3-collection@1, d3-collection@1.0.4: +d3-collection@1: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" integrity sha1-NC39EoN8kJdPM/HMCnha6lcNzcI= -d3-color@1, d3-color@1.0.3: +d3-color@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" integrity sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs= @@ -3349,12 +3349,12 @@ d3-contour@1: dependencies: d3-array "^1.1.1" -d3-dispatch@1, d3-dispatch@1.0.3: +d3-dispatch@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" integrity sha1-RuFJHqqbWMNY/OW+TovtYm54cfg= -d3-drag@1, d3-drag@1.2.1: +d3-drag@1: version "1.2.1" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" integrity sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ== @@ -3362,7 +3362,7 @@ d3-drag@1, d3-drag@1.2.1: d3-dispatch "1" d3-selection "1" -d3-dsv@1, d3-dsv@1.0.8: +d3-dsv@1: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae" integrity sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A== @@ -3371,7 +3371,7 @@ d3-dsv@1, d3-dsv@1.0.8: iconv-lite "0.4" rw "1" -d3-ease@1, d3-ease@1.0.3: +d3-ease@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" integrity sha1-aL+8NJM4o4DETYrMT7wzBKotjA4= @@ -3383,7 +3383,7 @@ d3-fetch@1: dependencies: d3-dsv "1" -d3-force@1, d3-force@1.1.0: +d3-force@1: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" integrity sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg== @@ -3393,65 +3393,50 @@ d3-force@1, d3-force@1.1.0: d3-quadtree "1" d3-timer "1" -d3-format@1, d3-format@1.2.2: +d3-format@1: version "1.2.2" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" integrity sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw== -d3-geo@1, d3-geo@1.9.1: +d3-geo@1: version "1.9.1" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.9.1.tgz#157e3b0f917379d0f73bebfff3be537f49fa7356" integrity sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA== dependencies: d3-array "1" -d3-hierarchy@1, d3-hierarchy@1.1.5: +d3-hierarchy@1: version "1.1.5" resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26" integrity sha1-ochFxC+Eoga88cAcAQmOpN2qeiY= -d3-interpolate@1, d3-interpolate@1.1.6: +d3-interpolate@1: version "1.1.6" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== dependencies: d3-color "1" -d3-path@1, d3-path@1.0.5: +d3-path@1: version "1.0.5" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" integrity sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q= -d3-polygon@1, d3-polygon@1.0.3: +d3-polygon@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62" integrity sha1-FoiOkCZGCTPysXllKtN4Ik04LGI= -d3-quadtree@1, d3-quadtree@1.0.3: +d3-quadtree@1: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" integrity sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg= -d3-queue@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" - integrity sha1-yTouVLQXwJWRKdfXP2z31Ckudhg= - -d3-random@1, d3-random@1.1.0: +d3-random@1: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3" integrity sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM= -d3-request@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.6.tgz#a1044a9ef4ec28c824171c9379fae6d79474b19f" - integrity sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w== - dependencies: - d3-collection "1" - d3-dispatch "1" - d3-dsv "1" - xmlhttprequest "1" - d3-scale-chromatic@1: version "1.3.3" resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz#dad4366f0edcb288f490128979c3c793583ed3c0" @@ -3460,20 +3445,7 @@ d3-scale-chromatic@1: d3-color "1" d3-interpolate "1" -d3-scale@1.0.7, d3-scale@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" - integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== - dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-color "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" - -d3-scale@2: +d3-scale@2, d3-scale@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== @@ -3485,36 +3457,36 @@ d3-scale@2: d3-time "1" d3-time-format "2" -d3-selection@1, d3-selection@1.3.0, d3-selection@^1.1.0, d3-selection@^1.2.0: +d3-selection@1, d3-selection@^1.1.0, d3-selection@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" integrity sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA== -d3-shape@1, d3-shape@1.2.0: +d3-shape@1: version "1.2.0" resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" integrity sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c= dependencies: d3-path "1" -d3-time-format@2, d3-time-format@2.1.1: +d3-time-format@2: version "2.1.1" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" integrity sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw== dependencies: d3-time "1" -d3-time@1, d3-time@1.0.8: +d3-time@1: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" integrity sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ== -d3-timer@1, d3-timer@1.0.7: +d3-timer@1: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" integrity sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA== -d3-transition@1, d3-transition@1.1.1: +d3-transition@1: version "1.1.1" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" integrity sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ== @@ -3526,12 +3498,12 @@ d3-transition@1, d3-transition@1.1.1: d3-selection "^1.1.0" d3-timer "1" -d3-voronoi@1, d3-voronoi@1.1.2: +d3-voronoi@1: version "1.1.2" resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= -d3-zoom@1, d3-zoom@1.7.1: +d3-zoom@1: version "1.7.1" resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" integrity sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ== @@ -3542,42 +3514,6 @@ d3-zoom@1, d3-zoom@1.7.1: d3-selection "1" d3-transition "1" -d3@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d" - integrity sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ== - dependencies: - d3-array "1.2.1" - d3-axis "1.0.8" - d3-brush "1.0.4" - d3-chord "1.0.4" - d3-collection "1.0.4" - d3-color "1.0.3" - d3-dispatch "1.0.3" - d3-drag "1.2.1" - d3-dsv "1.0.8" - d3-ease "1.0.3" - d3-force "1.1.0" - d3-format "1.2.2" - d3-geo "1.9.1" - d3-hierarchy "1.1.5" - d3-interpolate "1.1.6" - d3-path "1.0.5" - d3-polygon "1.0.3" - d3-quadtree "1.0.3" - d3-queue "3.0.7" - d3-random "1.1.0" - d3-request "1.0.6" - d3-scale "1.0.7" - d3-selection "1.3.0" - d3-shape "1.2.0" - d3-time "1.0.8" - d3-time-format "2.1.1" - d3-timer "1.0.7" - d3-transition "1.1.1" - d3-voronoi "1.1.2" - d3-zoom "1.7.1" - d3@^5.14, d3@^5.7.0: version "5.15.0" resolved "https://registry.yarnpkg.com/d3/-/d3-5.15.0.tgz#ffd44958e6a3cb8a59a84429c45429b8bca5677a" @@ -12283,11 +12219,6 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xmlhttprequest@1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"