diff --git a/doc/development/identity_verification.md b/doc/development/identity_verification.md index 2300fd00e9df9a0983324ef2945125088525ba48..caaf5f8229ce8f8509a22fb4071027d83bf2093a 100644 --- a/doc/development/identity_verification.md +++ b/doc/development/identity_verification.md @@ -8,16 +8,6 @@ info: Any user with at least the Maintainer role can merge updates to this conte For information on this feature that are not development-specific, see the [feature documentation](../security/identity_verification.md). -## Feature flags - -Because of the many registration paths and multiple verification stages, identity verification has several feature flags. - -Before you enable these features, ensure [hard email confirmation](../security/user_email_confirmation.md) is enabled and [Arkose](../integration/arkose.md#configuration) is configured properly. - -| Feature flag name | Description | -|---------|-------------| -| `identity_verification_credit_card` | Turns on credit card verification for high risk users for all flows. | - ## Logging You can triage and debug issues raised by identity verification with the [GitLab production logs](https://log.gprd.gitlab.net). diff --git a/ee/app/helpers/ee/application_settings_helper.rb b/ee/app/helpers/ee/application_settings_helper.rb index f009e2cb412b53fb2a5b2a08ad3d230a9216cb33..c208470f8c09642e7b983ecb380bfbd00c3df8cf 100644 --- a/ee/app/helpers/ee/application_settings_helper.rb +++ b/ee/app/helpers/ee/application_settings_helper.rb @@ -321,6 +321,7 @@ def identity_verification_attributes arkose_labs_private_api_key arkose_labs_public_api_key ci_requires_identity_verification_on_free_plan + credit_card_verification_enabled phone_verification_enabled telesign_api_key telesign_customer_xid diff --git a/ee/app/models/concerns/identity_verifiable.rb b/ee/app/models/concerns/identity_verifiable.rb index e1cfdaa4fd80f37a90e17ceb148adf9319a68386..bf634efbca955c93642ca573a525637186393b86 100644 --- a/ee/app/models/concerns/identity_verifiable.rb +++ b/ee/app/models/concerns/identity_verifiable.rb @@ -43,10 +43,10 @@ def signup_identity_verified? # This prevents the scenario where a user has to verify their identity # multiple times. For example: # - # 1. identity_verification_credit_card FF is disabled + # 1. credit_card_verification_enabled application setting is false # 2. A user registers, is assigned High risk band, verifies their email as # prompted, and starts using GitLab - # 3. identity_verification_credit_card FF is enabled + # 3. credit_card_verification_enabled application setting is true # 4. User signs out and signs in again # 5. User is redirected to Identity Verification which requires them to # verify their credit card @@ -173,7 +173,7 @@ def verification_method_enabled?(method) ::Gitlab::CurrentSettings.phone_verification_enabled && !PhoneVerification::Users::RateLimitService.daily_transaction_hard_limit_exceeded? when 'credit_card' - Feature.enabled?(:identity_verification_credit_card, self) + ::Gitlab::CurrentSettings.credit_card_verification_enabled when 'email' !opt_in_flow? end diff --git a/ee/app/models/ee/application_setting.rb b/ee/app/models/ee/application_setting.rb index c4826cf0d261ba8398e95d6ee1b24062d19eb9a0..7830c7267f5d4b26da05b58c9142c487d51a364d 100644 --- a/ee/app/models/ee/application_setting.rb +++ b/ee/app/models/ee/application_setting.rb @@ -53,7 +53,8 @@ module ApplicationSetting unverified_account_group_creation_limit: [:integer, { default: 2 }], phone_verification_enabled: [:boolean, { default: true }], ci_requires_identity_verification_on_free_plan: [:boolean, { default: true }], - telesign_intelligence_enabled: [:boolean, { default: true }] + telesign_intelligence_enabled: [:boolean, { default: true }], + credit_card_verification_enabled: [:boolean, { default: true }] validates :identity_verification_settings, json_schema: { filename: "identity_verification_settings" } diff --git a/ee/app/validators/json_schemas/identity_verification_settings.json b/ee/app/validators/json_schemas/identity_verification_settings.json index 7696e9e3da956ed47e9300b8d2118be683c452f4..548868596203620a864f3e1cd2a4ad0852f5bcd0 100644 --- a/ee/app/validators/json_schemas/identity_verification_settings.json +++ b/ee/app/validators/json_schemas/identity_verification_settings.json @@ -27,6 +27,10 @@ "telesign_intelligence_enabled": { "type": "boolean", "description": "Flag to control use of Telesign Intelligence service" + }, + "credit_card_verification_enabled": { + "type": "boolean", + "description": "Whether credit card verification is an available identity verification method" } } } diff --git a/ee/config/feature_flags/development/identity_verification_credit_card.yml b/ee/config/feature_flags/development/identity_verification_credit_card.yml deleted file mode 100644 index 142072a76fd4d69c27492c116cb8b99b3200421e..0000000000000000000000000000000000000000 --- a/ee/config/feature_flags/development/identity_verification_credit_card.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: identity_verification_credit_card -introduced_by_url: 'https://gitlab.com/gitlab-org/gitlab/-/merge_requests/99202' -rollout_issue_url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/375675' -milestone: '15.5' -type: development -group: group::anti-abuse -default_enabled: false diff --git a/ee/spec/features/registrations/email_confirmation_spec.rb b/ee/spec/features/registrations/email_confirmation_spec.rb index 114fe5033f1af100db49512f0250607d902cd71e..45acfb022d75f1ba6922b0ad98466a2c681abc4b 100644 --- a/ee/spec/features/registrations/email_confirmation_spec.rb +++ b/ee/spec/features/registrations/email_confirmation_spec.rb @@ -19,7 +19,7 @@ with_them do before do - stub_feature_flags(identity_verification_credit_card: false) + stub_application_setting(credit_card_verification_enabled: false) stub_saas_features(identity_verification: identity_verification) stub_application_setting(require_admin_approval_after_user_signup: require_admin_approval_after_user_signup) diff --git a/ee/spec/helpers/ee/application_settings_helper_spec.rb b/ee/spec/helpers/ee/application_settings_helper_spec.rb index febf1f91e059aa91ffb26dc41cf6b1b1ad6960bd..adce77614a1c8dbad4640ebd4bf10027f42d944f 100644 --- a/ee/spec/helpers/ee/application_settings_helper_spec.rb +++ b/ee/spec/helpers/ee/application_settings_helper_spec.rb @@ -38,6 +38,7 @@ arkose_labs_private_api_key arkose_labs_public_api_key ci_requires_identity_verification_on_free_plan + credit_card_verification_enabled phone_verification_enabled telesign_customer_xid telesign_api_key @@ -54,6 +55,7 @@ arkose_labs_private_api_key arkose_labs_public_api_key ci_requires_identity_verification_on_free_plan + credit_card_verification_enabled phone_verification_enabled telesign_customer_xid telesign_api_key diff --git a/ee/spec/models/application_setting_spec.rb b/ee/spec/models/application_setting_spec.rb index 2ddf34a6565cbde9ad02954ac03fb730e7844dbc..29db1fcf1100be126faeb02ae4395740d1a86627 100644 --- a/ee/spec/models/application_setting_spec.rb +++ b/ee/spec/models/application_setting_spec.rb @@ -36,6 +36,7 @@ it { expect(setting.seat_control).to eq(0) } it { expect(setting.soft_phone_verification_transactions_daily_limit).to eq(16000) } it { expect(setting.phone_verification_enabled).to eq(true) } + it { expect(setting.credit_card_verification_enabled).to eq(true) } it { expect(setting.ci_requires_identity_verification_on_free_plan).to eq(true) } it { expect(setting.secret_detection_service_url).to eq('') } it { expect(setting.secret_detection_service_auth_token).to eq(nil) } diff --git a/ee/spec/models/concerns/identity_verifiable_spec.rb b/ee/spec/models/concerns/identity_verifiable_spec.rb index 59aeb713d3a4bcd2dd126403511299993562e118..9ba3a96fd6c756e65b373445d7e1e2ae6381ba05 100644 --- a/ee/spec/models/concerns/identity_verifiable_spec.rb +++ b/ee/spec/models/concerns/identity_verifiable_spec.rb @@ -55,7 +55,7 @@ def add_user_risk_band(value) context 'when verification methods are unavailable' do before do stub_application_setting(phone_verification_enabled: false) - stub_feature_flags(identity_verification_credit_card: false) + stub_application_setting(credit_card_verification_enabled: false) end context 'when the user is not active' do @@ -345,7 +345,7 @@ def add_user_risk_band(value) user.add_phone_number_verification_exemption if phone_exempt user.add_identity_verification_exemption('test') if identity_verification_exempt - stub_feature_flags(identity_verification_credit_card: credit_card) + stub_application_setting(credit_card_verification_enabled: credit_card) stub_application_setting(phone_verification_enabled: phone_number) end @@ -379,32 +379,6 @@ def add_user_risk_band(value) end end - context 'when flag is enabled for a specific user' do - let_it_be(:another_user) { create(:user) } - - where(:risk_band, :credit_card, :result) do - 'High' | true | %w[email phone credit_card] - 'High' | false | %w[email phone] - end - - with_them do - before do - stub_feature_flags(identity_verification_credit_card: false) - - add_user_risk_band(risk_band) - create(:user_custom_attribute, key: UserCustomAttribute::ARKOSE_RISK_BAND, value: risk_band, - user: another_user) - - stub_feature_flags(identity_verification_credit_card: user) if credit_card - end - - it 'only affects that user' do - expect(user.required_identity_verification_methods).to eq(result) - expect(another_user.required_identity_verification_methods).to eq(%w[email phone]) - end - end - end - context 'when phone verifications soft limit has been exceeded' do where(:risk_band, :result) do 'High' | %w[email credit_card phone] @@ -719,7 +693,7 @@ def add_user_risk_band(value) with_them do before do - stub_feature_flags(identity_verification_credit_card: credit_card) + stub_application_setting(credit_card_verification_enabled: credit_card) stub_application_setting(phone_verification_enabled: phone_number) allow(user).to receive(:required_identity_verification_methods).and_return(required_verification_methods)