From 0db7e28248427a468b06d205e97abb68d4e11e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=B1=E5=91=B1=E5=91=B1?= Date: Wed, 24 Sep 2025 16:07:25 +0800 Subject: [PATCH] sca --- .../api/v1/projects/sca_controller.rb | 35 +++++++++++++++++- .../v1/projects/sca/create_report_service.rb | 19 ---------- ...ect_service.rb => project_show_service.rb} | 2 +- .../v1/projects/sca/report_export_service.rb | 26 +++++++++++++ .../v1/projects/sca/report_list_service.rb | 12 ++++++ .../api/v1/projects/sca/report_service.rb | 26 +++++++++++++ .../v1/projects/sca/scanner_list_service.rb | 15 ++++++++ .../api/v1/projects/sca/scanner_service.rb | 37 +++++++++++++++++++ .../v1/projects/sca/scanner_show_service.rb | 13 +++++++ .../api/v1/projects/sca/create.json.jbuilder | 1 - config/routes/api.rb | 11 +++++- 11 files changed, 173 insertions(+), 24 deletions(-) delete mode 100644 app/services/api/v1/projects/sca/create_report_service.rb rename app/services/api/v1/projects/sca/{show_project_service.rb => project_show_service.rb} (85%) create mode 100644 app/services/api/v1/projects/sca/report_export_service.rb create mode 100644 app/services/api/v1/projects/sca/report_list_service.rb create mode 100644 app/services/api/v1/projects/sca/report_service.rb create mode 100644 app/services/api/v1/projects/sca/scanner_list_service.rb create mode 100644 app/services/api/v1/projects/sca/scanner_service.rb create mode 100644 app/services/api/v1/projects/sca/scanner_show_service.rb delete mode 100644 app/views/api/v1/projects/sca/create.json.jbuilder diff --git a/app/controllers/api/v1/projects/sca_controller.rb b/app/controllers/api/v1/projects/sca_controller.rb index 497105570..34f6e48af 100644 --- a/app/controllers/api/v1/projects/sca_controller.rb +++ b/app/controllers/api/v1/projects/sca_controller.rb @@ -2,13 +2,13 @@ class Api::V1::Projects::ScaController < Api::V1::BaseController before_action :require_public_and_member_above before_action :load_project def index - @auth_token, @result = Api::V1::Projects::Sca::ShowProjectService.call(@project) + @auth_token, @result = Api::V1::Projects::Sca::ProjectShowService.call(@project) set_sca_cookie end def create result = Api::V1::Projects::Sca::CreateProjectService.call(@project) if result - @auth_token, @result = Api::V1::Projects::Sca::ShowProjectService.call(@project) + @auth_token, @result = Api::V1::Projects::Sca::ProjectShowService.call(@project) set_sca_cookie else { @@ -16,6 +16,37 @@ class Api::V1::Projects::ScaController < Api::V1::BaseController "url": nil, } end + render index + end + + def scanner #创建扫描 + @result = Api::V1::Projects::Sca::ScannerService.call(@project, params[:branch]) + render index + end + + def scanner_list #扫描列表 + @result = Api::V1::Projects::Sca::ScannerListService.call(@project, params[:scan_type], params[:limit], params[:page]) + render index + end + + def scanner_show #扫描详情 + @result = Api::V1::Projects::Sca::ScannerShowService.call(params[:scan_id]) + render index + end + + def reports #创建报告 ASC SCA SAST + @result = Api::V1::Projects::Sca::ReportService.call(params[:scan_type], params[:scan_id]) + render index + end + + def report_list #报告列表 + @result = Api::V1::Projects::Sca::ReportListService.call(params[:scan_id]) + render index + end + + def report_export #报告导出 + @result = Api::V1::Projects::Sca::ReportExportService.call(params[:scan_type], params[:scan_id]) + render index end private diff --git a/app/services/api/v1/projects/sca/create_report_service.rb b/app/services/api/v1/projects/sca/create_report_service.rb deleted file mode 100644 index e38ec1450..000000000 --- a/app/services/api/v1/projects/sca/create_report_service.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Api::V1::Projects::Sca::CreateReportService < Api::V1::Projects::Sca::BaseService - def initialize(project) - @project = project - end - - def call - params = { - "org_id": sca_user_info["default_org"], - "team_id_list": [sca_team_id], - "name": @repo, - "provider": "gitea_hs", - "external_id": "#{@owner}&|&#{@repo}", - "description": @project.description - } - data = sca_post_request("reports", params) - @project.update(sca_project_id:data[:json]["id"]) - end - -end \ No newline at end of file diff --git a/app/services/api/v1/projects/sca/show_project_service.rb b/app/services/api/v1/projects/sca/project_show_service.rb similarity index 85% rename from app/services/api/v1/projects/sca/show_project_service.rb rename to app/services/api/v1/projects/sca/project_show_service.rb index 36c377bb5..2d58571ab 100644 --- a/app/services/api/v1/projects/sca/show_project_service.rb +++ b/app/services/api/v1/projects/sca/project_show_service.rb @@ -1,4 +1,4 @@ -class Api::V1::Projects::Sca::ShowProjectService < Api::V1::Projects::Sca::BaseService +class Api::V1::Projects::Sca::ProjectShowService < Api::V1::Projects::Sca::BaseService def initialize(project) @project = project end diff --git a/app/services/api/v1/projects/sca/report_export_service.rb b/app/services/api/v1/projects/sca/report_export_service.rb new file mode 100644 index 000000000..ad1b83ade --- /dev/null +++ b/app/services/api/v1/projects/sca/report_export_service.rb @@ -0,0 +1,26 @@ +class Api::V1::Projects::Sca::ReportExportService < Api::V1::Projects::Sca::BaseService + def initialize(sca,scan_id) + @sca = sca + @scan_id = scan_id + end + + def call + data = if @sca == "SCA" + %w[component vulnerability compliance] + else + %w[issue_code] + end + params = data.map { |e| + { + format: "pdf", + language: "cn", + scan_id: @scan_id, + type: e + } + } + + sca_post_request("reports/export/", params) + end + +end + diff --git a/app/services/api/v1/projects/sca/report_list_service.rb b/app/services/api/v1/projects/sca/report_list_service.rb new file mode 100644 index 000000000..a0cee91d1 --- /dev/null +++ b/app/services/api/v1/projects/sca/report_list_service.rb @@ -0,0 +1,12 @@ +class Api::V1::Projects::Sca::ReportListService < Api::V1::Projects::Sca::BaseService + def initialize(scan_id) + @scan_id = scan_id + end + + def call + sca_get_request("reports/?&scans=#{@scan_id}&language=cn&filter=format") + end + +end + + diff --git a/app/services/api/v1/projects/sca/report_service.rb b/app/services/api/v1/projects/sca/report_service.rb new file mode 100644 index 000000000..6b93522da --- /dev/null +++ b/app/services/api/v1/projects/sca/report_service.rb @@ -0,0 +1,26 @@ +class Api::V1::Projects::Sca::ReportService < Api::V1::Projects::Sca::BaseService + def initialize(sca,scan_id) + @sca = sca + @scan_id = scan_id + end + + def call + data = if @sca == "SCA" + %w[component vulnerability compliance] + else + %w[issue_code] + end + params = data.map { |e| + { + format: "pdf", + language: "cn", + scan_id: @scan_id, + type: e + } + } + + sca_post_request("reports/", params) + end + +end + diff --git a/app/services/api/v1/projects/sca/scanner_list_service.rb b/app/services/api/v1/projects/sca/scanner_list_service.rb new file mode 100644 index 000000000..b0e174301 --- /dev/null +++ b/app/services/api/v1/projects/sca/scanner_list_service.rb @@ -0,0 +1,15 @@ +class Api::V1::Projects::Sca::ScannerListService < Api::V1::Projects::Sca::BaseService + def initialize(project,sca="SCA",limit=5,page=1) + @project = project + @sca = sca + @page = page + @limit = limit + end + + def call + sca_get_request("scans/?project_id=#{@project.sca_project_id}&engine_type=#{@sca}&limit=#{@limit}&page=#{@page}") + end + +end + + diff --git a/app/services/api/v1/projects/sca/scanner_service.rb b/app/services/api/v1/projects/sca/scanner_service.rb new file mode 100644 index 000000000..3744ae429 --- /dev/null +++ b/app/services/api/v1/projects/sca/scanner_service.rb @@ -0,0 +1,37 @@ +class Api::V1::Projects::Sca::ScannerService < Api::V1::Projects::Sca::BaseService + def initialize(project,branch) + @project = project + @branch = branch + end + + def call + params = [ + { + engine_type: "SCA", + project_id: @project.sca_project_id, + sca_scan_parameter: { + compliance_policy_id: 1000, + branch: @branch + }, + scan_type: "source_code", + source: "Gitea_hs SCM", + system_version: "v4.17.0" + }, + { + engine_type: "SAST", + project_id: @project.sca_project_id, + sast_scan_parameter: { + compliance_policy_id: 1000, + branch: @branch + }, + scan_type: "source_code", + source: "Gitea_hs SCM", + system_version: "v4.17.0" + } + ] + + sca_post_request("scans/scan/", params) + end + +end + diff --git a/app/services/api/v1/projects/sca/scanner_show_service.rb b/app/services/api/v1/projects/sca/scanner_show_service.rb new file mode 100644 index 000000000..3bb6500da --- /dev/null +++ b/app/services/api/v1/projects/sca/scanner_show_service.rb @@ -0,0 +1,13 @@ +class Api::V1::Projects::Sca::ScannerShowService < Api::V1::Projects::Sca::BaseService + def initialize(scan_id) + @scan_id = scan_id + end + + def call + #projects/18748/list-branches/?branch_name_query=&page=1&limit=5 + + sca_get_request("scans/#{@scan_id}/") + end + +end + diff --git a/app/views/api/v1/projects/sca/create.json.jbuilder b/app/views/api/v1/projects/sca/create.json.jbuilder deleted file mode 100644 index 86a3f08fd..000000000 --- a/app/views/api/v1/projects/sca/create.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.data @result \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 66296d18b..d3c4b814a 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -223,7 +223,16 @@ defaults format: :json do end end end - resources :sca, only: [:index,:create] + resources :sca, only: [:index,:create] do + collection do + post :scanner + get :scanner_list + get :scanner_show + post :reports + get :report_list + get :report_export + end + end resources :pipelines do post :build_yaml, on: :collection post :save_yaml, on: :collection