diff --git a/app/controllers/trace/base_controller.rb b/app/controllers/trace/base_controller.rb new file mode 100644 index 000000000..d3fb52d1c --- /dev/null +++ b/app/controllers/trace/base_controller.rb @@ -0,0 +1,18 @@ +class Trace::BaseController < ApplicationController + + helper_method :observed_logged_user?, :observed_user + + + def observed_user + @_observed_user ||= (User.find_by_login(params[:user_id]) || User.find_by_id(params[:user_id])) + end + + def observed_logged_user? + observed_user.id == User.current&.id + end + + protected + def check_auth + return render_forbidden unless current_user.admin? || observed_logged_user? + end +end \ No newline at end of file diff --git a/app/controllers/trace/projects_controller.rb b/app/controllers/trace/projects_controller.rb new file mode 100644 index 000000000..a5adcbbb1 --- /dev/null +++ b/app/controllers/trace/projects_controller.rb @@ -0,0 +1,60 @@ +class Trace::ProjectsController < Trace::BaseController + + before_action :require_login + before_action :load_project + + def tasks + branch_name = params[:branch_name] + [code, data, error] = Trace::CheckService.call(current_user.trace_token, @project, "1", branch_name) + if code == 200 + render_ok + else + render_error(-1, "检测失败 Error:#{error}") + end + rescue Exception => exception + puts exception.message + normal_status(-1, exception.message) + end + + def task_results + limit = params[:limit] || params[:per_page] + limit = (limit.to_i.zero? || limit.to_i > 15) ? 15 : limit.to_i + page = params[:page].to_i.zero? ? 1 : params[:page].to_i + [code, data, error] = Trace::CheckResultService.call(current_user.trace_token, @project, nil, page, limit) + if code == 200 + render :json => {data: data} + else + render_error(-1, "获取检测记录失败 Error:#{error}") + end + rescue Exception => exception + puts exception.message + normal_status(-1, exception.message) + end + + def reload_task + render_error(-1, "project_id错误") if params[:project_id].blank? + [code, data, error] = Trace::ReloadCheckService.call(current_user.trace_token, params[:project_id]) + if code == 200 + render_ok + else + render_error(-1, "重新检测失败 Error:#{error}") + end + rescue Exception => exception + puts exception.message + normal_status(-1, exception.message) + end + + + def task_pdf + render_error(-1, "task_id错误") if params[:task_id].blank? + [code, data, error] = Trace::PdfReportService.call(current_user.trace_token, params[:task_id]) + if code == 200 + render_ok + else + render_error(-1, "下载报告失败 Error:#{error}") + end + rescue Exception => exception + puts exception.message + normal_status(-1, exception.message) + end +end \ No newline at end of file diff --git a/app/controllers/trace/trace_users_controller.rb b/app/controllers/trace/trace_users_controller.rb new file mode 100644 index 000000000..4601c3525 --- /dev/null +++ b/app/controllers/trace/trace_users_controller.rb @@ -0,0 +1,14 @@ +class Trace::TraceUsersController < Trace::BaseController + before_action :require_auth + + def create + if current_user.trace_token.present? + render_ok + else + render_error(-1, "代码溯源用户初始化失败") + end + rescue Exception => exception + puts exception.message + normal_status(-1, exception.message) + end +end \ No newline at end of file diff --git a/app/services/trace/check_result_service.rb b/app/services/trace/check_result_service.rb index f1dd61ab0..9c177b147 100644 --- a/app/services/trace/check_result_service.rb +++ b/app/services/trace/check_result_service.rb @@ -1,11 +1,11 @@ # 代码溯源 查询检测结果 class Trace::CheckResultService < Trace::ClientService - attr_accessor :token, :project_name, :file_name, :page_num, :page_size + attr_accessor :token, :project, :file_name, :page_num, :page_size - def initialize(token, project_name=nil, file_name=nil, page_num=1, page_size=15) + def initialize(token, project, file_name=nil, page_num=1, page_size=15) @token = token - @project_name = project_name + @project = project @file_name = file_name @page_num = page_num @page_size = page_size @@ -19,7 +19,7 @@ class Trace::CheckResultService < Trace::ClientService private def request_params { - product_name: project_name, + product_name: "#{project&.owner&.login}-#{project.identifier}", file_name: file_name, pageNum: page_num, pageSize: page_size, diff --git a/app/services/trace/check_service.rb b/app/services/trace/check_service.rb index d31bbcf09..56a70b9a5 100644 --- a/app/services/trace/check_service.rb +++ b/app/services/trace/check_service.rb @@ -17,9 +17,9 @@ class Trace::CheckService < Trace::ClientService private def request_params - repo = Gitea::Repository::GetService.call(project&.owner&.login, project&.identifier) + repo = Gitea::Repository::GetService.call(project&.owner, project&.identifier) { - product_name: project&.name, + product_name: "#{project&.owner&.login}-#{project&.identifier}", product_type: project&.category&.name, code_type: project&.language&.name, product_desc: project&.description, diff --git a/config/routes.rb b/config/routes.rb index 64dce0e60..836960fe2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -677,6 +677,20 @@ Rails.application.routes.draw do end # Project Area END + namespace :trace do + resources :trace_users, only: [:create] + scope "/:owner/:repo" do + resource :projects, path: '/', only: [:index] do + member do + post :tasks + get :task_results + get :reload_task + get :task_pdf + end + end + end + end + scope module: :helps do resources :faqs, only: [:index] end