class ApplicationService include Callable Error = Class.new(StandardError) def regix_emoji content " " if content.blank? regex = /[^a-zA-Z0-9\u4E00-\u9FFF]/ content.gsub(regex, '') end protected def try_lock(key) raise Error, "请稍后再试!" unless $redis_cache.set(key, 1, nx: true, ex: 60.seconds) end def unlock(key) $redis_cache.del(key) end private def strip(str) str.to_s.strip.presence end def str_to_boolean str ActiveModel::Type::Boolean.new.cast str end # params: params from index.js page def create_repo_on_blockchain(params, project) username = params['user_id'].to_s token_name = project.id.to_s total_supply = params['blockchain_token_all'].to_i token_balance = [[username, params['blockchain_init_token'].to_i]] params = { "request-type": "create repo", "username": username, "token_name": token_name, "total_supply": total_supply, "token_balance": token_balance }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] != 0 raise "区块链接口请求失败." end end def transfer_balance_on_blockchain(payer, payee, token_name, amount) params = { "request-type": "transfer amount", "payer": payer, "payee": payee, "token_name": token_name, "amount": amount }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 5 or resp_body['status'] == 106 or resp_body['status'] == 105 raise resp_body['message'] elsif resp_body['status'] != 0 raise "区块链接口请求失败." else end end def lock_balance_on_blockchain(username, tokenname, amount) params = { "request-type": "lock user balance", "username": username, "token_name": tokenname, "amount": amount }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 5 or resp_body['status'] == 106 or resp_body['status'] == 103 raise resp_body['message'] elsif resp_body['status'] != 0 raise "区块链接口请求失败." else end end def unlock_balance_on_blockchain(username, tokenname, amount) params = { "request-type": "unlock user balance", "username": username, "token_name": tokenname, "amount": amount }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 5 or resp_body['status'] == 106 or resp_body['status'] == 104 raise resp_body['message'] elsif resp_body['status'] != 0 raise "区块链接口请求失败." else end end def push_activity_2_blockchain(activity_type, model) if activity_type == "issue_create" project_id = model['project_id'] project = Project.find(project_id) if project['use_blockchain'] == 0 || project['use_blockchain'] == false # 无需执行上链操作 return true end id = model['id'] owner_id = project['user_id'] owner = User.find(owner_id) ownername = owner['login'] identifier = project['identifier'] author_id = project['user_id'] author = User.find(author_id) username = author['login'] action = 'opened' title = model['subject'] content = model['description'] created_at = model['created_on'] updated_at = model['updated_on'] # 调用区块链接口 params = { "request-type": "upload issue info", "issue_id": "gitlink-" + id.to_s, "repo_id": "gitlink-" + project_id.to_s, "issue_number": 0, # 暂时不需要改字段 "reponame": identifier, "ownername": ownername, "username": username, "action": action, "title": title, "content": content, "created_at": created_at, "updated_at": updated_at }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 10 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end elsif activity_type == "issue_comment_create" issue_comment_id = model['id'] issue_id = model['journalized_id'] parent_id = model['parent_id'].nil? ? "" : model['parent_id'] issue = Issue.find(issue_id) issue_classify = issue['issue_classify'] # issue或pull_request project_id = issue['project_id'] project = Project.find(project_id) if project['use_blockchain'] == 0 || project['use_blockchain'] == false # 无需执行上链操作 return end identifier = project['identifier'] owner_id = project['user_id'] owner = User.find(owner_id) ownername = owner['login'] author_id = model['user_id'] author = User.find(author_id) username = author['login'] action = 'created' content = model['notes'] created_at = model['created_on'] if issue_classify == "issue" params = { "request-type": "upload issue comment info", "issue_comment_id": "gitlink-" + issue_comment_id.to_s, "issue_comment_number": 0, # 暂时不需要 "issue_number": 0, # 暂时不需要 "issue_id": "gitlink-" + issue_id.to_s, "repo_id": "gitlink-" + project.id.to_s, "parent_id": parent_id.to_s, "reponame": identifier, "ownername": ownername, "username": username, "action": action, "content": content, "created_at": created_at, }.to_json elsif issue_classify == "pull_request" params = { "request-type": "upload pull request comment info", "pull_request_comment_id": "gitlink-" + issue_comment_id.to_s, "pull_request_comment_number": 0, # 不考虑该字段 "pull_request_number": 0, # 不考虑该字段 "pull_request_id": "gitlink-" + issue_id.to_s, "parent_id": parent_id.to_s, "repo_id": "gitlink-" + project.id.to_s, "reponame": identifier, "ownername": ownername, "username": username, "action": action, "content": content, "created_at": created_at, }.to_json end # 调用区块链接口 resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 10 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end elsif activity_type == "pull_request_create" # 调用区块链接口 project_id = model['project_id'] project = Project.find(project_id) if project['use_blockchain'] == 0 || project['use_blockchain'] == false # 无需执行上链操作 return end pull_request_id = model['id'] identifier = project['identifier'] owner_id = project['user_id'] owner = User.find(owner_id) ownername = owner['login'] action = 'opened' title = model['title'] content = model['body'] source_branch = model['head'] source_repo_id = model['fork_project_id'].nil? ? project_id : model['fork_project_id'] target_branch = model['base'] target_repo_id = project_id author_id = model['user_id'] author = User.find(author_id) username = author['login'] created_at = model['created_at'] updated_at = model['updated_at'] # 查询pull request对应的commit信息 commits = Gitea::PullRequest::CommitsService.call(ownername, identifier, model['gitea_number']) if commits.nil? raise Error, "区块链接口请求失败" # 获取pr中变更的commit信息失败 end commit_shas = [] commits.each do |c| commit_shas << c["Sha"] end params = { "request-type": "upload pull request info", "pull_request_id": "gitlink-" + pull_request_id.to_s, "pull_request_number": 0, # trustie没有该字段 "repo_id": "gitlink-" + project_id.to_s, "ownername": ownername, "reponame": identifier, "username": username, "action": action, "title": title, "content": content, "source_branch": source_branch, "target_branch": target_branch, "reviewers": [], # trustie没有该字段 "commit_shas": commit_shas, "merge_user": "", # trustie没有该字段 "created_at": created_at, "updated_at": updated_at }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 9 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end elsif activity_type == "pull_request_merge" # 调用区块链接口 project_id = model['project_id'] project = Project.find(project_id) if project['use_blockchain'] == 0 || project['use_blockchain'] == false # 无需执行上链操作 return end pull_request_id = model['id'] identifier = project['identifier'] owner_id = project['user_id'] owner = User.find(owner_id) ownername = owner['login'] action = 'merged' created_at = model['created_at'] updated_at = model['updated_at'] # 查询pull request对应的commit信息 commits = Gitea::PullRequest::CommitsService.call(ownername, identifier, model['gitea_number']) if commits.nil? raise Error, "区块链接口请求失败" # 获取pr中变更的commit信息失败 end commit_shas = [] commits.each do |c| commit_shas << c["Sha"] end # 将pull request相关信息写入链上 params = { "request-type": "upload pull request info", "pull_request_id": "gitlink-" + pull_request_id.to_s, "pull_request_number": 0, # trustie没有该字段 "repo_id": "gitlink-" + project_id.to_s, "ownername": ownername, "reponame": identifier, "username": username, "action": action, "title": title, "content": content, "source_branch": source_branch, "target_branch": target_branch, "reviewers": [], # trustie没有该字段 "commit_shas": commit_shas, "merge_user": "", # trustie没有该字段 "created_at": created_at, "updated_at": updated_at }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 9 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end # 将commit相关信息写入链上 commit_shas.each do |commit_sha| commit_diff = Gitea::Commit::DiffService.call(ownername, identifier, commit_sha, owner['gitea_token']) commit = Gitea::Commit::InfoService.call(ownername, identifier, commit_sha, owner['gitea_token']) params = { "request-type": "upload commit info", "commit_hash": commit_sha, "repo_id": "gitlink-" + project_id.to_s, "author": commit['commit']['author']['name'], "author_email": commit['commit']['author']['email'], "committer": commit['commit']['committer']['name'], "committer_email": commit['commit']['committer']['email'], "author_time": commit['commit']['author']['date'], "committer_time": commit['commit']['committer']['date'], "content": commit['commit']['message'], "commit_diff": commit_diff['Files'].to_s }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 7 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end end elsif activity_type == "pull_request_refuse" # 调用区块链接口 project_id = model['project_id'] project = Project.find(project_id) if project['use_blockchain'] == 0 || project['use_blockchain'] == false # 无需执行上链操作 return true end pull_request_id = model['id'] identifier = project['identifier'] owner_id = project['user_id'] owner = User.find(owner_id) ownername = owner['login'] action = 'refused' # 将pull request相关信息写入链上 params = { "request-type": "upload pull request info", "pull_request_id": "gitlink-" + pull_request_id.to_s, "pull_request_number": 0, # trustie没有该字段 "repo_id": "gitlink-" + project_id.to_s, "ownername": ownername, "reponame": identifier, "username": username, "action": action, "title": title, "content": content, "source_branch": source_branch, "target_branch": target_branch, "reviewers": [], # trustie没有该字段 "commit_shas": commit_shas, "merge_user": "", # trustie没有该字段 "created_at": created_at, "updated_at": updated_at }.to_json resp_body = Blockchain::InvokeBlockchainApi.call(params) if resp_body['status'] == 9 raise Error, resp_body['message'] elsif resp_body['status'] != 0 raise Error, "区块链接口请求失败." end end end def phone_mail_type value value =~ /^1\d{10}$/ ? 1 : 0 end end