Commit 1b238156 authored by Tetiana Chupryna's avatar Tetiana Chupryna

Add configuration response to FOSS

To unify codebase for Security Configuration page
we need to start responsing with Configuration details
for json request for FOSS Configuration controller

Issue https://gitlab.com/gitlab-org/gitlab/-/issues/339023
parent 7ef2f115
...@@ -9,6 +9,37 @@ module Projects ...@@ -9,6 +9,37 @@ module Projects
def show def show
render_403 unless can?(current_user, :read_security_configuration, project) render_403 unless can?(current_user, :read_security_configuration, project)
respond_to do |format|
format.html
format.json do
render status: :ok, json: configuration.to_h
end
end
end
private
def configuration
@configuration ||= if unify_configuration_enabled?
configuration_presenter
else
{}
end
end
def configuration_presenter
::Projects::Security::ConfigurationPresenter.new(project,
**presenter_attributes,
current_user: current_user)
end
def presenter_attributes
{}
end
def unify_configuration_enabled?
Feature.enabled?(:unify_security_configuration, project, default_enabled: :yaml)
end end
end end
end end
......
---
name: unify_security_configuration
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/76866
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/350177
milestone: '14.7'
type: development
group: group::composition analysis
default_enabled: false
...@@ -32,13 +32,12 @@ module EE ...@@ -32,13 +32,12 @@ module EE
def show def show
return super unless security_dashboard_feature_enabled? && can_read_security_dashboard? return super unless security_dashboard_feature_enabled? && can_read_security_dashboard?
@configuration = ::Projects::Security::ConfigurationPresenter.new(project, configuration
auto_fix_permission: auto_fix_authorized?,
current_user: current_user)
respond_to do |format| respond_to do |format|
format.html format.html
format.json do format.json do
render status: :ok, json: @configuration.to_h render status: :ok, json: configuration.to_h
end end
end end
end end
...@@ -77,6 +76,11 @@ module EE ...@@ -77,6 +76,11 @@ module EE
render_404 if ::Feature.disabled?(:security_auto_fix, project) render_404 if ::Feature.disabled?(:security_auto_fix, project)
end end
override :configuration
def configuration
@configuration ||= configuration_presenter
end
def security_dashboard_feature_enabled? def security_dashboard_feature_enabled?
vulnerable.feature_available?(:security_dashboard) vulnerable.feature_available?(:security_dashboard)
end end
...@@ -92,6 +96,11 @@ module EE ...@@ -92,6 +96,11 @@ module EE
def authorize_read_security_dashboard! def authorize_read_security_dashboard!
render_403 unless can_read_security_dashboard? render_403 unless can_read_security_dashboard?
end end
override :presenter_attributes
def presenter_attributes
{ auto_fix_permission: auto_fix_authorized? }
end
end end
end end
end end
......
...@@ -36,6 +36,31 @@ RSpec.describe Projects::Security::ConfigurationController do ...@@ -36,6 +36,31 @@ RSpec.describe Projects::Security::ConfigurationController do
expect(response).to have_gitlab_http_status(:ok) expect(response).to have_gitlab_http_status(:ok)
expect(response).to render_template(:show) expect(response).to render_template(:show)
end end
it 'responds with configuration data json' do
get :show, params: { namespace_id: project.namespace, project_id: project, format: :json }
features = json_response['features']
sast_feature = features.find { |feature| feature['type'] == 'sast' }
dast_feature = features.find { |feature| feature['type'] == 'dast' }
expect(response).to have_gitlab_http_status(:ok)
expect(sast_feature['available']).to be_truthy
expect(dast_feature['available']).to be_falsey
end
context 'with feature flag unify_security_configuration turned off' do
before do
stub_feature_flags(unify_security_configuration: false)
end
it 'responds with empty configuration data json' do
get :show, params: { namespace_id: project.namespace, project_id: project, format: :json }
expect(response).to have_gitlab_http_status(:ok)
expect(json_response).to be_empty
end
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment