Browse Source

add: trace client and api completed

pull/313/head
yystopf 4 years ago
parent
commit
747646cd9d
9 changed files with 354 additions and 0 deletions
  1. +21
    -0
      app/libs/trace.rb
  2. +37
    -0
      app/services/trace/add_user_service.rb
  3. +33
    -0
      app/services/trace/check_result_service.rb
  4. +36
    -0
      app/services/trace/check_service.rb
  5. +143
    -0
      app/services/trace/client_service.rb
  6. +29
    -0
      app/services/trace/login_service.rb
  7. +26
    -0
      app/services/trace/pdf_report_service.rb
  8. +25
    -0
      app/services/trace/reload_check_service.rb
  9. +4
    -0
      config/configuration.yml.example

+ 21
- 0
app/libs/trace.rb View File

@@ -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

+ 37
- 0
app/services/trace/add_user_service.rb View File

@@ -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

+ 33
- 0
app/services/trace/check_result_service.rb View File

@@ -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


+ 36
- 0
app/services/trace/check_service.rb View File

@@ -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


+ 143
- 0
app/services/trace/client_service.rb View File

@@ -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

+ 29
- 0
app/services/trace/login_service.rb View File

@@ -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

+ 26
- 0
app/services/trace/pdf_report_service.rb View File

@@ -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

+ 25
- 0
app/services/trace/reload_check_service.rb View File

@@ -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

+ 4
- 0
config/configuration.yml.example View File

@@ -62,6 +62,10 @@ default: &default
write_domain: ''
read_domain: ''
base_url: ''
trace:
domain: ''
base_url: ''

production:
<<: *default


Loading…
Cancel
Save