| @@ -0,0 +1,21 @@ | |||||
| module Trace | |||||
| class << self | |||||
| def trace_config | |||||
| trace_config = {} | |||||
| begin | |||||
| config = Rails.application.config_for(:configuration).symbolize_keys! | |||||
| trace_config = config[:trace].symbolize_keys! | |||||
| raise 'trace config missing' if trace_config.blank? | |||||
| rescue => exception | |||||
| raise ex if Rails.env.production? | |||||
| puts %Q{\033[33m [warning] gitea config or configuration.yml missing, | |||||
| please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} | |||||
| trace_config = {} | |||||
| end | |||||
| trace_config | |||||
| end | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,37 @@ | |||||
| # 代码溯源 添加用户 | |||||
| class Trace::AddUserService < Trace::ClientService | |||||
| # 用户名 密码 单位 手机号 邮箱 昵称 | |||||
| attr_accessor :username, :password, :unit, :telnumber, :email, :name | |||||
| def initialize(username, password, unit, telnumber, email, name) | |||||
| @username = username | |||||
| @password = password | |||||
| @unit = unit | |||||
| @telnumber = telnumber | |||||
| @email = email | |||||
| @name = name | |||||
| end | |||||
| def call | |||||
| result = post(url, request_params) | |||||
| response = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| { | |||||
| username: username, | |||||
| password: password, | |||||
| unit: unit, | |||||
| telnumber: telnumber, | |||||
| email: email, | |||||
| name: name | |||||
| } | |||||
| end | |||||
| def url | |||||
| "/user/addccfuser".freeze | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,33 @@ | |||||
| # 代码溯源 查询检测结果 | |||||
| class Trace::CheckResultService < Trace::ClientService | |||||
| attr_accessor :token, :project_name, :file_name, :page_num, :page_size | |||||
| def initialize(token, project_name=nil, file_name=nil, page_num=1, page_size=15) | |||||
| @token = token | |||||
| @project_name = project_name | |||||
| @file_name = file_name | |||||
| @page_num = page_num | |||||
| @page_size = page_size | |||||
| end | |||||
| def call | |||||
| result = authed_get(token, url, request_params) | |||||
| reponse = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| { | |||||
| product_name: project_name, | |||||
| file_name: file_name, | |||||
| pageNum: page_num, | |||||
| pageSize: page_size, | |||||
| } | |||||
| end | |||||
| def url | |||||
| "/user/checkresult".freeze | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,36 @@ | |||||
| # 代码溯源 开始检测 | |||||
| class Trace::CheckService < Trace::ClientService | |||||
| attr_accessor :token, :project, :if_branch, :branch_tag | |||||
| def initialize(token, project, if_branch, branch_tag) | |||||
| @token = token | |||||
| @project = project | |||||
| @if_branch = if_branch | |||||
| @branch_tag = branch_tag | |||||
| end | |||||
| def call | |||||
| result = authed_post(token, url, request_params) | |||||
| reponse = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| repo = Gitea::Repository::GetService.call(project&.owner&.login, project&.identifier) | |||||
| { | |||||
| product_name: project&.name, | |||||
| product_type: project&.category&.name, | |||||
| code_type: project&.language&.name, | |||||
| product_desc: project&.description, | |||||
| git_url: repo['clone_url'], | |||||
| if_branch: if_branch, | |||||
| branch_tag: branch_tag | |||||
| } | |||||
| end | |||||
| def url | |||||
| "/user/check".freeze | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,143 @@ | |||||
| class Trace::ClientService < ApplicationService | |||||
| def post(url, params={}) | |||||
| puts "[trace][POST] request params: #{params}" | |||||
| conn.post do |req| | |||||
| req.url = full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| end | |||||
| end | |||||
| def authed_post(token, url, params={}) | |||||
| puts "[trace][POST] request params: #{params}" | |||||
| puts "[trace][POST] request token: #{token}" | |||||
| conn.post do |req| | |||||
| req.url = full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| req.headers['Authorization'] = token | |||||
| end | |||||
| end | |||||
| def get(url, params={}) | |||||
| puts "[trace][GET] request params: #{params}" | |||||
| conn.get do |req| | |||||
| req.url full_url(url, 'get') | |||||
| params.each_pair do |key, value| | |||||
| req.params["#{key}"] = value | |||||
| end | |||||
| end | |||||
| end | |||||
| def authed_get(token, url, params={}) | |||||
| puts "[trace][GET] request params: #{params}" | |||||
| puts "[trace][GET] request token: #{token}" | |||||
| conn.get do |req| | |||||
| req.url full_url(url, 'get') | |||||
| params.each_pair do |key, value| | |||||
| req.params["#{key}"] = value | |||||
| end | |||||
| req.headers['Authorization'] = token | |||||
| end | |||||
| end | |||||
| def delete(url, params={}) | |||||
| puts "[trace][DELETE] request params: #{params}" | |||||
| conn.delete do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| end | |||||
| end | |||||
| def authed_delete(token, url, params={}) | |||||
| puts "[trace][DELETE] request params: #{params}" | |||||
| puts "[trace][DELETE] request token: #{token}" | |||||
| conn.delete do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| req.headers['Authorization'] = token | |||||
| end | |||||
| end | |||||
| def patch(url, params={}) | |||||
| puts "[trace][PATCH] request params: #{params}" | |||||
| conn.patch do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| end | |||||
| end | |||||
| def authed_patch(token, url, params={}) | |||||
| puts "[trace][PATCH] request params: #{params}" | |||||
| puts "[trace][PATCH] request token: #{token}" | |||||
| conn.patch do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| req.headers['Authorization'] = token | |||||
| end | |||||
| end | |||||
| def put(url, params={}) | |||||
| puts "[trace][PUT] request params: #{params}" | |||||
| conn.put do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| end | |||||
| end | |||||
| def authed_put(token, url, params={}) | |||||
| puts "[trace][PUT] request params: #{params}" | |||||
| puts "[trace][PUT] request token: #{token}" | |||||
| conn.put do |req| | |||||
| req.url full_url(url) | |||||
| req.body = params[:data].to_json | |||||
| req.headers['Authorization'] = token | |||||
| end | |||||
| end | |||||
| private | |||||
| def conn | |||||
| @client ||= begin | |||||
| Faraday.new(url: domain) do |req| | |||||
| req.request :url_encoded | |||||
| req.headers['Content-Type'] = 'application/json' | |||||
| req.adapter Faraday.default_adapter | |||||
| end | |||||
| end | |||||
| @client | |||||
| end | |||||
| def base_url | |||||
| Trace.trace_config[:base_url] | |||||
| end | |||||
| def domain | |||||
| Trace.trace_config[:domain] | |||||
| end | |||||
| def api_url | |||||
| [domain, base_url].join('') | |||||
| end | |||||
| def full_url(api_rest, action='post') | |||||
| url = [api_url, api_rest].join('').freeze | |||||
| url = action === 'get' ? url : URI.escape(url) | |||||
| url = URI.escape(url) unless url.ascii_only? | |||||
| puts "[trace] request url: #{url}" | |||||
| return url | |||||
| end | |||||
| def log_error(status, body) | |||||
| puts "[trace] status: #{status}" | |||||
| puts "[trace] body: #{body}" | |||||
| end | |||||
| def render_response(response) | |||||
| status = response.status | |||||
| body = JSON.parse(response&.body) | |||||
| log_error(status, body) | |||||
| return [body["code"], body["Data"], body["Error"]] | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,29 @@ | |||||
| # 代码溯源 用户登录 | |||||
| class Trace::LoginService < Trace::ClientService | |||||
| # 用户名 密码 | |||||
| attr_accessor :username, :password | |||||
| def initialize(username, password) | |||||
| @username = username | |||||
| @password = password | |||||
| end | |||||
| def call | |||||
| result = post(url, request_params) | |||||
| response = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| { | |||||
| username: username, | |||||
| password: password, | |||||
| } | |||||
| end | |||||
| def url | |||||
| "/user/login".freeze | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,26 @@ | |||||
| # 代码溯源 导出pdf | |||||
| class Trace::PdfReportService < Trace::ClientService | |||||
| attr_accessor :token, :task_id | |||||
| def initialize(token, task_id) | |||||
| @token = token | |||||
| @task_id = task_id | |||||
| end | |||||
| def call | |||||
| result = authed_get(token, url, request_params) | |||||
| response = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| { | |||||
| task_id: task_id | |||||
| } | |||||
| end | |||||
| def url | |||||
| "/user/pdfreport".freeze | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,25 @@ | |||||
| # 代码溯源 重新检测 | |||||
| class Trace::ReloadCheckService < Trace::ClientService | |||||
| attr_accessor :token, :fake_project_id | |||||
| def initialize(token, fake_project_id) | |||||
| @token = token | |||||
| @fake_project_id = fake_project_id | |||||
| end | |||||
| def call | |||||
| result = authed_post(token, url, request_params) | |||||
| response = render_response(result) | |||||
| end | |||||
| private | |||||
| def request_params | |||||
| { | |||||
| project_id: fake_project_id | |||||
| } | |||||
| end | |||||
| def url | |||||
| '/user/reloadcheck'.freeze | |||||
| end | |||||
| end | |||||
| @@ -62,6 +62,10 @@ default: &default | |||||
| write_domain: '' | write_domain: '' | ||||
| read_domain: '' | read_domain: '' | ||||
| base_url: '' | base_url: '' | ||||
| trace: | |||||
| domain: '' | |||||
| base_url: '' | |||||
| production: | production: | ||||
| <<: *default | <<: *default | ||||