diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-15 18:15:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-15 18:15:54 +0300 |
commit | 231a6ae572807c481b71d906cad717fdffc85e0f (patch) | |
tree | 8b2415e1d4420bb3a5a14b365a37c8ef92bf6728 /app/presenters/projects | |
parent | 73b652cf4f890e91868055df8f76e6f869dd710d (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/presenters/projects')
-rw-r--r-- | app/presenters/projects/security/configuration_presenter.rb | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/app/presenters/projects/security/configuration_presenter.rb b/app/presenters/projects/security/configuration_presenter.rb new file mode 100644 index 00000000000..89fca1a451a --- /dev/null +++ b/app/presenters/projects/security/configuration_presenter.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +module Projects + module Security + class ConfigurationPresenter < Gitlab::View::Presenter::Delegated + include AutoDevopsHelper + include ::Security::LatestPipelineInformation + + presents ::Project, as: :project + + def to_h + { + auto_devops_enabled: auto_devops_source?, + auto_devops_help_page_path: help_page_path('topics/autodevops/index'), + auto_devops_path: auto_devops_settings_path(project), + can_enable_auto_devops: can_enable_auto_devops?, + features: features, + help_page_path: help_page_path('user/application_security/index'), + latest_pipeline_path: latest_pipeline_path, + # TODO: gitlab_ci_present will incorrectly report `false` if the CI/CD configuration file name + # has been customized and a file with the given custom name exists in the repo. This edge case + # will be addressed in https://gitlab.com/gitlab-org/gitlab/-/issues/342465 + gitlab_ci_present: project.repository.gitlab_ci_yml.present?, + gitlab_ci_history_path: gitlab_ci_history_path, + auto_fix_enabled: autofix_enabled, + can_toggle_auto_fix_settings: can_toggle_autofix, + auto_fix_user_path: auto_fix_user_path + } + end + + def to_html_data_attribute + data = to_h + data[:features] = data[:features].to_json + data[:auto_fix_enabled] = data[:auto_fix_enabled].to_json + + data + end + + private + + def autofix_enabled; end + + def auto_fix_user_path; end + + def can_enable_auto_devops? + feature_available?(:builds, current_user) && + can?(current_user, :admin_project, self) && + !archived? + end + + def can_toggle_autofix; end + + def gitlab_ci_history_path + return '' if project.empty_repo? + + gitlab_ci = ::Gitlab::FileDetector::PATTERNS[:gitlab_ci] + ::Gitlab::Routing.url_helpers.project_blame_path(project, File.join(project.default_branch_or_main, gitlab_ci)) + end + + def features + scans = scan_types.map do |scan_type| + scan(scan_type, configured: scanner_enabled?(scan_type)) + end + + # These scans are "fake" (non job) entries. Add them manually. + scans << scan(:corpus_management, configured: true) + scans << scan(:dast_profiles, configured: true) + end + + def latest_pipeline_path + return help_page_path('ci/pipelines') unless latest_default_branch_pipeline + + project_pipeline_path(self, latest_default_branch_pipeline) + end + + def scan(type, configured: false) + scan = ::Gitlab::Security::ScanConfiguration.new(project: project, type: type, configured: configured) + + { + type: scan.type, + configured: scan.configured?, + configuration_path: scan.configuration_path, + available: scan.available? + } + end + + def scan_types + ::Security::SecurityJobsFinder.allowed_job_types + ::Security::LicenseComplianceJobsFinder.allowed_job_types + end + + def project_settings + project.security_setting + end + end + end +end + +Projects::Security::ConfigurationPresenter.prepend_mod_with('Projects::Security::ConfigurationPresenter') |