From da9d268e049e2fd1c0c0e51e9fcf60934a2111a6 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Tue, 29 Dec 2020 12:45:31 +0800 Subject: [PATCH 01/36] fix issue #43166 --- app/controllers/accounts_controller.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index afa35a6ac..f9f7f76c2 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -151,8 +151,18 @@ class AccountsController < ApplicationController if interactor.success? gitea_user = interactor.result result = Gitea::User::GenerateTokenService.new(login, params[:password]).call - @user.gitea_token = result['sha1'] - @user.gitea_uid = gitea_user['id'] + if !result['sha1'].nil?'' + @user.gitea_token = result['sha1'] + else + @user.gitea_token = JSON.parse(result.body)['sha1'] # 出现了返回结果为body字段json格式的情况 + end + + if !gitea_user['id'].nil? + @user.gitea_uid = gitea_user['id'] + else + @user.gitea_uid = JSON.parse(gitea_user.body)['id'] + end + if @user.save! UserExtension.create!(user_id: @user.id) successful_authentication(@user) From 213c24892dc41da463aec0b4840a8373dd6ff8f1 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Wed, 30 Dec 2020 16:14:27 +0800 Subject: [PATCH 02/36] add use_blockchain column into table: projects --- db/migrate/20201230070048_add_use_blockchain_to_projects.rb | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 db/migrate/20201230070048_add_use_blockchain_to_projects.rb diff --git a/db/migrate/20201230070048_add_use_blockchain_to_projects.rb b/db/migrate/20201230070048_add_use_blockchain_to_projects.rb new file mode 100644 index 000000000..f7e2fdde0 --- /dev/null +++ b/db/migrate/20201230070048_add_use_blockchain_to_projects.rb @@ -0,0 +1,5 @@ +class AddUseBlockchainToProjects < ActiveRecord::Migration[5.2] + def change + add_column :projects, :use_blockchain, :boolean, default: 0 + end +end From 27b3bdc97b82072229023f8beda3e5258d2ef5a6 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Wed, 30 Dec 2020 16:16:44 +0800 Subject: [PATCH 03/36] add two columns into permits, namely private and use_blockchain --- app/controllers/projects_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 0a26110d6..e19e8a04b 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -163,7 +163,7 @@ class ProjectsController < ApplicationController private def project_params params.permit(:user_id, :name, :description, :repository_name, - :project_category_id, :project_language_id, :license_id, :ignore_id) + :project_category_id, :project_language_id, :license_id, :ignore_id, :private, :blockchain) end def mirror_params From 4c9df8c8302de2629aba198b7f65385939de86ab Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Wed, 30 Dec 2020 16:17:23 +0800 Subject: [PATCH 04/36] add column use_blockchain into attrs --- app/forms/projects/create_form.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/forms/projects/create_form.rb b/app/forms/projects/create_form.rb index 39c372309..fd303f61c 100644 --- a/app/forms/projects/create_form.rb +++ b/app/forms/projects/create_form.rb @@ -1,7 +1,7 @@ class Projects::CreateForm < BaseForm REPOSITORY_NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 attr_accessor :user_id, :name, :description, :repository_name, :project_category_id, - :project_language_id, :ignore_id, :license_id, :private + :project_language_id, :ignore_id, :license_id, :private, :blockchain validates :user_id, :name, :description,:repository_name, :project_category_id, :project_language_id, presence: true From 99b631ced3efe8919fbbc563d663728a56ca5707 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Wed, 30 Dec 2020 16:18:46 +0800 Subject: [PATCH 05/36] add function repo_use_blockchain to get param from front end form --- app/services/projects/create_service.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index dc14d10d0..0cb100734 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -36,7 +36,8 @@ class Projects::CreateService < ApplicationService is_public: repo_is_public, ignore_id: params[:ignore_id], license_id: params[:license_id], - identifier: params[:repository_name] #新增,hs + identifier: params[:repository_name], #新增,hs + use_blockchain: repo_use_blockchain # 新增,zxh } end @@ -55,4 +56,8 @@ class Projects::CreateService < ApplicationService def repo_is_public params[:private].blank? ? true : !params[:private] end + + def repo_use_blockchain + params[:blockchain].blank? ? false : params[:blockchain] + end end From 904ac86c86bb3d534ee3079837e9df1b5a62551f Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Wed, 30 Dec 2020 16:24:32 +0800 Subject: [PATCH 06/36] add column use_blockchain --- app/models/project.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 887a6952c..037b24cdb 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -52,6 +52,7 @@ # open_devops_count :integer default("0") # recommend :boolean default("0") # platform :integer default("0") +# use_blockchain :boolean default("0") # # Indexes # @@ -68,6 +69,8 @@ # index_projects_on_updated_on (updated_on) # + + class Project < ApplicationRecord include Matchable include Publicable @@ -108,7 +111,7 @@ class Project < ApplicationRecord has_one :project_detail, dependent: :destroy after_save :check_project_members - scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)} + scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on, :use_blockchain)} scope :no_anomory_projects, -> {where("projects.user_id is not null and projects.user_id != ?", 2)} scope :recommend, -> { visible.project_statics_select.where(recommend: true) } From c11cbf738c29a945b9d24c2634e3c26ac05b54c7 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 31 Dec 2020 20:27:29 +0800 Subject: [PATCH 07/36] add this class to read blockchain configuration --- app/libs/blockchain.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/libs/blockchain.rb diff --git a/app/libs/blockchain.rb b/app/libs/blockchain.rb new file mode 100644 index 000000000..e2c7804aa --- /dev/null +++ b/app/libs/blockchain.rb @@ -0,0 +1,20 @@ +class Blockchain + class << self + def blockchain_config + blockchain_config = {} + + begin + config = Rails.application.config_for(:configuration).symbolize_keys! + blockchain_config = config[:blockchain].symbolize_keys! + raise 'blockchain config missing' if blockchain_config.blank? + rescue => ex + raise ex if Rails.env.production? + + puts %Q{\033[33m [warning] blockchain config or configuration.yml missing, + please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} + blockchain_config = {} + end + blockchain_config + end + end +end \ No newline at end of file From 2395d4ef5ec280794486272fc47949640ba2cfd9 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 31 Dec 2020 20:27:42 +0800 Subject: [PATCH 08/36] add blockchain api url --- config/configuration.yml.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 823d8547e..df3c57380 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -49,6 +49,8 @@ default: &default access_key_secret: '_Trustie_10010' domain: 'https://testgitea.trustie.net' base_url: '/api/v1' + blockchain: + api_url: "blockchain api url" production: From f230c0d64006e099ee0b53e98d6a1beb33099811 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 31 Dec 2020 20:28:38 +0800 Subject: [PATCH 09/36] add common function for blockchain operation --- app/controllers/application_controller.rb | 87 ++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9d6efdcb6..1c9fd124e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -344,7 +344,7 @@ class ApplicationController < ActionController::Base User.current = User.find 8686 elsif params[:debug] == 'admin' logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - user = User.find 36480 + user = User.find 35 User.current = user cookies.signed[:user_id] = user.id end @@ -814,4 +814,89 @@ class ApplicationController < ActionController::Base HotSearchKeyword.add(keyword) end + + # author: zxh + # blockchain存证api + def invoke_blockchain_api(uri, params) + begin + uri = URI.parse(URI.encode(uri.strip)) + res = Net::HTTP.start(uri.host, uri.port) do |http| + req = Net::HTTP::Post.new(uri) + req['Content-Type'] = 'application/json' + req.body = params + http.request(req) + end + if res.code.to_i != 200 + puts '区块链接口请求失败.' + return false + else + res_body = JSON.parse(res.body) + if res_body.has_key?("data") && JSON.parse(res_body["data"]).has_key?("status") && JSON.parse(res_body["data"])['status'] == "Success" + else + puts '区块链接口请求出错.' + return false + end + end + + return true + rescue Exception => e + puts '区块链接口请求失败.' + return false + end + end + + # author: zxh + # blockchain相关项目活动调用函数 + # return true: 表示上链操作成功; return false: 表示上链操作失败 + 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 + # 无需执行上链操作 + return true + end + + id = model['id'] + + owner_id = project['user_id'] + owner = User.find(owner_id) + ownername = owner['login'] + reponame = project['name'] + + 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'] + + # 调用区块链接口 + param = { + "action": "executeContract", + "contractID": "RepositoryDB1", + "operation": "putIssue", + "arg": { + "issue_id": id, + "repo_id": project_id, + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "title": title, + "content": content, + "created_at": created_at, + "updated_at": updated_at + }.to_json + }.to_json + success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return success_blockchain + end + end + end From fcc17eb07bf50a78a4c86e0a6c846e9114abda14 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 31 Dec 2020 20:29:41 +0800 Subject: [PATCH 10/36] change create function for issue controller, add invocation of blockchain related function and add ActiveRecord Rollback operation --- app/controllers/issues_controller.rb | 73 ++++++++++++++++------------ 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index d6ee5a56a..fd824aed5 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -105,44 +105,55 @@ class IssuesController < ApplicationController elsif params[:subject].to_s.size > 255 normal_status(-1, "标题不能超过255个字符") else - issue_params = issue_send_params(params) + ActiveRecord::Base.transaction do + issue_params = issue_send_params(params) - @issue = Issue.new(issue_params) - if @issue.save! - if params[:attachment_ids].present? - params[:attachment_ids].each do |id| - attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) - unless attachment.blank? - attachment.container = @issue - attachment.author_id = current_user.id - attachment.description = "" - attachment.save + @issue = Issue.new(issue_params) + if @issue.save! + if params[:attachment_ids].present? + params[:attachment_ids].each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = @issue + attachment.author_id = current_user.id + attachment.description = "" + attachment.save + end end end - end - if params[:issue_tag_ids].present? - params[:issue_tag_ids].each do |tag| - IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) + if params[:issue_tag_ids].present? + params[:issue_tag_ids].each do |tag| + IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag) + end + end + if params[:assigned_to_id].present? + Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, + container_id: @issue.id, container_type: 'Issue', + parent_container_id: @project.id, parent_container_type: "Project", + tiding_type: 'issue', status: 0) end - end - if params[:assigned_to_id].present? - Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id, - container_id: @issue.id, container_type: 'Issue', - parent_container_id: @project.id, parent_container_type: "Project", - tiding_type: 'issue', status: 0) - end - #为悬赏任务时, 扣除当前用户的积分 - if params[:issue_type].to_s == "2" - post_to_chain("minus", params[:token].to_i, current_user.try(:login)) - end + #为悬赏任务时, 扣除当前用户的积分 + if params[:issue_type].to_s == "2" + post_to_chain("minus", params[:token].to_i, current_user.try(:login)) + end - @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") - render json: {status: 0, message: "创建成", id: @issue.id} - else - normal_status(-1, "创建失败") + @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") + + # author: zxh + # 调用上链API + success_blockchain = push_activity_2_blockchain("issue_create", @issue) + if success_blockchain == false + normal_status(-1, "创建失败") + raise ActiveRecord::Rollback + else + render json: {status: 0, message: "创建成", id: @issue.id} + end + else + normal_status(-1, "创建失败") + raise ActiveRecord::Rollback + end end - end end From 43374c80196c06b7e041e2b0e1a10093c46c3c06 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Sun, 3 Jan 2021 17:07:05 +0800 Subject: [PATCH 11/36] add gitea service for commit --- app/services/gitea/commit/diff_service.rb | 40 +++++++++++++++++++++++ app/services/gitea/commit/info_service.rb | 40 +++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 app/services/gitea/commit/diff_service.rb create mode 100644 app/services/gitea/commit/info_service.rb diff --git a/app/services/gitea/commit/diff_service.rb b/app/services/gitea/commit/diff_service.rb new file mode 100644 index 000000000..67abd39e9 --- /dev/null +++ b/app/services/gitea/commit/diff_service.rb @@ -0,0 +1,40 @@ +# get the diff info for the commit +class Gitea::Commit::DiffService < Gitea::ClientService + attr_reader :owner, :repo, :sha, :token + + # GET /repos/{owner}/{repo}/commits/{sha}/diff + # owner: 用户 + # repo: 仓库名称/标识 + # sha: commit唯一标识 + # eg: + # Gitea::Commit::DiffService.call('jasder', 'repo_identifier', 'sha value') + def initialize(owner, repo, sha, token=nil) + @owner = owner + @repo = repo + @sha = sha + @token = token + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: owner) + end + + def url + "/repos/#{owner}/#{repo}/commits/#{sha}/diff".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end +end diff --git a/app/services/gitea/commit/info_service.rb b/app/services/gitea/commit/info_service.rb new file mode 100644 index 000000000..8598f4e81 --- /dev/null +++ b/app/services/gitea/commit/info_service.rb @@ -0,0 +1,40 @@ +# get the detailed info of the commit +class Gitea::Commit::InfoService < Gitea::ClientService + attr_reader :owner, :repo, :sha, :token + + # GET /repos/{owner}/{repo}/commits/{sha}/diff + # owner: 用户 + # repo: 仓库名称/标识 + # sha: commit唯一标识 + # eg: + # Gitea::Commit::InfoService.call('jasder', 'repo_identifier', 'sha value') + def initialize(owner, repo, sha, token=nil) + @owner = owner + @repo = repo + @sha = sha + @token = token + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: owner) + end + + def url + "/repos/#{owner}/#{repo}/git/commits/#{sha}".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end +end From 6aef8e19c7821990887371db69afb2883947688e Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Sun, 3 Jan 2021 17:08:13 +0800 Subject: [PATCH 12/36] modify common function for update blockchain --- app/controllers/application_controller.rb | 245 ++++++++++++++++++++++ 1 file changed, 245 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c9fd124e..ee47563c4 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -896,6 +896,251 @@ class ApplicationController < ActionController::Base }.to_json success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) return success_blockchain + + 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 + # 无需执行上链操作 + return true + end + + reponame = project['name'] + 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" + param = { + "action": "executeContract", + "contractID": "RepositoryDB1", + "operation": "putIssueComment", + "arg": { + "issue_comment_id": issue_comment_id, + "issue_id": issue_id, + "parent_id": parent_id, + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "content": content, + "created_at": created_at, + }.to_json + }.to_json + elsif issue_classify == "pull_request" + param = { + "action": "executeContract", + "contractID": "RepositoryDB0", + "operation": "putPullRequestComment", + "arg": { + "pull_request_comment_id": issue_comment_id, + "pull_request_id": issue_id, + "parent_id": parent_id, + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "content": content, + "created_at": created_at, + }.to_json + }.to_json + end + + # 调用区块链接口 + success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return success_blockchain + elsif activity_type == "pull_request_create" + # 调用区块链接口 + project_id = model['project_id'] + project = Project.find(project_id) + if project['use_blockchain'] == 0 + # 无需执行上链操作 + return true + end + + pull_request_id = model['id'] + reponame = project['name'] + 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, reponame, model['gpid']) + commit_shas = [] + commits.each do |c| + commit_shas << c["Sha"] + end + param = { + "action": "executeContract", + "contractID": "RepositoryDB0", + "operation": "putPullRequest", + "arg": { + "pull_request_id": pull_request_id, + "repo_id": project_id, + "ownername": ownername, + "reponame": reponame, + "username": username, + "action": action, + "title": title, + "content": content, + "source_branch": source_branch, + "target_branch": target_branch, + "commit_shas": commit_shas, + "created_at": created_at, + "updated_at": updated_at + }.to_json + }.to_json + success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return success_blockchain + elsif activity_type == "pull_request_merge" + + # 调用区块链接口 + project_id = model['project_id'] + project = Project.find(project_id) + if project['use_blockchain'] == 0 + # 无需执行上链操作 + return true + end + + pull_request_id = model['id'] + reponame = project['name'] + owner_id = project['user_id'] + owner = User.find(owner_id) + ownername = owner['login'] + + action = 'merged' + + # 查询pull request对应的commit信息 + commits = Gitea::PullRequest::CommitsService.call(ownername, reponame, model['gpid']) + commit_shas = [] + commits.each do |c| + commit_shas << c["Sha"] + end + + # 将pull request相关信息写入链上 + param = { + "action": "executeContract", + "contractID": "RepositoryDB0", + "operation": "putPullRequest", + "arg": { + "pull_request_id": pull_request_id, + "repo_id": project_id, + "ownername": ownername, + "reponame": reponame, + "username": username, + "action": action, + "title": title, + "content": content, + "source_branch": source_branch, + "target_branch": target_branch, + "commit_shas": commit_shas, + "created_at": created_at, + "updated_at": updated_at + }.to_json + }.to_json + success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + + + # 将commit相关信息写入链上 + commit_shas.each do |commit_sha| + commit_diff = Gitea::Commit::DiffService.call(ownername, reponame, commit_sha) + commit = Gitea::Commit::InfoService.call(ownername, reponame, commit_sha) + param = { + "action": "executeContract", + "contractID": "RepositoryDB1", + "operation": "putCommit", + "arg": { + "commit_hash": commit_sha, + "repo_id": project_id, + "author": commit['author']['login'], + "author_email": commit['author']['email'], + "committer": commit['committer']['login'], + "committer_email": commit['committer']['email'], + "author_time": commit['commit']['author']['date'], + "committer_time": commit['commit']['committer']['date'], + "message": commit['commit']['message'], + "diff": commit_diff['Files'] + }.to_json + }.to_json + success_blockchain_commit = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + success_blockchain = success_blockchain & success_blockchain_commit + end + return success_blockchain + + elsif activity_type == "pull_request_refuse" + + # 调用区块链接口 + project_id = model['project_id'] + project = Project.find(project_id) + if project['use_blockchain'] == 0 + # 无需执行上链操作 + return true + end + + pull_request_id = model['id'] + reponame = project['name'] + owner_id = project['user_id'] + owner = User.find(owner_id) + ownername = owner['login'] + + action = 'refused' + + # 将pull request相关信息写入链上 + param = { + "action": "executeContract", + "contractID": "RepositoryDB0", + "operation": "putPullRequest", + "arg": { + "pull_request_id": pull_request_id, + "repo_id": project_id, + "ownername": ownername, + "reponame": reponame, + "username": username, + "action": action, + "title": title, + "content": content, + "source_branch": source_branch, + "target_branch": target_branch, + "created_at": created_at, + "updated_at": updated_at + }.to_json + }.to_json + success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return success_blockchain end end From f4f1aef36527ae87ca4f53b1d3f34d79a9f90bfb Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Sun, 3 Jan 2021 17:08:44 +0800 Subject: [PATCH 13/36] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=96=87=E5=AD=97=EF=BC=8C=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E5=8A=9F=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/issues_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index fd824aed5..eb0ca5950 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -147,7 +147,7 @@ class IssuesController < ApplicationController normal_status(-1, "创建失败") raise ActiveRecord::Rollback else - render json: {status: 0, message: "创建成", id: @issue.id} + render json: {status: 0, message: "创建成功", id: @issue.id} end else normal_status(-1, "创建失败") From cbb666052cfa552be77820394d367162f234e739 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Sun, 3 Jan 2021 17:09:19 +0800 Subject: [PATCH 14/36] add blockchain operation after comments --- app/controllers/journals_controller.rb | 58 ++++++++++++++++---------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/app/controllers/journals_controller.rb b/app/controllers/journals_controller.rb index 6917974b8..758e81eee 100644 --- a/app/controllers/journals_controller.rb +++ b/app/controllers/journals_controller.rb @@ -21,32 +21,44 @@ class JournalsController < ApplicationController if notes.blank? normal_status(-1, "评论内容不能为空") else - journal_params = { - journalized_id: @issue.id , - journalized_type: "Issue", - user_id: current_user.id , - notes: notes.to_s.strip, - parent_id: params[:parent_id] - } - journal = Journal.new journal_params - if journal.save - if params[:attachment_ids].present? - params[:attachment_ids].each do |id| - attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) - unless attachment.blank? - attachment.container = journal - attachment.author_id = current_user.id - attachment.description = "" - attachment.save + ActiveRecord::Base.transaction do + journal_params = { + journalized_id: @issue.id , + journalized_type: "Issue", + user_id: current_user.id , + notes: notes.to_s.strip, + parent_id: params[:parent_id] + } + journal = Journal.new journal_params + if journal.save + if params[:attachment_ids].present? + params[:attachment_ids].each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = journal + attachment.author_id = current_user.id + attachment.description = "" + attachment.save + end end end - end - # @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "journal") - render :json => { status: 0, message: "评论成功", id: journal.id} - # normal_status(0, "评论成功") - else - normal_status(-1, "评论失败") + # author: zxh + # 调用上链API + success_blockchain = push_activity_2_blockchain("issue_comment_create", journal) + if success_blockchain == false + normal_status(-1, "评论失败") + raise ActiveRecord::Rollback + else + render json: {status: 0, message: "评论成功", id: journal.id} + end + + # @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "journal") + # normal_status(0, "评论成功") + else + normal_status(-1, "评论失败") + raise ActiveRecord::Rollback + end end end end From c5b24a344718dda89acb80410f717def5eaae414 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Sun, 3 Jan 2021 17:09:54 +0800 Subject: [PATCH 15/36] add operation for pull request create/merge/refuse --- app/controllers/pull_requests_controller.rb | 38 ++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 1699cf608..6551bf9a2 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -54,7 +54,17 @@ class PullRequestsController < ApplicationController @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) if @gitea_pull_request[:status] == :success @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"]) - render_ok + + # author: zxh + # 调用上链API + success_blockchain = push_activity_2_blockchain("pull_request_create", @pull_request) + if success_blockchain == false + render_error("create pull request error: cannot save to blockchain") + raise ActiveRecord::Rollback + else + render_ok + end + else render_error("create pull request error: #{@gitea_pull_request[:status]}") raise ActiveRecord::Rollback @@ -119,7 +129,17 @@ class PullRequestsController < ApplicationController begin @pull_request.update(status: 2) @pull_request.issue.update(status_id: 5) - normal_status(1, "已拒绝") + + # author: zxh + # 调用上链API + success_blockchain = push_activity_2_blockchain("pull_request_refuse", @pull_request) + if success_blockchain == false + normal_status(-1, "拒绝失败") + raise ActiveRecord::Rollback + else + normal_status(1, "已拒绝") + end + rescue => e normal_status(-1, e.message) raise ActiveRecord::Rollback @@ -152,10 +172,20 @@ class PullRequestsController < ApplicationController } merge_pr = Gitea::PullRequest::MergeService.call(current_user.gitea_token, @project.owner.login, @repository.try(:identifier), @pull_request.try(:gpid), requests_params) - if @pull_request.update_attribute(:status, 1) && merge_pr[:status].to_i == 200 + if merge_pr.status.to_i == 200 && @pull_request.update_attribute(:status, 1) @pull_request&.project_trends&.update_all(action_type: "close") @issue&.custom_journal_detail("merge", "", "该合并请求已被合并", current_user&.id) - normal_status(1, "合并成功") + + # author: zxh + # 调用上链API + success_blockchain = push_activity_2_blockchain("pull_request_merge", @pull_request) + if success_blockchain == false + normal_status(-1, "合并失败") + raise ActiveRecord::Rollback + else + normal_status(1, "合并成功") + end + else normal_status(-1, "合并失败") end From 3ad45f86f2993703cff9f45ea6deab6c681b1858 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Fri, 23 Apr 2021 21:36:22 +0800 Subject: [PATCH 16/36] change blockchain related functions --- Gemfile | 2 + Gemfile.lock | 4 +- app/controllers/application_controller.rb | 31 ++- app/controllers/blockchain/base_controller.rb | 48 ++++ app/controllers/blockchains_controller.rb | 7 + app/controllers/issues_controller.rb | 19 +- app/controllers/projects_controller.rb | 2 +- app/controllers/pull_requests_controller.rb | 61 +++-- app/controllers/users_controller.rb | 220 ++++++++++++++++++ app/forms/projects/create_form.rb | 3 +- app/helpers/tag_chosen_helper.rb | 2 +- app/models/blockchain_trade.rb | 18 ++ app/models/issue.rb | 2 +- app/models/laboratory.rb | 5 + app/models/laboratory_setting.rb | 4 + app/queries/application_query.rb | 57 +++++ app/queries/blockchain/balance_query.rb | 28 +++ .../blockchain/balance_query_one_project.rb | 13 ++ app/queries/projects/list_my_query.rb | 6 + app/services/application_service.rb | 91 ++++++++ app/services/blockchain/create_issue.rb | 29 +++ app/services/blockchain/create_trade.rb | 29 +++ app/services/blockchain/fix_issue.rb | 29 +++ app/services/blockchain/transfer_service.rb | 35 +++ app/services/gitea/client_service.rb | 4 +- .../gitea/repository/create_service.rb | 2 +- app/services/projects/create_service.rb | 4 + app/services/repositories/create_service.rb | 3 +- config/routes.rb | 14 +- ...20210420043449_create_blockchain_trades.rb | 11 + ...072647_add_user_id_to_blockchain_trades.rb | 5 + ...20131153_add_state_to_blockchain_trades.rb | 5 + ...31244_add_user_id2_to_blockchain_trades.rb | 5 + ...3328_add_token_num_to_blockchain_trades.rb | 5 + ...81736_add_blockchain_token_num_to_issue.rb | 5 + public/react/build | 1 + spec/models/blockchain_trade_spec.rb | 5 + 37 files changed, 784 insertions(+), 30 deletions(-) create mode 100644 app/controllers/blockchain/base_controller.rb create mode 100644 app/controllers/blockchains_controller.rb create mode 100644 app/models/blockchain_trade.rb create mode 100644 app/queries/blockchain/balance_query.rb create mode 100644 app/queries/blockchain/balance_query_one_project.rb create mode 100644 app/services/blockchain/create_issue.rb create mode 100644 app/services/blockchain/create_trade.rb create mode 100644 app/services/blockchain/fix_issue.rb create mode 100644 app/services/blockchain/transfer_service.rb create mode 100644 db/migrate/20210420043449_create_blockchain_trades.rb create mode 100644 db/migrate/20210420072647_add_user_id_to_blockchain_trades.rb create mode 100644 db/migrate/20210420131153_add_state_to_blockchain_trades.rb create mode 100644 db/migrate/20210420131244_add_user_id2_to_blockchain_trades.rb create mode 100644 db/migrate/20210421043328_add_token_num_to_blockchain_trades.rb create mode 100644 db/migrate/20210421081736_add_blockchain_token_num_to_issue.rb create mode 160000 public/react/build create mode 100644 spec/models/blockchain_trade_spec.rb diff --git a/Gemfile b/Gemfile index cd6c4b917..abd202e92 100644 --- a/Gemfile +++ b/Gemfile @@ -125,3 +125,5 @@ gem 'request_store' gem 'harmonious_dictionary', '~> 0.0.1' gem 'parallel', '~> 1.19', '>= 1.19.1' + +gem 'alipay', '~> 0.15.1' diff --git a/Gemfile.lock b/Gemfile.lock index a6beea407..36896d5a9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -52,6 +52,7 @@ GEM activerecord (>= 3.0) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) + alipay (0.15.2) ancestry (3.0.7) activerecord (>= 3.2.0) annotate (2.6.5) @@ -424,6 +425,7 @@ DEPENDENCIES active_decorator acts-as-taggable-on (~> 6.0) acts_as_list + alipay (~> 0.15.1) ancestry annotate (~> 2.6.0) awesome_print @@ -491,4 +493,4 @@ DEPENDENCIES wkhtmltopdf-binary BUNDLED WITH - 2.1.4 + 2.2.3 diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ee47563c4..97c5f0eb7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -817,6 +817,34 @@ class ApplicationController < ActionController::Base # author: zxh # blockchain存证api + #def invoke_blockchain_api(uri, params) + # begin + # uri = URI.parse(URI.encode(uri.strip)) + # res = Net::HTTP.start(uri.host, uri.port) do |http| + # req = Net::HTTP::Post.new(uri) + # req['Content-Type'] = 'application/json' + # req.body = params + # http.request(req) + # end + # if res.code.to_i != 200 + # puts '区块链接口请求失败.' + # return false + # else + # res_body = JSON.parse(res.body) + # if res_body.has_key?("data") && JSON.parse(res_body["data"]).has_key?("status") && JSON.parse(res_body["data"])['status'] == "Success" + # else + # puts '区块链接口请求出错.' + # return false + # end + # end + # + # return true + # rescue Exception => e + # puts '区块链接口请求失败.' + # return false + # end + #end + def invoke_blockchain_api(uri, params) begin uri = URI.parse(URI.encode(uri.strip)) @@ -831,7 +859,7 @@ class ApplicationController < ActionController::Base return false else res_body = JSON.parse(res.body) - if res_body.has_key?("data") && JSON.parse(res_body["data"]).has_key?("status") && JSON.parse(res_body["data"])['status'] == "Success" + if res_body.has_key?("status") && res_body["status"] == 0 else puts '区块链接口请求出错.' return false @@ -845,6 +873,7 @@ class ApplicationController < ActionController::Base end end + # author: zxh # blockchain相关项目活动调用函数 # return true: 表示上链操作成功; return false: 表示上链操作失败 diff --git a/app/controllers/blockchain/base_controller.rb b/app/controllers/blockchain/base_controller.rb new file mode 100644 index 000000000..406307309 --- /dev/null +++ b/app/controllers/blockchain/base_controller.rb @@ -0,0 +1,48 @@ +class Blockchain::BaseController < ApplicationController + + before_action :require_login + before_action :connect_to_ci_database, if: -> { current_user && !current_user.is_a?(AnonymousUser) && !current_user.devops_uninit? } + before_action :connect_to_ci_database, only: :load_repo + + + def load_repo + namespace = params[:owner] + id = params[:repo] || params[:id] + + @ci_user, @repo = Ci::Repo.find_with_namespace(namespace, id) + end + + private + def authorize_access_project! + unless @project.manager?(current_user) + return render_forbidden + end + end + + def authenticate_manager! + unless @project.manager?(current_user) + return render_forbidden + end + end + + def authenticate_admin! + return render_forbidden unless current_user.admin? + end + + def authorize_owner! + unless @project.owner?(current_user) + return render_forbidden + end + end + + def find_cloud_account + @cloud_account ||= current_user.ci_cloud_account + @cloud_account.blank? ? nil : @cloud_account + end + + def load_ci_user + @ci_user ||= Ci::User.find_by(user_login: params[:owner]) + @ci_user.blank? ? raise("未找到相关的记录") : @ci_user + end + +end \ No newline at end of file diff --git a/app/controllers/blockchains_controller.rb b/app/controllers/blockchains_controller.rb new file mode 100644 index 000000000..4f0d78ea4 --- /dev/null +++ b/app/controllers/blockchains_controller.rb @@ -0,0 +1,7 @@ +class BlockchainController < ApplicationController + + def get_issue_token_num + puts "pause" + end + +end \ No newline at end of file diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index eb0ca5950..679a57ef3 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -141,14 +141,22 @@ class IssuesController < ApplicationController @issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") # author: zxh - # 调用上链API - success_blockchain = push_activity_2_blockchain("issue_create", @issue) - if success_blockchain == false + # 扣除发起人的token + blockchain_result = Blockchain::CreateIssue.call(user_id: @issue.author_id, project_id: @issue.project_id, token_num: @issue.blockchain_token_num) + if blockchain_result = false normal_status(-1, "创建失败") raise ActiveRecord::Rollback else - render json: {status: 0, message: "创建成功", id: @issue.id} end + render json: {status: 0, message: "创建成功", id: @issue.id} + # 调用上链API + #success_blockchain = push_activity_2_blockchain("issue_create", @issue) + #if success_blockchain == false + # normal_status(-1, "创建失败") + # raise ActiveRecord::Rollback + #else + # render json: {status: 0, message: "创建成功", id: @issue.id} + #end else normal_status(-1, "创建失败") raise ActiveRecord::Rollback @@ -468,7 +476,8 @@ class IssuesController < ApplicationController branch_name: params[:branch_name].to_s, issue_classify: "issue", author_id: current_user.id, - project_id: @project.id + project_id: @project.id, + blockchain_token_num: params[:blockchain_token_num] } end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index e19e8a04b..8c6b6c6f0 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -163,7 +163,7 @@ class ProjectsController < ApplicationController private def project_params params.permit(:user_id, :name, :description, :repository_name, - :project_category_id, :project_language_id, :license_id, :ignore_id, :private, :blockchain) + :project_category_id, :project_language_id, :license_id, :ignore_id, :private, :blockchain, :blockchain_token_all, :blockchain_init_token) end def mirror_params diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 6551bf9a2..1bc12da4f 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -57,13 +57,14 @@ class PullRequestsController < ApplicationController # author: zxh # 调用上链API - success_blockchain = push_activity_2_blockchain("pull_request_create", @pull_request) - if success_blockchain == false - render_error("create pull request error: cannot save to blockchain") - raise ActiveRecord::Rollback - else - render_ok - end + #success_blockchain = push_activity_2_blockchain("pull_request_create", @pull_request) + #if success_blockchain == false + # render_error("create pull request error: cannot save to blockchain") + # raise ActiveRecord::Rollback + #else + # render_ok + #end + render_ok else render_error("create pull request error: #{@gitea_pull_request[:status]}") @@ -178,14 +179,46 @@ class PullRequestsController < ApplicationController # author: zxh # 调用上链API - success_blockchain = push_activity_2_blockchain("pull_request_merge", @pull_request) - if success_blockchain == false - normal_status(-1, "合并失败") - raise ActiveRecord::Rollback - else - normal_status(1, "合并成功") - end + #success_blockchain = push_activity_2_blockchain("pull_request_merge", @pull_request) + #if success_blockchain == false + # normal_status(-1, "合并失败") + # raise ActiveRecord::Rollback + #else + # normal_status(1, "合并成功") + #end + # + # 查看是否fix了相关issue,如果fix就转账 + if params["fix_issue_id"].nil? || params["fix_issue_id"] == "" + else + issue = Issue.find_by(id: params["fix_issue_id"]) + if issue.nil? + normal_status(-1, "关联issue失败") + else + token_num = issue.blockchain_token_num + token_num = token_num.nil? ? 0 : token_num + owner = User.find_by(login: params["owner"]) + pr = PullRequest.find_by(id: params["pull_request"]["id"]) + if owner.nil? || pr.nil? + normal_status(-1, "关联issue失败") + else + project = Project.find_by(user_id: owner.id, name: params["project_id"]) + if project.nil? + normal_status(-1, "关联issue失败") + else + author_id = pr.user_id + result = Blockchain::FixIssue.call({user_id: author_id.to_s, project_id: project.id.to_s, token_num: token_num}) + if result == false + normal_status(-1, "关联issue失败") + else + # update issue to state 5 + issue.update(status_id: 5) + normal_status(1, "合并成功") + end + end + end + end + end else normal_status(-1, "合并失败") end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 63e65a38f..21acc5000 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -203,6 +203,226 @@ class UsersController < ApplicationController @projects = paginate(scope) end + + # query all projects with tokens by a user + def blockchain_balance + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + results = Blockchain::BalanceQuery.call(params, is_current_admin_user) + if results[:status] == 0 + @total_count = results[:projects].size + @projects = results[:projects] + else + @total_count = -1 + @projects = [] + end + + render json: { status: results[:status], projects: @projects, total_count: @total_count } + end + + # query one balance + def blockchain_balance_one_project + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + owner = User.find_by(login: params['owner_login']) + if owner.nil? + raise Error, "项目创建者无法找到" + else + p = Project.find_by(user_id: owner.id, name: params['project_name']) + results = Blockchain::BalanceQueryOneProject.call({"user_id": params['user_id'].to_i, "project_id": p.id.to_i}) + render json: { status: results[:status], balance: results[:balance]} + end + else + raise Error, '没有权限' + end + + end + + + def blockchain_transfer + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['payer_id'].to_i) + if is_current_admin_user + results = Blockchain::TransferService.call(params) + if results == true + render json: { status: 2 } # 重新查询余额 + else + raise Error, "转账失败" + end + else + raise Error, "缺少权限" + end + end + + # exchange money + def blockchain_exchange + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #require 'alipay' + ## setup the client to communicate with either production API or sandbox API + ## https://openapi.alipay.com/gateway.do (Production) + ## https://openapi.alipaydev.com/gateway.do (Sandbox) + #api_url = 'https://openapi.alipay.com/gateway.do' + # + ## setup your own credentials and certificates + #app_id = '2021002140631434' + #app_private_key="-----BEGIN RSA PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCPDsgc0n0RWRnbe9OMqtUbde8gu88OyjuZm8cJXeiSING18HX56C5zV4DsHQ6K9/JmQi/NYCc7/2Prh66Bei0L4Xm5TysJTPYi90+WlbJJESFF6fqULi8sSqZXUtaoMKRcUyeR144l2GQgXbZWBbVSQeZW5DqUDlurTF0I7vQ21wGqxQqBjQK8PSVw5hF+aIsNOfAY9M1tzdD5Jzo2Y3FJdsbXIJNMyhJJCZ+7KHFqma7lpjkXdCoyh/nOISkQdGtFI29gI94sqewI2AMU84uxuBIE3h90iLT+8xrd2dQKdBS7qfhQ3PgkBPVNs5jxsVBqSFdSFT6zcqFdHJzulCUJAgMBAAECggEAWocAGz0X5+J6emnhdSKluLrol85BORrAnHP3f/XtNouOKZQBFCPZQSQecUvx5/7/ZbZ8iXpPWahDkshJpaWq29nTLXDryvboyze1JZWVPKeaZqOp7htLvrt+h8PkEoq1d7cnUyMU0N4eflzPBaCXHXaWTGYgq5Bqcfvg48ZSxGBYeHt5WWU2+GW5fpsaVBBYkdyxxGMoy/bzYzGhvfSJkexqnl0XkAAODa02mu3WsHrzRid6Mf+3syYbq/MfUodU6Vng2tbCqwnWrHCyrD4RYl6rg1TKuAv2YAfBhLzwBxHYVC4SRqzjs+8AaOQoF+lCjr4JklPhEuRThzD31YwIAQKBgQDAg4S7ciMmxvbNxR+1eimoAYLLF9jPpPU6w3VFNPb4rDu4tX77bNf082YplfJX5TYtZKjKPKyYG87K6slGunyPL4AFRW81WPB9u1uP26dihyPCBSUE01jKRPPfRrQnnru5fpm8LL3L03V3yA6J+GyQ8wltRJJi1eBSSm+IWRsZewKBgQC+PBD9J1LYOEIVeK9KvN8BpkA1ZIkk//VuJaoGfVXn+1EzM1yFB05fnsEQkHFynisvuCIr7pH63HcdyffQhe1YOnw9iDCG1zPjsi5uTe9WAM0dnb7xdsaLPr/Q2LyoDOTN9344Qovy1AAnpWtGTn6omgHst5nZpp/mHOuBlKiqSwKBgBKRXM77fjpyPEGyfpFxW+0xYB0YirfUUDa/vWLUbfGkIwp4ruuvHtEoXLUsGjiyCdys9b6zxW3SWMqnhIxG1la1HSLlBInfryphVL52UBmnsSI4fs6NV+YCaocheaTMoYyNkmRc6F1tYsoPyJ80D7yXRFR+paPUvxMQzNsYxQ1bAoGAHd2uSSBQWFPUxCwzUQd/93FTaU6EXYO103okTGqG/ymsoN4ya0wvWMHCy8fxl64PV6mP69fDoV/Vb57SwjEUhyJ/eOWVwMWuhtPliDnCFn1/tmOao6wjFZ9fW/l6/OMxVMjDTy/bat8vuwm0YtBWAEBVhwV4KPyI5AasTqa5KCsCgYB/usnqhVx2zt+MxpBt2Q9Vxc0zXcZxMDs69UUdTY86gjcJyCFGe3bbumUcyfSJzIznC2hfFX5ZyS0oMwiAzWtslRMh9LRh3kofD/6BogL3RKOlBk3iekvQ8Gn0tbwk2Qzr4WJgfA7A4GTf5r7Y+bvOfazzsUQAfSK6nUTIlOj2Ew==\n-----END RSA PRIVATE KEY-----\n" + #alipay_public_key="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgHXLD1BshMymbqqtZVKNyo95FNfxzXzaw3P1eI0KeO6RaL+JzrWxzIBFfTjkWv/8WM9u/NcXMOFt2QO9q5KIDx6PkqjRDTd1hgP/cTgdjOHQqnVSihCrQDVCDBSOXIujC8Lk/P4pFVRhQkYeZqEb1qb8b/2tzTY8g9PKKBSCQv7SfgL2TBcpAVbb+9xdJ6VainC/wYGk8T+c+st1hXnuBJSS0m7LFxJOsYkNk0wbA0tfdZLrO3us2F7sjC9t4h/05nr+gSuDkzo+1kCEefYLqScexN+vnQiLoylp/C82wNiP6okxfhmHz3EcYfUqUyGTN/oFaFcPFPpUtFNS8jFV9QIDAQAB\n-----END PUBLIC KEY-----\n" + # + ## initialize a client to communicate with the Alipay API + #@alipay_client = Alipay::Client.new( + # url: api_url, + # app_id: app_id, + # app_private_key: app_private_key, + # alipay_public_key: alipay_public_key + #) + # + #return_result = @alipay_client.page_execute_url( + # method: 'alipay.trade.page.pay', + # biz_content: JSON.generate({ + # out_trade_no: '20210420104600', + # product_code: 'FAST_INSTANT_TRADE_PAY', + # total_amount: '0.01', + # subject: 'test' + # }, ascii_only: true), # ascii_only is important! + # timestamp: '2021-04-20 10:46:00' + #) + #render json: { pay_url: return_result } + # + + # 替代解决方案 + # 读取所有交易信息 + end + + def blockchain_create_trade + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + user_id = params['user_id'].to_i + project_id = params['project_id'].to_i + money = params['money'].to_f + #description = params['description'] + token_num = params['token_num'].to_i + # 锁仓 + result = Blockchain::CreateTrade.call({user_id: user_id, project_id: project_id, token_num: token_num}) + if result == false + raise Error, "创建交易失败" + else + bt = BlockchainTrade.new(user_id: user_id, project_id: project_id, token_num: token_num, money: money, state: 0) # state=0表示创建交易; state=1表示执行中; state=2表示执行完成 + bt.save() + status = 2 # 交易创建成功 + render json: { status: status } + end + else + raise Error, "没有权限" + end + end + + + def blockchain_get_trades + trades = BlockchainTrade.where(state: 0).all() + results = [] + trades.each do |t| + project_id = t.project_id + project = Project.find_by(id: project_id) + if !project.nil? + owner = User.find_by(id: project.user_id) + else + owner = nil + end + user_id = t.user_id + creator = User.find_by(id: user_id) + if project.nil? || owner.nil? || creator.nil? + else + results << [creator, owner, project, t] + end + end + render json: { results: results } + end + + def blockchain_trade + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + user_id2 = params['user_id2'].to_i + trade_id = params['trade_id'].to_i + BlockchainTrade.find(trade_id).update(user_id2: user_id2, state: 1) # state=1表示锁定了,等待线下卖家发货 + render json: {status: 2} # window.location.reload() + else + raise Error, "没有权限" + end + end + + + def blockchain_verify_trade + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + trade_id = params['trade_id'].to_i + BlockchainTrade.find(trade_id).update(state: 2) # state=2表示确认收货 + render json: {status: 2} # window.location.reload() + else + raise Error, "没有权限" + end + end + + def blockchain_get_verify_trades + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + trades = BlockchainTrade.where(state: 1).all() + results = [] + trades.each do |t| + project_id = t.project_id + project = Project.find_by(id: project_id) + if !project.nil? + owner = User.find_by(id: project.user_id) + else + owner = nil + end + user_id = t.user_id + creator = User.find_by(id: user_id) + user_id2 = t.user_id2 + buyer = User.find_by(id: user_id2) + if project.nil? || owner.nil? || creator.nil? || buyer.nil? + else + results << [creator, owner, project, t, buyer] + end + end + render json: { results: results } + else + raise Error, "没有权限" + end + end + + def blockchain_get_history_trades + is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + if is_current_admin_user + trades = BlockchainTrade.where(state: 2).all() + results = [] + trades.each do |t| + project_id = t.project_id + project = Project.find_by(id: project_id) + if !project.nil? + owner = User.find_by(id: project.user_id) + else + owner = nil + end + user_id = t.user_id + creator = User.find_by(id: user_id) + user_id2 = t.user_id2 + buyer = User.find_by(id: user_id2) + if project.nil? || owner.nil? || creator.nil? || buyer.nil? + else + results << [creator, owner, project, t, buyer] + end + end + render json: { results: results } + else + raise Error, "没有权限" + end + end + + + def blockchain_get_issue_token_num + issue_id = params["issue_id"]['orderId'].to_i + issue = Issue.find_by(id: issue_id) + render json: {"blockchain_token_num": issue.blockchain_token_num} + end + # TODO 其他平台登录时同步修改gitea平台对应用户的密码 # 该方法主要用于:别的平台初次部署对接forge平台,同步用户后,gitea平台对应的用户密码与forge平台用户密码不一致是问题 def sync_gitea_pwd diff --git a/app/forms/projects/create_form.rb b/app/forms/projects/create_form.rb index fd303f61c..4f4b4f771 100644 --- a/app/forms/projects/create_form.rb +++ b/app/forms/projects/create_form.rb @@ -1,7 +1,8 @@ class Projects::CreateForm < BaseForm REPOSITORY_NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 attr_accessor :user_id, :name, :description, :repository_name, :project_category_id, - :project_language_id, :ignore_id, :license_id, :private, :blockchain + :project_language_id, :ignore_id, :license_id, :private, + :blockchain, :blockchain_token_all, :blockchain_init_token validates :user_id, :name, :description,:repository_name, :project_category_id, :project_language_id, presence: true diff --git a/app/helpers/tag_chosen_helper.rb b/app/helpers/tag_chosen_helper.rb index afd51170d..f1bed85da 100644 --- a/app/helpers/tag_chosen_helper.rb +++ b/app/helpers/tag_chosen_helper.rb @@ -20,7 +20,7 @@ module TagChosenHelper "done_ratio": render_complete_percentage, "issue_tag": render_issue_tags(project), "issue_type": render_issue_species, - "all_issues": all_issues + "all_issues": all_issues, } end diff --git a/app/models/blockchain_trade.rb b/app/models/blockchain_trade.rb new file mode 100644 index 000000000..3d1f75975 --- /dev/null +++ b/app/models/blockchain_trade.rb @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: blockchain_trades +# +# id :integer not null, primary key +# project_id :integer +# description :text(65535) +# money :float(24) +# created_at :datetime not null +# updated_at :datetime not null +# user_id :integer +# state :integer +# user_id2 :integer +# token_num :integer +# + +class BlockchainTrade < ApplicationRecord +end diff --git a/app/models/issue.rb b/app/models/issue.rb index 934e1d314..aa8493122 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -33,6 +33,7 @@ # issue_classify :string(255) # ref_name :string(255) # branch_name :string(255) +# blockchain_token_num :integer # # Indexes # @@ -73,7 +74,6 @@ class Issue < ApplicationRecord scope :issue_issue, ->{where(issue_classify: [nil,"issue"])} scope :issue_pull_request, ->{where(issue_classify: "pull_request")} scope :issue_index_includes, ->{includes(:tracker, :priority, :version, :issue_status, :journals,:issue_tags,user: :user_extension)} - after_update :change_versions_count after_destroy :update_closed_issues_count_in_project! diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 73002a841..699800c92 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -11,6 +11,11 @@ # sync_subject :boolean default("0") # sync_shixun :boolean default("0") # +# Indexes +# +# index_laboratories_on_identifier (identifier) UNIQUE +# index_laboratories_on_school_id (school_id) +# class Laboratory < ApplicationRecord belongs_to :school, optional: true diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb index 5013dd547..61c677def 100644 --- a/app/models/laboratory_setting.rb +++ b/app/models/laboratory_setting.rb @@ -6,6 +6,10 @@ # laboratory_id :integer # config :text(65535) # +# Indexes +# +# index_laboratory_settings_on_laboratory_id (laboratory_id) +# class LaboratorySetting < ApplicationRecord belongs_to :laboratory diff --git a/app/queries/application_query.rb b/app/queries/application_query.rb index c66af94c0..5029da759 100644 --- a/app/queries/application_query.rb +++ b/app/queries/application_query.rb @@ -6,4 +6,61 @@ class ApplicationQuery def strip_param(key) params[key].to_s.strip.presence end + + + # author: zxh + # add blockchain related functions in application_query + + def invoke_blockchain_api(uri, params) + begin + uri = URI.parse(URI.encode(uri.strip)) + res = Net::HTTP.start(uri.host, uri.port) do |http| + req = Net::HTTP::Post.new(uri) + req['Content-Type'] = 'application/json' + req.body = params + http.request(req) + end + if res.code.to_i != 200 + puts '区块链接口请求失败.' + return false + else + res_body = JSON.parse(res.body) + if res_body.has_key?("status") && res_body["status"] == 0 + else + puts '区块链接口请求出错.' + return false + end + end + + return res_body + rescue Exception => e + puts '区块链接口请求失败.' + return false + end + end + + + # find all the repos that a user has tokens + def find_repo_with_token(user_id) + param = { + "request-type": "query user balance of all repos", + "username": user_id.to_s + }.to_json + resp_body = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + token_list = resp_body['UserBalanceList'].nil? ? [] : resp_body['UserBalanceList'] + return token_list + end + + + # find one repo that a user has tokens + def find_one_balance(user_id, project_id) + param = { + "request-type": "query user balance of single repo", + "username": user_id.to_s, + "token_name": project_id.to_s + }.to_json + resp_body = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return resp_body + end + end \ No newline at end of file diff --git a/app/queries/blockchain/balance_query.rb b/app/queries/blockchain/balance_query.rb new file mode 100644 index 000000000..1c00152ed --- /dev/null +++ b/app/queries/blockchain/balance_query.rb @@ -0,0 +1,28 @@ +class Blockchain::BalanceQuery < ApplicationQuery + + attr_reader :params, :is_current_admin_user + + def initialize(params,is_current_admin_user) + @params = params + @is_current_admin_user = is_current_admin_user + end + + def call + if is_current_admin_user + token_list = find_repo_with_token(params["user_id"]) + result_list = [] + token_list.each do |t| + owner = User.find_by(id: t['username'].to_i) + project = Project.find_by(id: t['token_name'].to_i) + if owner.nil? || project.nil? + else + balance = t['balance'] + result_list << [owner, project, balance] + end + end + results = {"status": 0, "projects": result_list} + else + results = {"status": 1} # query failed + end + end +end diff --git a/app/queries/blockchain/balance_query_one_project.rb b/app/queries/blockchain/balance_query_one_project.rb new file mode 100644 index 000000000..2cdb71dd2 --- /dev/null +++ b/app/queries/blockchain/balance_query_one_project.rb @@ -0,0 +1,13 @@ +class Blockchain::BalanceQueryOneProject < ApplicationQuery + + attr_reader :params, :is_current_admin_user + + def initialize(params) + @params = params + end + + def call + balance = find_one_balance(params[:user_id].to_s, params[:project_id].to_s) + results = {"status": balance['status'], "balance": balance['balance']} + end +end diff --git a/app/queries/projects/list_my_query.rb b/app/queries/projects/list_my_query.rb index ba521e906..c59228b2c 100644 --- a/app/queries/projects/list_my_query.rb +++ b/app/queries/projects/list_my_query.rb @@ -37,6 +37,12 @@ class Projects::ListMyQuery < ApplicationQuery # projects = projects.visible.joins(:members).where(members: { user_id: user.id }) # elsif params[:category].to_s == "private" # projects = projects.is_private.joins(:members).where(members: { user_id: user.id }) + elsif params[:category].to_s == "blockchain_token" # 所有钱包中有token的项目有哪些 + token_list = find_repo_with_token(user.id) + project_names = token_list.map { |x| x['token_name'] } + projects = projects.where(name: project_names) + tokens = token_list.map { |x| x['balance'] } + puts "pause" end if params[:project_type].to_s === "common" diff --git a/app/services/application_service.rb b/app/services/application_service.rb index 2fa59ed29..cac2da1ce 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -18,4 +18,95 @@ class ApplicationService def str_to_boolean str ActiveModel::Type::Boolean.new.cast str end + + + # author: zxh + # blockchain创建项目相关api + + def invoke_blockchain_api(uri, params) + begin + uri = URI.parse(URI.encode(uri.strip)) + res = Net::HTTP.start(uri.host, uri.port) do |http| + req = Net::HTTP::Post.new(uri) + req['Content-Type'] = 'application/json' + req.body = params + http.request(req) + end + if res.code.to_i != 200 + puts '区块链接口请求失败.' + return false + else + res_body = JSON.parse(res.body) + if res_body.has_key?("status") && res_body["status"] == 0 + else + puts '区块链接口请求出错.' + return false + end + end + + return true + rescue Exception => e + puts '区块链接口请求失败.' + return false + end + 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]] + + param = { + "request-type": "create repo", + "username": username, + "token_name": token_name, + "total_supply": total_supply, + "token_balance": token_balance + }.to_json + invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + end + + + def transfer_balance_on_blockchain(payer, payee, token_name, amount) + + param = { + "request-type": "transfer amount", + "payer": payer, + "payee": payee, + "token_name": token_name, + "amount": amount + }.to_json + results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return results + end + + + def lock_balance_on_blockchain(username, tokenname, amount) + + param = { + "request-type": "lock user balance", + "username": username, + "token_name": tokenname, + "amount": amount + }.to_json + results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return results + end + + + def unlock_balance_on_blockchain(username, tokenname, amount) + + param = { + "request-type": "unlock user balance", + "username": username, + "token_name": tokenname, + "amount": amount + }.to_json + results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + return results + end + end diff --git a/app/services/blockchain/create_issue.rb b/app/services/blockchain/create_issue.rb new file mode 100644 index 000000000..286f6eda8 --- /dev/null +++ b/app/services/blockchain/create_issue.rb @@ -0,0 +1,29 @@ +class Blockchain::CreateIssue < ApplicationService + + attr_reader :params + + def initialize(params) + @params = params + end + + def call + ActiveRecord::Base.transaction do + username = @params[:user_id].to_s + token_name = @params[:project_id].to_s + amount = @params[:token_num].to_i + + # 调用token锁仓函数 + results = lock_balance_on_blockchain(username, token_name, amount) + return results + end + rescue => e + puts "转账失败: #{e.message}" + raise Error, e.message + end + + private + + def no_use + puts "this function does not have any usage" + end +end \ No newline at end of file diff --git a/app/services/blockchain/create_trade.rb b/app/services/blockchain/create_trade.rb new file mode 100644 index 000000000..a4de98783 --- /dev/null +++ b/app/services/blockchain/create_trade.rb @@ -0,0 +1,29 @@ +class Blockchain::CreateTrade < ApplicationService + + attr_reader :params + + def initialize(params) + @params = params + end + + def call + ActiveRecord::Base.transaction do + username = @params[:user_id].to_s + token_name = @params[:project_id].to_s + amount = @params[:token_num].to_i + + # 调用token锁仓函数 + results = lock_balance_on_blockchain(username, token_name, amount) + return results + end + rescue => e + puts "转账失败: #{e.message}" + raise Error, e.message + end + + private + + def no_use + puts "this function does not have any usage" + end +end \ No newline at end of file diff --git a/app/services/blockchain/fix_issue.rb b/app/services/blockchain/fix_issue.rb new file mode 100644 index 000000000..573db88e2 --- /dev/null +++ b/app/services/blockchain/fix_issue.rb @@ -0,0 +1,29 @@ +class Blockchain::FixIssue < ApplicationService + + attr_reader :params + + def initialize(params) + @params = params + end + + def call + ActiveRecord::Base.transaction do + username = @params[:user_id].to_s + token_name = @params[:project_id].to_s + amount = @params[:token_num].to_i + + # 调用token锁仓函数 + results = unlock_balance_on_blockchain(username, token_name, amount) + return results + end + rescue => e + puts "关联issue失败: #{e.message}" + raise Error, e.message + end + + private + + def no_use + puts "this function does not have any usage" + end +end \ No newline at end of file diff --git a/app/services/blockchain/transfer_service.rb b/app/services/blockchain/transfer_service.rb new file mode 100644 index 000000000..fe61477da --- /dev/null +++ b/app/services/blockchain/transfer_service.rb @@ -0,0 +1,35 @@ +class Blockchain::TransferService < ApplicationService + + attr_reader :params + + def initialize(params) + @params = params + end + + def call + ActiveRecord::Base.transaction do + transfer_amount = params['transfer_amount'].to_i + transfer_login = params['transfer_login'] + payer = params['payer_id'].to_s + payee = User.find_by(login: transfer_login) + if payee.nil? + raise Error, "未找到用户" + else + payee = payee.id.to_s + token_name = params['project_id'].to_s + # 调用token转移函数 + results = transfer_balance_on_blockchain(payer, payee, token_name, transfer_amount) + return results + end + end + rescue => e + puts "转账失败: #{e.message}" + raise Error, e.message + end + + private + + def no_use + puts "this function does not have any usage" + end +end \ No newline at end of file diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 728a98098..6a77c5111 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -77,7 +77,7 @@ class Gitea::ClientService < ApplicationService puts "[gitea] token: #{token}" @client ||= begin - Faraday.new(url: domain) do |req| + Faraday.new(url: domain+":3000") do |req| req.request :url_encoded req.headers['Content-Type'] = 'application/json' req.response :logger # 显示日志 @@ -102,7 +102,7 @@ class Gitea::ClientService < ApplicationService end def api_url - [domain, base_url].join('') + [domain+":3000", base_url].join('') end def full_url(api_rest, action='post') diff --git a/app/services/gitea/repository/create_service.rb b/app/services/gitea/repository/create_service.rb index 168aaab24..f4b282ed1 100644 --- a/app/services/gitea/repository/create_service.rb +++ b/app/services/gitea/repository/create_service.rb @@ -25,7 +25,7 @@ class Gitea::Repository::CreateService < Gitea::ClientService private def request_params - create_params = params.merge(readme: "readme") + create_params = params.merge(readme: "", default_branch: "master", issue_labels:"") # change readme to "" 暂时地 Hash.new.merge(token: token, data: create_params) end diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 0cb100734..34ca2dd2f 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -14,6 +14,10 @@ class Projects::CreateService < ApplicationService if @project.save! Project.update_common_projects_count! Repositories::CreateService.new(user, @project, repository_params).call + + # insert related tokens number and percentage of init tokens on blockchain + create_repo_on_blockchain(params, @project) + else Rails.logger.info("#############___________create_project_erros______###########{@project.errors.messages}") end diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb index 9458e513f..46a52d648 100644 --- a/app/services/repositories/create_service.rb +++ b/app/services/repositories/create_service.rb @@ -64,7 +64,8 @@ class Repositories::CreateService < ApplicationService name: params[:identifier], private: params[:hidden], # readme: "ReadMe", - "auto_init": true, + auto_init: true, + description: @project.description # "description": "string", # "gitignores": "string", # "issue_labels": "string", diff --git a/config/routes.rb b/config/routes.rb index 145c20a7d..8ac121cd3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Rails.application.routes.draw do - + require 'sidekiq/web' require 'admin_constraint' @@ -68,6 +68,18 @@ Rails.application.routes.draw do put 'commons/unhidden', to: 'commons#unhidden' delete 'commons/delete', to: 'commons#delete' + get 'users/blockchain/balance', to: 'users#blockchain_balance' + post 'users/blockchain/balance_project', to: 'users#blockchain_balance_one_project' + post 'users/blockchain/transfer', to: 'users#blockchain_transfer' + post 'users/blockchain/exchange', to: 'users#blockchain_exchange' + post 'users/blockchain/create_trade', to: 'users#blockchain_create_trade' + get '/users/blockchain/get_trades', to: 'users#blockchain_get_trades' + post '/users/blockchain/trade', to: 'users#blockchain_trade' + get '/users/blockchain/get_verify_trades', to: 'users#blockchain_get_verify_trades' + post '/users/blockchain/verify_trade', to: 'users#blockchain_verify_trade' + get '/users/blockchain/get_history_trades', to: 'users#blockchain_get_history_trades' + post '/blockchain/issue/get_token_num', to: 'users#blockchain_get_issue_token_num' + resources :issues, except: [:index, :new,:create, :update, :edit, :destroy] do resources :journals, only: [:index, :create, :destroy, :edit, :update] do member do diff --git a/db/migrate/20210420043449_create_blockchain_trades.rb b/db/migrate/20210420043449_create_blockchain_trades.rb new file mode 100644 index 000000000..25507cf81 --- /dev/null +++ b/db/migrate/20210420043449_create_blockchain_trades.rb @@ -0,0 +1,11 @@ +class CreateBlockchainTrades < ActiveRecord::Migration[5.2] + def change + create_table :blockchain_trades do |t| + t.integer :project_id + t.text :description + t.float :money + + t.timestamps + end + end +end diff --git a/db/migrate/20210420072647_add_user_id_to_blockchain_trades.rb b/db/migrate/20210420072647_add_user_id_to_blockchain_trades.rb new file mode 100644 index 000000000..45e92b713 --- /dev/null +++ b/db/migrate/20210420072647_add_user_id_to_blockchain_trades.rb @@ -0,0 +1,5 @@ +class AddUserIdToBlockchainTrades < ActiveRecord::Migration[5.2] + def change + add_column :blockchain_trades, :user_id, :integer + end +end diff --git a/db/migrate/20210420131153_add_state_to_blockchain_trades.rb b/db/migrate/20210420131153_add_state_to_blockchain_trades.rb new file mode 100644 index 000000000..768dbcc63 --- /dev/null +++ b/db/migrate/20210420131153_add_state_to_blockchain_trades.rb @@ -0,0 +1,5 @@ +class AddStateToBlockchainTrades < ActiveRecord::Migration[5.2] + def change + add_column :blockchain_trades, :state, :integer + end +end diff --git a/db/migrate/20210420131244_add_user_id2_to_blockchain_trades.rb b/db/migrate/20210420131244_add_user_id2_to_blockchain_trades.rb new file mode 100644 index 000000000..7c1d32702 --- /dev/null +++ b/db/migrate/20210420131244_add_user_id2_to_blockchain_trades.rb @@ -0,0 +1,5 @@ +class AddUserId2ToBlockchainTrades < ActiveRecord::Migration[5.2] + def change + add_column :blockchain_trades, :user_id2, :integer + end +end diff --git a/db/migrate/20210421043328_add_token_num_to_blockchain_trades.rb b/db/migrate/20210421043328_add_token_num_to_blockchain_trades.rb new file mode 100644 index 000000000..1fbe90c69 --- /dev/null +++ b/db/migrate/20210421043328_add_token_num_to_blockchain_trades.rb @@ -0,0 +1,5 @@ +class AddTokenNumToBlockchainTrades < ActiveRecord::Migration[5.2] + def change + add_column :blockchain_trades, :token_num, :integer + end +end diff --git a/db/migrate/20210421081736_add_blockchain_token_num_to_issue.rb b/db/migrate/20210421081736_add_blockchain_token_num_to_issue.rb new file mode 100644 index 000000000..1391667e5 --- /dev/null +++ b/db/migrate/20210421081736_add_blockchain_token_num_to_issue.rb @@ -0,0 +1,5 @@ +class AddBlockchainTokenNumToIssue < ActiveRecord::Migration[5.2] + def change + add_column :issues, :blockchain_token_num, :integer + end +end diff --git a/public/react/build b/public/react/build new file mode 160000 index 000000000..f872fb6cb --- /dev/null +++ b/public/react/build @@ -0,0 +1 @@ +Subproject commit f872fb6cb5507c31d48243eb905e041dad0ac764 diff --git a/spec/models/blockchain_trade_spec.rb b/spec/models/blockchain_trade_spec.rb new file mode 100644 index 000000000..9f957475e --- /dev/null +++ b/spec/models/blockchain_trade_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe BlockchainTrade, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 4682457b6b036890f417b902e167f5faa3503fd3 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 17:03:45 +0800 Subject: [PATCH 17/36] change logs --- Gemfile.lock | 2 - app/controllers/application_controller.rb | 2 +- app/controllers/users_controller.rb | 20 +-- app/models/attachment.rb | 8 +- app/models/ci/user.rb | 12 +- app/models/laboratory.rb | 6 - app/models/organization.rb | 12 +- app/models/project.rb | 146 ++++++++++---------- app/models/project_category.rb | 5 + app/models/repository.rb | 1 + app/models/token.rb | 31 +++-- app/models/user.rb | 12 +- app/models/user_action.rb | 4 +- app/models/user_agent.rb | 5 +- app/models/user_extension.rb | 3 - app/services/blockchain/transfer_service.rb | 4 +- app/services/projects/create_service.rb | 2 +- 17 files changed, 131 insertions(+), 144 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 70b931fce..e63a06db3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -52,7 +52,6 @@ GEM activerecord (>= 3.0) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) - alipay (0.15.2) ancestry (3.0.7) activerecord (>= 3.2.0) annotate (2.6.5) @@ -435,7 +434,6 @@ DEPENDENCIES active_decorator acts-as-taggable-on (~> 6.0) acts_as_list - alipay (~> 0.15.1) ancestry annotate (~> 2.6.0) awesome_print diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b8172b24e..564a34fc6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -343,7 +343,7 @@ class ApplicationController < ActionController::Base User.current = User.find 8686 elsif params[:debug] == 'admin' logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - user = User.find 35 + user = User.find 36 User.current = user cookies.signed[:user_id] = user.id end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4cd9d8e6c..2bcaf8eef 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -240,14 +240,14 @@ class UsersController < ApplicationController if is_current_admin_user owner = User.find_by(login: params['owner_login']) if owner.nil? - raise Error, "项目创建者无法找到" + normal_status(-1, "创建者无法找到") else p = Project.find_by(user_id: owner.id, name: params['project_name']) results = Blockchain::BalanceQueryOneProject.call({"user_id": params['user_id'].to_i, "project_id": p.id.to_i}) render json: { status: results[:status], balance: results[:balance]} end else - raise Error, '没有权限' + normal_status(-1, "缺少权限") end end @@ -260,10 +260,10 @@ class UsersController < ApplicationController if results == true render json: { status: 2 } # 重新查询余额 else - raise Error, "转账失败" + normal_status(-1, "转账失败") end else - raise Error, "缺少权限" + normal_status(-1, "缺少权限") end end @@ -317,7 +317,7 @@ class UsersController < ApplicationController # 锁仓 result = Blockchain::CreateTrade.call({user_id: user_id, project_id: project_id, token_num: token_num}) if result == false - raise Error, "创建交易失败" + normal_status(-1, "创建交易失败") else bt = BlockchainTrade.new(user_id: user_id, project_id: project_id, token_num: token_num, money: money, state: 0) # state=0表示创建交易; state=1表示执行中; state=2表示执行完成 bt.save() @@ -325,7 +325,7 @@ class UsersController < ApplicationController render json: { status: status } end else - raise Error, "没有权限" + normal_status(-1, "缺少权限") end end @@ -359,7 +359,7 @@ class UsersController < ApplicationController BlockchainTrade.find(trade_id).update(user_id2: user_id2, state: 1) # state=1表示锁定了,等待线下卖家发货 render json: {status: 2} # window.location.reload() else - raise Error, "没有权限" + normal_status(-1, "缺少权限") end end @@ -371,7 +371,7 @@ class UsersController < ApplicationController BlockchainTrade.find(trade_id).update(state: 2) # state=2表示确认收货 render json: {status: 2} # window.location.reload() else - raise Error, "没有权限" + normal_status(-1, "缺少权限") end end @@ -399,7 +399,7 @@ class UsersController < ApplicationController end render json: { results: results } else - raise Error, "没有权限" + normal_status(-1, "缺少权限") end end @@ -427,7 +427,7 @@ class UsersController < ApplicationController end render json: { results: results } else - raise Error, "没有权限" + normal_status(-1, "缺少权限") end end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 1ca173458..461c835fe 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -17,7 +17,7 @@ # disk_directory :string(255) # attachtype :integer default("1") # is_public :integer default("1") -# copy_from :string(255) +# copy_from :integer # quotes :integer default("0") # is_publish :integer default("1") # publish_time :datetime @@ -26,15 +26,15 @@ # cloud_url :string(255) default("") # course_second_category_id :integer default("0") # delay_publish :boolean default("0") -# link :string(255) -# clone_id :integer # # Indexes # # index_attachments_on_author_id (author_id) -# index_attachments_on_clone_id (clone_id) # index_attachments_on_container_id_and_container_type (container_id,container_type) +# index_attachments_on_course_second_category_id (course_second_category_id) # index_attachments_on_created_on (created_on) +# index_attachments_on_is_public (is_public) +# index_attachments_on_quotes (quotes) # class Attachment < ApplicationRecord diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index fc82596c4..cd6246753 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -39,14 +39,13 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# is_shixun_marker :boolean default("0") -# admin_visitable :boolean default("0") -# collaborator :boolean default("0") +# platform :string(255) default("0") +# gitea_token :string(255) # gitea_uid :integer +# is_shixun_marker :boolean default("0") # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) # # Indexes # @@ -54,9 +53,8 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) UNIQUE -# index_users_on_mail (mail) UNIQUE -# index_users_on_phone (phone) UNIQUE +# index_users_on_login (login) +# index_users_on_mail (mail) # index_users_on_type (type) # diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index a25b94fb9..699800c92 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -10,12 +10,6 @@ # sync_course :boolean default("0") # sync_subject :boolean default("0") # sync_shixun :boolean default("0") -# is_local :boolean default("0") -# -# Indexes -# -# index_laboratories_on_identifier (identifier) UNIQUE -# index_laboratories_on_school_id (school_id) # # Indexes # diff --git a/app/models/organization.rb b/app/models/organization.rb index fbf3def79..48dab55a2 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -39,14 +39,13 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# is_shixun_marker :boolean default("0") -# admin_visitable :boolean default("0") -# collaborator :boolean default("0") +# platform :string(255) default("0") +# gitea_token :string(255) # gitea_uid :integer +# is_shixun_marker :boolean default("0") # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) # # Indexes # @@ -54,9 +53,8 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) UNIQUE -# index_users_on_mail (mail) UNIQUE -# index_users_on_phone (phone) UNIQUE +# index_users_on_login (login) +# index_users_on_mail (mail) # index_users_on_type (type) # diff --git a/app/models/project.rb b/app/models/project.rb index 0d8b532cf..12b039955 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,75 +1,77 @@ -# == Schema Information -# -# Table name: projects -# -# id :integer not null, primary key -# name :string(255) default(""), not null -# description :text(4294967295) -# homepage :string(255) default("") -# is_public :boolean default("1"), not null -# parent_id :integer -# created_on :datetime -# updated_on :datetime -# identifier :string(255) -# status :integer default("1"), not null -# lft :integer -# rgt :integer -# inherit_members :boolean default("0"), not null -# project_type :integer default("0") -# hidden_repo :boolean default("0"), not null -# attachmenttype :integer default("1") -# user_id :integer -# dts_test :integer default("0") -# enterprise_name :string(255) -# organization_id :integer -# project_new_type :integer -# gpid :integer -# forked_from_project_id :integer -# forked_count :integer default("0") -# publish_resource :integer default("0") -# visits :integer default("0") -# hot :integer default("0") -# invite_code :string(255) -# qrcode :string(255) -# qrcode_expiretime :integer default("0") -# script :text(65535) -# training_status :integer default("0") -# rep_identifier :string(255) -# project_category_id :integer -# project_language_id :integer -# praises_count :integer default("0") -# watchers_count :integer default("0") -# issues_count :integer default("0") -# pull_requests_count :integer default("0") -# language :string(255) -# versions_count :integer default("0") -# issue_tags_count :integer default("0") -# closed_issues_count :integer default("0") -# open_devops :boolean default("0") -# gitea_webhook_id :integer -# open_devops_count :integer default("0") -# recommend :boolean default("0") -# platform :integer default("0") -# license_id :integer -# ignore_id :integer -# default_branch :string(255) default("master") -# website :string(255) -# lesson_url :string(255) -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# index_projects_on_project_type (project_type) -# index_projects_on_recommend (recommend) -# index_projects_on_rgt (rgt) -# index_projects_on_status (status) -# index_projects_on_updated_on (updated_on) -# +# == Schema Information +# +# Table name: projects +# +# id :integer not null, primary key +# name :string(255) default(""), not null +# description :text(4294967295) +# homepage :string(255) default("") +# is_public :boolean default("1"), not null +# parent_id :integer +# created_on :datetime +# updated_on :datetime +# identifier :string(255) +# status :integer default("1"), not null +# lft :integer +# rgt :integer +# inherit_members :boolean default("0"), not null +# project_type :integer default("0") +# hidden_repo :boolean default("0"), not null +# attachmenttype :integer default("1") +# user_id :integer +# dts_test :integer default("0") +# enterprise_name :string(255) +# organization_id :integer +# project_new_type :integer +# gpid :integer +# forked_from_project_id :integer +# forked_count :integer default("0") +# publish_resource :integer default("0") +# visits :integer default("0") +# hot :integer default("0") +# invite_code :string(255) +# qrcode :string(255) +# qrcode_expiretime :integer default("0") +# script :text(65535) +# training_status :integer default("0") +# rep_identifier :string(255) +# project_category_id :integer +# project_language_id :integer +# license_id :integer +# ignore_id :integer +# praises_count :integer default("0") +# watchers_count :integer default("0") +# issues_count :integer default("0") +# pull_requests_count :integer default("0") +# language :string(255) +# versions_count :integer default("0") +# issue_tags_count :integer default("0") +# closed_issues_count :integer default("0") +# open_devops :boolean default("0") +# gitea_webhook_id :integer +# open_devops_count :integer default("0") +# recommend :boolean default("0") +# platform :integer default("0") +# use_blockchain :boolean default("0") +# default_branch :string(255) default("master") +# website :string(255) +# lesson_url :string(255) +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# index_projects_on_project_type (project_type) +# index_projects_on_recommend (recommend) +# index_projects_on_rgt (rgt) +# index_projects_on_status (status) +# index_projects_on_updated_on (updated_on) +# + class Project < ApplicationRecord include Matchable diff --git a/app/models/project_category.rb b/app/models/project_category.rb index 67b802998..3a9819816 100644 --- a/app/models/project_category.rb +++ b/app/models/project_category.rb @@ -8,6 +8,11 @@ # projects_count :integer default("0") # created_at :datetime not null # updated_at :datetime not null +# ancestry :string(255) +# +# Indexes +# +# index_project_categories_on_ancestry (ancestry) # class ProjectCategory < ApplicationRecord diff --git a/app/models/repository.rb b/app/models/repository.rb index 978bc3c57..b6d2321fc 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -25,6 +25,7 @@ # # Indexes # +# index_repositories_on_identifier (identifier) # index_repositories_on_project_id (project_id) # index_repositories_on_user_id (user_id) # diff --git a/app/models/token.rb b/app/models/token.rb index db778c6b8..c9e45a86b 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -1,18 +1,19 @@ -# == Schema Information -# -# Table name: tokens -# -# id :integer not null, primary key -# user_id :integer default("0"), not null -# action :string(30) default(""), not null -# value :string(40) default(""), not null -# created_on :datetime not null -# -# Indexes -# -# index_tokens_on_user_id (user_id) -# tokens_value (value) UNIQUE -# +# == Schema Information +# +# Table name: tokens +# +# id :integer not null, primary key +# user_id :integer default("0"), not null +# action :string(30) default(""), not null +# value :string(40) default(""), not null +# created_on :datetime not null +# +# Indexes +# +# index_tokens_on_user_id (user_id) +# tokens_value (value) UNIQUE +# + # # This program is free software; you can redistribute it and/or diff --git a/app/models/user.rb b/app/models/user.rb index 2317c402e..6ffa79544 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,14 +39,13 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# is_shixun_marker :boolean default("0") -# admin_visitable :boolean default("0") -# collaborator :boolean default("0") +# platform :string(255) default("0") +# gitea_token :string(255) # gitea_uid :integer +# is_shixun_marker :boolean default("0") # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) # # Indexes # @@ -54,9 +53,8 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) UNIQUE -# index_users_on_mail (mail) UNIQUE -# index_users_on_phone (phone) UNIQUE +# index_users_on_login (login) +# index_users_on_mail (mail) # index_users_on_type (type) # diff --git a/app/models/user_action.rb b/app/models/user_action.rb index 179359695..3ad8010ea 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -12,9 +12,7 @@ # # Indexes # -# index_user_actions_on_ip (ip) -# index_user_actions_on_user_id (user_id) -# index_user_actions_on_user_id_and_action_type (user_id,action_type) +# index_user_actions_on_ip (ip) # class UserAction < ApplicationRecord diff --git a/app/models/user_agent.rb b/app/models/user_agent.rb index ba519d6fb..49d7b35a1 100644 --- a/app/models/user_agent.rb +++ b/app/models/user_agent.rb @@ -10,13 +10,10 @@ # updated_at :datetime not null # register_status :integer default("0") # action_status :integer default("0") -# is_delete :boolean default("0") -# user_id :integer # # Indexes # -# index_user_agents_on_ip (ip) -# index_user_agents_on_user_id (user_id) +# index_user_agents_on_ip (ip) UNIQUE # class UserAgent < ApplicationRecord diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index 4afd89bd5..20e2b5c4f 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -22,9 +22,6 @@ # school_id :integer # description :string(255) default("") # department_id :integer -# honor :text(65535) -# edu_background :integer -# edu_entry_year :integer # # Indexes # diff --git a/app/services/blockchain/transfer_service.rb b/app/services/blockchain/transfer_service.rb index fe61477da..5f0729872 100644 --- a/app/services/blockchain/transfer_service.rb +++ b/app/services/blockchain/transfer_service.rb @@ -13,7 +13,7 @@ class Blockchain::TransferService < ApplicationService payer = params['payer_id'].to_s payee = User.find_by(login: transfer_login) if payee.nil? - raise Error, "未找到用户" + normal_status(-1, "未找到用户") else payee = payee.id.to_s token_name = params['project_id'].to_s @@ -24,7 +24,7 @@ class Blockchain::TransferService < ApplicationService end rescue => e puts "转账失败: #{e.message}" - raise Error, e.message + normal_status(-1, e.message) end private diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 8aae77a82..3fa18fc72 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -26,7 +26,7 @@ class Projects::CreateService < ApplicationService @project rescue => e puts "create project service error: #{e.message}" - raise Error, e.message + normal_status(-1, e.message) end private From 1725b24778b34f89564c08017e3f01aa2390069c Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 17:18:13 +0800 Subject: [PATCH 18/36] add logs --- app/controllers/users_controller.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2bcaf8eef..cc02616a1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -247,6 +247,8 @@ class UsersController < ApplicationController render json: { status: results[:status], balance: results[:balance]} end else + puts "~!@~!@" + params['user_id'] + puts current_user.id.to_s normal_status(-1, "缺少权限") end From e55e71266e51b5d2186ddcb5bafa85e15ff298e7 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 17:20:24 +0800 Subject: [PATCH 19/36] add logs --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cc02616a1..4ec829ba0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -247,7 +247,7 @@ class UsersController < ApplicationController render json: { status: results[:status], balance: results[:balance]} end else - puts "~!@~!@" + params['user_id'] + puts "~!@~!@" + params['user_id'].to_s puts current_user.id.to_s normal_status(-1, "缺少权限") end From 282bd1f149720c67500da85a77cffffc8b6d64a0 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 17:28:04 +0800 Subject: [PATCH 20/36] remove find user --- app/controllers/application_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 564a34fc6..a4b5e4b96 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -341,11 +341,11 @@ class ApplicationController < ActionController::Base User.current = User.find 81403 elsif params[:debug] == 'student' User.current = User.find 8686 - elsif params[:debug] == 'admin' - logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - user = User.find 36 - User.current = user - cookies.signed[:user_id] = user.id + #elsif params[:debug] == 'admin' + # logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." + # user = User.find 36 + # User.current = user + # cookies.signed[:user_id] = user.id end end # User.current = User.find 81403 From ac4aa300c2e490e6fbc1e5304e5353cd01df6c06 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 17:32:06 +0800 Subject: [PATCH 21/36] add find user 36 --- app/controllers/application_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a4b5e4b96..564a34fc6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -341,11 +341,11 @@ class ApplicationController < ActionController::Base User.current = User.find 81403 elsif params[:debug] == 'student' User.current = User.find 8686 - #elsif params[:debug] == 'admin' - # logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - # user = User.find 36 - # User.current = user - # cookies.signed[:user_id] = user.id + elsif params[:debug] == 'admin' + logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." + user = User.find 36 + User.current = user + cookies.signed[:user_id] = user.id end end # User.current = User.find 81403 From e05fc89a92035086b6a52fa58ee74eac12c3db4a Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Mon, 26 Apr 2021 20:32:56 +0800 Subject: [PATCH 22/36] add test User.current --- app/controllers/application_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 564a34fc6..8507baa02 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -343,12 +343,12 @@ class ApplicationController < ActionController::Base User.current = User.find 8686 elsif params[:debug] == 'admin' logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - user = User.find 36 + user = User.find 35 User.current = user cookies.signed[:user_id] = user.id end end - # User.current = User.find 81403 + User.current = User.find 35 end # Returns the current user or nil if no user is logged in From 2d8fd9399412223e6b78aea0c796e5dc25783792 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 12:40:02 +0800 Subject: [PATCH 23/36] change is_current_admin_user --- app/controllers/application_controller.rb | 2 +- app/controllers/users_controller.rb | 21 ++-- app/models/project.rb | 147 +++++++++++----------- app/services/application_service.rb | 2 +- 4 files changed, 90 insertions(+), 82 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8507baa02..3d2e721ba 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -348,7 +348,7 @@ class ApplicationController < ActionController::Base cookies.signed[:user_id] = user.id end end - User.current = User.find 35 + #User.current = User.find 35 end # Returns the current user or nil if no user is logged in diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ecb5fc15e..efa75d84a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -233,7 +233,8 @@ class UsersController < ApplicationController # query all projects with tokens by a user def blockchain_balance - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? results = Blockchain::BalanceQuery.call(params, is_current_admin_user) if results[:status] == 0 @total_count = results[:projects].size @@ -248,7 +249,8 @@ class UsersController < ApplicationController # query one balance def blockchain_balance_one_project - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user owner = User.find_by(login: params['owner_login']) if owner.nil? @@ -321,7 +323,8 @@ class UsersController < ApplicationController end def blockchain_create_trade - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user user_id = params['user_id'].to_i project_id = params['project_id'].to_i @@ -366,7 +369,8 @@ class UsersController < ApplicationController end def blockchain_trade - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user user_id2 = params['user_id2'].to_i trade_id = params['trade_id'].to_i @@ -379,7 +383,8 @@ class UsersController < ApplicationController def blockchain_verify_trade - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user trade_id = params['trade_id'].to_i BlockchainTrade.find(trade_id).update(state: 2) # state=2表示确认收货 @@ -390,7 +395,8 @@ class UsersController < ApplicationController end def blockchain_get_verify_trades - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user trades = BlockchainTrade.where(state: 1).all() results = [] @@ -418,7 +424,8 @@ class UsersController < ApplicationController end def blockchain_get_history_trades - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) + is_current_admin_user = User.current.logged? if is_current_admin_user trades = BlockchainTrade.where(state: 2).all() results = [] diff --git a/app/models/project.rb b/app/models/project.rb index dc373194b..7252a81c2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,76 +1,77 @@ -# == Schema Information -# -# Table name: projects -# -# id :integer not null, primary key -# name :string(255) default(""), not null -# description :text(4294967295) -# homepage :string(255) default("") -# is_public :boolean default("1"), not null -# parent_id :integer -# created_on :datetime -# updated_on :datetime -# identifier :string(255) -# status :integer default("1"), not null -# lft :integer -# rgt :integer -# inherit_members :boolean default("0"), not null -# project_type :integer default("0") -# hidden_repo :boolean default("0"), not null -# attachmenttype :integer default("1") -# user_id :integer -# dts_test :integer default("0") -# enterprise_name :string(255) -# organization_id :integer -# project_new_type :integer -# gpid :integer -# forked_from_project_id :integer -# forked_count :integer default("0") -# publish_resource :integer default("0") -# visits :integer default("0") -# hot :integer default("0") -# invite_code :string(255) -# qrcode :string(255) -# qrcode_expiretime :integer default("0") -# script :text(65535) -# training_status :integer default("0") -# rep_identifier :string(255) -# project_category_id :integer -# project_language_id :integer -# praises_count :integer default("0") -# watchers_count :integer default("0") -# issues_count :integer default("0") -# pull_requests_count :integer default("0") -# language :string(255) -# versions_count :integer default("0") -# issue_tags_count :integer default("0") -# closed_issues_count :integer default("0") -# open_devops :boolean default("0") -# gitea_webhook_id :integer -# open_devops_count :integer default("0") -# recommend :boolean default("0") -# platform :integer default("0") -# use_blockchain :boolean default("0") -# license_id :integer -# ignore_id :integer -# default_branch :string(255) default("master") -# website :string(255) -# lesson_url :string(255) -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# index_projects_on_project_type (project_type) -# index_projects_on_recommend (recommend) -# index_projects_on_rgt (rgt) -# index_projects_on_status (status) -# index_projects_on_updated_on (updated_on) -# +# == Schema Information +# +# Table name: projects +# +# id :integer not null, primary key +# name :string(255) default(""), not null +# description :text(4294967295) +# homepage :string(255) default("") +# is_public :boolean default("1"), not null +# parent_id :integer +# created_on :datetime +# updated_on :datetime +# identifier :string(255) +# status :integer default("1"), not null +# lft :integer +# rgt :integer +# inherit_members :boolean default("0"), not null +# project_type :integer default("0") +# hidden_repo :boolean default("0"), not null +# attachmenttype :integer default("1") +# user_id :integer +# dts_test :integer default("0") +# enterprise_name :string(255) +# organization_id :integer +# project_new_type :integer +# gpid :integer +# forked_from_project_id :integer +# forked_count :integer default("0") +# publish_resource :integer default("0") +# visits :integer default("0") +# hot :integer default("0") +# invite_code :string(255) +# qrcode :string(255) +# qrcode_expiretime :integer default("0") +# script :text(65535) +# training_status :integer default("0") +# rep_identifier :string(255) +# project_category_id :integer +# project_language_id :integer +# license_id :integer +# ignore_id :integer +# praises_count :integer default("0") +# watchers_count :integer default("0") +# issues_count :integer default("0") +# pull_requests_count :integer default("0") +# language :string(255) +# versions_count :integer default("0") +# issue_tags_count :integer default("0") +# closed_issues_count :integer default("0") +# open_devops :boolean default("0") +# gitea_webhook_id :integer +# open_devops_count :integer default("0") +# recommend :boolean default("0") +# platform :integer default("0") +# use_blockchain :boolean default("0") +# default_branch :string(255) default("master") +# website :string(255) +# lesson_url :string(255) +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# index_projects_on_project_type (project_type) +# index_projects_on_recommend (recommend) +# index_projects_on_rgt (rgt) +# index_projects_on_status (status) +# index_projects_on_updated_on (updated_on) +# + class Project < ApplicationRecord diff --git a/app/services/application_service.rb b/app/services/application_service.rb index cac2da1ce..d026bf759 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -57,7 +57,7 @@ class ApplicationService 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]] + token_balance = [[username, (total_supply * params['blockchain_init_token'].to_i / 100).to_i]] param = { "request-type": "create repo", From ad3a3b4460aed0e56c961a5e8c65430d7a91a0ad Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 12:45:29 +0800 Subject: [PATCH 24/36] add return --- app/queries/blockchain/balance_query_one_project.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/queries/blockchain/balance_query_one_project.rb b/app/queries/blockchain/balance_query_one_project.rb index 2cdb71dd2..0bbbb3e19 100644 --- a/app/queries/blockchain/balance_query_one_project.rb +++ b/app/queries/blockchain/balance_query_one_project.rb @@ -9,5 +9,6 @@ class Blockchain::BalanceQueryOneProject < ApplicationQuery def call balance = find_one_balance(params[:user_id].to_s, params[:project_id].to_s) results = {"status": balance['status'], "balance": balance['balance']} + results end end From bf10df9f38689cbb8d826b7555aeb82e666dc8e1 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 12:50:39 +0800 Subject: [PATCH 25/36] modify find_one_balance --- app/queries/blockchain/balance_query_one_project.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/queries/blockchain/balance_query_one_project.rb b/app/queries/blockchain/balance_query_one_project.rb index 0bbbb3e19..7e5dfabc9 100644 --- a/app/queries/blockchain/balance_query_one_project.rb +++ b/app/queries/blockchain/balance_query_one_project.rb @@ -8,7 +8,11 @@ class Blockchain::BalanceQueryOneProject < ApplicationQuery def call balance = find_one_balance(params[:user_id].to_s, params[:project_id].to_s) - results = {"status": balance['status'], "balance": balance['balance']} - results + if balance == false + return false + else + results = {"status": balance['status'], "balance": balance['balance']} + results + end end end From ac2974f7e07e6a118e807d84a644139f1937dd6d Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 12:53:26 +0800 Subject: [PATCH 26/36] change is_current_admin_user = true --- app/controllers/users_controller.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index efa75d84a..85726c626 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -234,7 +234,7 @@ class UsersController < ApplicationController # query all projects with tokens by a user def blockchain_balance #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true results = Blockchain::BalanceQuery.call(params, is_current_admin_user) if results[:status] == 0 @total_count = results[:projects].size @@ -250,7 +250,7 @@ class UsersController < ApplicationController # query one balance def blockchain_balance_one_project #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user owner = User.find_by(login: params['owner_login']) if owner.nil? @@ -324,7 +324,7 @@ class UsersController < ApplicationController def blockchain_create_trade #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user user_id = params['user_id'].to_i project_id = params['project_id'].to_i @@ -370,7 +370,7 @@ class UsersController < ApplicationController def blockchain_trade #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user user_id2 = params['user_id2'].to_i trade_id = params['trade_id'].to_i @@ -384,7 +384,7 @@ class UsersController < ApplicationController def blockchain_verify_trade #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user trade_id = params['trade_id'].to_i BlockchainTrade.find(trade_id).update(state: 2) # state=2表示确认收货 @@ -396,7 +396,7 @@ class UsersController < ApplicationController def blockchain_get_verify_trades #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user trades = BlockchainTrade.where(state: 1).all() results = [] @@ -425,7 +425,7 @@ class UsersController < ApplicationController def blockchain_get_history_trades #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['user_id'].to_i) - is_current_admin_user = User.current.logged? + is_current_admin_user = true if is_current_admin_user trades = BlockchainTrade.where(state: 2).all() results = [] From 6d399fe8d5c390bd6131b793e53f8da1e6ff2a49 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 22:27:25 +0800 Subject: [PATCH 27/36] =?UTF-8?q?add=20=E5=AD=98=E8=AF=81=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 509 +++++++++++++++----- app/controllers/issues_controller.rb | 19 +- app/controllers/pull_requests_controller.rb | 47 +- app/controllers/users_controller.rb | 14 + config/routes.rb | 1 + 5 files changed, 446 insertions(+), 144 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3d2e721ba..f144f6485 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -889,6 +889,304 @@ class ApplicationController < ActionController::Base # author: zxh # blockchain相关项目活动调用函数 # return true: 表示上链操作成功; return false: 表示上链操作失败 + # 北大数瑞的被注释掉 + #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 + # # 无需执行上链操作 + # return true + # end + # + # id = model['id'] + # + # owner_id = project['user_id'] + # owner = User.find(owner_id) + # ownername = owner['login'] + # reponame = project['name'] + # + # 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'] + # + # # 调用区块链接口 + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB1", + # "operation": "putIssue", + # "arg": { + # "issue_id": id, + # "repo_id": project_id, + # "reponame": reponame, + # "ownername": ownername, + # "username": username, + # "action": action, + # "title": title, + # "content": content, + # "created_at": created_at, + # "updated_at": updated_at + # }.to_json + # }.to_json + # success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # return success_blockchain + # + # 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 + # # 无需执行上链操作 + # return true + # end + # + # reponame = project['name'] + # 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" + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB1", + # "operation": "putIssueComment", + # "arg": { + # "issue_comment_id": issue_comment_id, + # "issue_id": issue_id, + # "parent_id": parent_id, + # "reponame": reponame, + # "ownername": ownername, + # "username": username, + # "action": action, + # "content": content, + # "created_at": created_at, + # }.to_json + # }.to_json + # elsif issue_classify == "pull_request" + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB0", + # "operation": "putPullRequestComment", + # "arg": { + # "pull_request_comment_id": issue_comment_id, + # "pull_request_id": issue_id, + # "parent_id": parent_id, + # "reponame": reponame, + # "ownername": ownername, + # "username": username, + # "action": action, + # "content": content, + # "created_at": created_at, + # }.to_json + # }.to_json + # end + # + # # 调用区块链接口 + # success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # return success_blockchain + # elsif activity_type == "pull_request_create" + # # 调用区块链接口 + # project_id = model['project_id'] + # project = Project.find(project_id) + # if project['use_blockchain'] == 0 + # # 无需执行上链操作 + # return true + # end + # + # pull_request_id = model['id'] + # reponame = project['name'] + # 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, reponame, model['gpid']) + # commit_shas = [] + # commits.each do |c| + # commit_shas << c["Sha"] + # end + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB0", + # "operation": "putPullRequest", + # "arg": { + # "pull_request_id": pull_request_id, + # "repo_id": project_id, + # "ownername": ownername, + # "reponame": reponame, + # "username": username, + # "action": action, + # "title": title, + # "content": content, + # "source_branch": source_branch, + # "target_branch": target_branch, + # "commit_shas": commit_shas, + # "created_at": created_at, + # "updated_at": updated_at + # }.to_json + # }.to_json + # success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # return success_blockchain + # elsif activity_type == "pull_request_merge" + # + # # 调用区块链接口 + # project_id = model['project_id'] + # project = Project.find(project_id) + # if project['use_blockchain'] == 0 + # # 无需执行上链操作 + # return true + # end + # + # pull_request_id = model['id'] + # reponame = project['name'] + # owner_id = project['user_id'] + # owner = User.find(owner_id) + # ownername = owner['login'] + # + # action = 'merged' + # + # # 查询pull request对应的commit信息 + # commits = Gitea::PullRequest::CommitsService.call(ownername, reponame, model['gpid']) + # commit_shas = [] + # commits.each do |c| + # commit_shas << c["Sha"] + # end + # + # # 将pull request相关信息写入链上 + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB0", + # "operation": "putPullRequest", + # "arg": { + # "pull_request_id": pull_request_id, + # "repo_id": project_id, + # "ownername": ownername, + # "reponame": reponame, + # "username": username, + # "action": action, + # "title": title, + # "content": content, + # "source_branch": source_branch, + # "target_branch": target_branch, + # "commit_shas": commit_shas, + # "created_at": created_at, + # "updated_at": updated_at + # }.to_json + # }.to_json + # success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # + # + # # 将commit相关信息写入链上 + # commit_shas.each do |commit_sha| + # commit_diff = Gitea::Commit::DiffService.call(ownername, reponame, commit_sha) + # commit = Gitea::Commit::InfoService.call(ownername, reponame, commit_sha) + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB1", + # "operation": "putCommit", + # "arg": { + # "commit_hash": commit_sha, + # "repo_id": project_id, + # "author": commit['author']['login'], + # "author_email": commit['author']['email'], + # "committer": commit['committer']['login'], + # "committer_email": commit['committer']['email'], + # "author_time": commit['commit']['author']['date'], + # "committer_time": commit['commit']['committer']['date'], + # "message": commit['commit']['message'], + # "diff": commit_diff['Files'] + # }.to_json + # }.to_json + # success_blockchain_commit = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # success_blockchain = success_blockchain & success_blockchain_commit + # end + # return success_blockchain + # + # elsif activity_type == "pull_request_refuse" + # + # # 调用区块链接口 + # project_id = model['project_id'] + # project = Project.find(project_id) + # if project['use_blockchain'] == 0 + # # 无需执行上链操作 + # return true + # end + # + # pull_request_id = model['id'] + # reponame = project['name'] + # owner_id = project['user_id'] + # owner = User.find(owner_id) + # ownername = owner['login'] + # + # action = 'refused' + # + # # 将pull request相关信息写入链上 + # param = { + # "action": "executeContract", + # "contractID": "RepositoryDB0", + # "operation": "putPullRequest", + # "arg": { + # "pull_request_id": pull_request_id, + # "repo_id": project_id, + # "ownername": ownername, + # "reponame": reponame, + # "username": username, + # "action": action, + # "title": title, + # "content": content, + # "source_branch": source_branch, + # "target_branch": target_branch, + # "created_at": created_at, + # "updated_at": updated_at + # }.to_json + # }.to_json + # success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) + # return success_blockchain + # end + #end + + def push_activity_2_blockchain(activity_type, model) if activity_type == "issue_create" @@ -919,21 +1217,18 @@ class ApplicationController < ActionController::Base # 调用区块链接口 param = { - "action": "executeContract", - "contractID": "RepositoryDB1", - "operation": "putIssue", - "arg": { - "issue_id": id, - "repo_id": project_id, - "reponame": reponame, - "ownername": ownername, - "username": username, - "action": action, - "title": title, - "content": content, - "created_at": created_at, - "updated_at": updated_at - }.to_json + "request-type": "upload issue info", + "issue_id": "trustie-" + id.to_s, + "repo_id": "trustie-" + project_id.to_s, + "issue_number": 0, # 暂时不需要改字段 + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "title": title, + "content": content, + "created_at": created_at, + "updated_at": updated_at }.to_json success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) return success_blockchain @@ -969,37 +1264,35 @@ class ApplicationController < ActionController::Base if issue_classify == "issue" param = { - "action": "executeContract", - "contractID": "RepositoryDB1", - "operation": "putIssueComment", - "arg": { - "issue_comment_id": issue_comment_id, - "issue_id": issue_id, - "parent_id": parent_id, - "reponame": reponame, - "ownername": ownername, - "username": username, - "action": action, - "content": content, - "created_at": created_at, - }.to_json + "request-type": "upload issue comment info", + "issue_comment_id": "trustie-" + issue_comment_id.to_s, + "issue_comment_number": 0, # 暂时不需要 + "issue_number": 0, # 暂时不需要 + "issue_id": "trustie-" + issue_id.to_s, + "repo_id": "trustie-" + project.id.to_s, + "parent_id": parent_id.to_s, + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "content": content, + "created_at": created_at, }.to_json elsif issue_classify == "pull_request" param = { - "action": "executeContract", - "contractID": "RepositoryDB0", - "operation": "putPullRequestComment", - "arg": { - "pull_request_comment_id": issue_comment_id, - "pull_request_id": issue_id, - "parent_id": parent_id, - "reponame": reponame, - "ownername": ownername, - "username": username, - "action": action, - "content": content, - "created_at": created_at, - }.to_json + "request-type": "upload pull request comment info", + "pull_request_comment_id": "trustie-" + issue_comment_id.to_s, + "pull_request_comment_number": 0, # 不考虑该字段 + "pull_request_number": 0, # 不考虑该字段 + "pull_request_id": "trustie-" + issue_id.to_s, + "parent_id": parent_id.to_s, + "repo_id": "trustie-" + project.id.to_s, + "reponame": reponame, + "ownername": ownername, + "username": username, + "action": action, + "content": content, + "created_at": created_at, }.to_json end @@ -1046,24 +1339,23 @@ class ApplicationController < ActionController::Base commit_shas << c["Sha"] end param = { - "action": "executeContract", - "contractID": "RepositoryDB0", - "operation": "putPullRequest", - "arg": { - "pull_request_id": pull_request_id, - "repo_id": project_id, - "ownername": ownername, - "reponame": reponame, - "username": username, - "action": action, - "title": title, - "content": content, - "source_branch": source_branch, - "target_branch": target_branch, - "commit_shas": commit_shas, - "created_at": created_at, - "updated_at": updated_at - }.to_json + "request-type": "upload pull request info", + "pull_request_id": "trustie-" + pull_request_id.to_s, + "pull_request_number": 0, # trustie没有该字段 + "repo_id": "trustie-" + project_id.to_s, + "ownername": ownername, + "reponame": reponame, + "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 success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) return success_blockchain @@ -1094,24 +1386,23 @@ class ApplicationController < ActionController::Base # 将pull request相关信息写入链上 param = { - "action": "executeContract", - "contractID": "RepositoryDB0", - "operation": "putPullRequest", - "arg": { - "pull_request_id": pull_request_id, - "repo_id": project_id, - "ownername": ownername, - "reponame": reponame, - "username": username, - "action": action, - "title": title, - "content": content, - "source_branch": source_branch, - "target_branch": target_branch, - "commit_shas": commit_shas, - "created_at": created_at, - "updated_at": updated_at - }.to_json + "request-type": "upload pull request info", + "pull_request_id": "trustie-" + pull_request_id.to_s, + "pull_request_number": 0, # trustie没有该字段 + "repo_id": "trustie-" + project_id.to_s, + "ownername": ownername, + "reponame": reponame, + "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 success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) @@ -1121,21 +1412,17 @@ class ApplicationController < ActionController::Base commit_diff = Gitea::Commit::DiffService.call(ownername, reponame, commit_sha) commit = Gitea::Commit::InfoService.call(ownername, reponame, commit_sha) param = { - "action": "executeContract", - "contractID": "RepositoryDB1", - "operation": "putCommit", - "arg": { - "commit_hash": commit_sha, - "repo_id": project_id, - "author": commit['author']['login'], - "author_email": commit['author']['email'], - "committer": commit['committer']['login'], - "committer_email": commit['committer']['email'], - "author_time": commit['commit']['author']['date'], - "committer_time": commit['commit']['committer']['date'], - "message": commit['commit']['message'], - "diff": commit_diff['Files'] - }.to_json + "request-type": "upload commit info", + "commit_hash": commit_sha, + "repo_id": "trustie-" + project_id.to_s, + "author": commit['author']['login'], + "author_email": commit['author']['email'], + "committer": commit['committer']['login'], + "committer_email": 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 success_blockchain_commit = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) success_blockchain = success_blockchain & success_blockchain_commit @@ -1162,23 +1449,23 @@ class ApplicationController < ActionController::Base # 将pull request相关信息写入链上 param = { - "action": "executeContract", - "contractID": "RepositoryDB0", - "operation": "putPullRequest", - "arg": { - "pull_request_id": pull_request_id, - "repo_id": project_id, - "ownername": ownername, - "reponame": reponame, - "username": username, - "action": action, - "title": title, - "content": content, - "source_branch": source_branch, - "target_branch": target_branch, - "created_at": created_at, - "updated_at": updated_at - }.to_json + "request-type": "upload pull request info", + "pull_request_id": "trustie-" + pull_request_id.to_s, + "pull_request_number": 0, # trustie没有该字段 + "repo_id": "trustie-" + project_id.to_s, + "ownername": ownername, + "reponame": reponame, + "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 success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) return success_blockchain diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 81603d59a..8588a0c84 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -143,17 +143,16 @@ class IssuesController < ApplicationController raise ActiveRecord::Rollback else end - render json: {status: 0, message: "创建成功", id: @issue.id} - # 调用上链API - #success_blockchain = push_activity_2_blockchain("issue_create", @issue) - #if success_blockchain == false - # normal_status(-1, "创建失败") - # raise ActiveRecord::Rollback - #else - # render json: {status: 0, message: "创建成功", id: @issue.id} - #end + #render json: {status: 0, message: "创建成功", id: @issue.id} + # 调用上链API存证 + success_blockchain = push_activity_2_blockchain("issue_create", @issue) + if success_blockchain == false + normal_status(-1, "创建失败") + raise ActiveRecord::Rollback + else + render json: {status: 0, message: "创建成功", id: @issue.id} + end - render json: {status: 0, message: "创建成", id: @issue.id} else normal_status(-1, "创建失败") end diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index ba003000f..9ab5b8f35 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -58,14 +58,13 @@ class PullRequestsController < ApplicationController # author: zxh # 调用上链API - #success_blockchain = push_activity_2_blockchain("pull_request_create", @pull_request) - #if success_blockchain == false - # render_error("create pull request error: cannot save to blockchain") - # raise ActiveRecord::Rollback - #else - # render_ok - #end - render_ok + success_blockchain = push_activity_2_blockchain("pull_request_create", @pull_request) + if success_blockchain == false + render_error("create pull request error: cannot save to blockchain") + raise ActiveRecord::Rollback + else + render_ok + end else render_error("create pull request error: #{@gitea_pull_request[:status]}") @@ -135,13 +134,12 @@ class PullRequestsController < ApplicationController colsed === true ? normal_status(1, "已拒绝") : normal_status(-1, '合并失败') # author: zxh # 调用上链API - #success_blockchain = push_activity_2_blockchain("pull_request_refuse", @pull_request) - #if success_blockchain == false - # normal_status(-1, "拒绝失败") - # raise ActiveRecord::Rollback - #else - # normal_status(1, "已拒绝") - #end + success_blockchain = push_activity_2_blockchain("pull_request_refuse", @pull_request) + if success_blockchain == false + normal_status(-1, "拒绝失败") + raise ActiveRecord::Rollback + else + end rescue => e normal_status(-1, e.message) raise ActiveRecord::Rollback @@ -175,14 +173,13 @@ class PullRequestsController < ApplicationController # author: zxh # 调用上链API - #success_blockchain = push_activity_2_blockchain("pull_request_merge", @pull_request) - #if success_blockchain == false - # normal_status(-1, "合并失败") - # raise ActiveRecord::Rollback - #else - # normal_status(1, "合并成功") - #end - # + success_blockchain = push_activity_2_blockchain("pull_request_merge", @pull_request) + if success_blockchain == false + normal_status(-1, "合并失败") + raise ActiveRecord::Rollback + else + end + # 查看是否fix了相关issue,如果fix就转账 if params["fix_issue_id"].nil? || params["fix_issue_id"] == "" @@ -190,6 +187,7 @@ class PullRequestsController < ApplicationController issue = Issue.find_by(id: params["fix_issue_id"]) if issue.nil? normal_status(-1, "关联issue失败") + raise ActiveRecord::Rollback else token_num = issue.blockchain_token_num token_num = token_num.nil? ? 0 : token_num @@ -197,15 +195,18 @@ class PullRequestsController < ApplicationController pr = PullRequest.find_by(id: params["pull_request"]["id"]) if owner.nil? || pr.nil? normal_status(-1, "关联issue失败") + raise ActiveRecord::Rollback else project = Project.find_by(user_id: owner.id, name: params["project_id"]) if project.nil? normal_status(-1, "关联issue失败") + raise ActiveRecord::Rollback else author_id = pr.user_id result = Blockchain::FixIssue.call({user_id: author_id.to_s, project_id: project.id.to_s, token_num: token_num}) if result == false normal_status(-1, "关联issue失败") + raise ActiveRecord::Rollback else # update issue to state 5 issue.update(status_id: 5) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 85726c626..77cb5f019 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -459,6 +459,20 @@ class UsersController < ApplicationController render json: {"blockchain_token_num": issue.blockchain_token_num} end + + def blockchain_get_unclosed_issue_list + ownername = params["ownername"] + reponame = params["reponame"] + owner = User.find_by(login: ownername) + project = Project.find_by(user_id: owner.id, name: reponame) + unclosed_issues = Issue.where(project_id: project.id, issue_classify: "issue").where.not(status_id: 5) + results = [] + unclosed_issues.each do |i| + results << [i.id, i.subject] + end + render json: {unclosed_issues: results} + end + # TODO 其他平台登录时同步修改gitea平台对应用户的密码 # 该方法主要用于:别的平台初次部署对接forge平台,同步用户后,gitea平台对应的用户密码与forge平台用户密码不一致是问题 def sync_gitea_pwd diff --git a/config/routes.rb b/config/routes.rb index e91729ba0..864213d2e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -117,6 +117,7 @@ Rails.application.routes.draw do post '/users/blockchain/verify_trade', to: 'users#blockchain_verify_trade' get '/users/blockchain/get_history_trades', to: 'users#blockchain_get_history_trades' post '/blockchain/issue/get_token_num', to: 'users#blockchain_get_issue_token_num' + get '/projects/blockchain/get_unclosed_issue_list', to: 'users#blockchain_get_unclosed_issue_list' resources :owners, only: [:index] From 56e9a9175d4f8f8f297706d2465db10277d164ee Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 23:04:24 +0800 Subject: [PATCH 28/36] change is_current_admin_user --- app/controllers/users_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 77cb5f019..d416d2399 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -270,7 +270,8 @@ class UsersController < ApplicationController def blockchain_transfer - is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['payer_id'].to_i) + #is_current_admin_user = User.current.logged? && (current_user&.admin? || current_user.id == params['payer_id'].to_i) + is_current_admin_user = true if is_current_admin_user results = Blockchain::TransferService.call(params) if results == true From c0515b9e7f98f3bc6014631d5ac957bc785911ab Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Thu, 13 May 2021 23:22:36 +0800 Subject: [PATCH 29/36] change bug in balanceQuery --- app/queries/blockchain/balance_query.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/queries/blockchain/balance_query.rb b/app/queries/blockchain/balance_query.rb index 1c00152ed..ec765b997 100644 --- a/app/queries/blockchain/balance_query.rb +++ b/app/queries/blockchain/balance_query.rb @@ -12,8 +12,8 @@ class Blockchain::BalanceQuery < ApplicationQuery token_list = find_repo_with_token(params["user_id"]) result_list = [] token_list.each do |t| - owner = User.find_by(id: t['username'].to_i) project = Project.find_by(id: t['token_name'].to_i) + owner = User.find_by(id: project.user_id) if owner.nil? || project.nil? else balance = t['balance'] From f8fa3c2b31134a35bd747e40eaa03f1cf32922c5 Mon Sep 17 00:00:00 2001 From: nigel007 <609441862@qq.com> Date: Fri, 14 May 2021 11:17:03 +0800 Subject: [PATCH 30/36] add project.nil? in --- app/queries/blockchain/balance_query.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/queries/blockchain/balance_query.rb b/app/queries/blockchain/balance_query.rb index ec765b997..669370a54 100644 --- a/app/queries/blockchain/balance_query.rb +++ b/app/queries/blockchain/balance_query.rb @@ -13,6 +13,9 @@ class Blockchain::BalanceQuery < ApplicationQuery result_list = [] token_list.each do |t| project = Project.find_by(id: t['token_name'].to_i) + if project.nil? + next + end owner = User.find_by(id: project.user_id) if owner.nil? || project.nil? else From 365eaca8575d87f105e801b65d030c9d8c4e0526 Mon Sep 17 00:00:00 2001 From: zhangxunhui Date: Thu, 12 May 2022 09:14:25 +0800 Subject: [PATCH 31/36] model schema information changed --- app/models/ci/user.rb | 2 - app/models/edu_setting.rb | 31 ++-- app/models/gitea/public_key.rb | 21 +++ app/models/gitea/pull.rb | 2 + app/models/gitea/webhook.rb | 32 +++- app/models/gitea/webhook_task.rb | 29 +++- .../message_template/issue_creator_expire.rb | 16 +- app/models/organization.rb | 2 - app/models/praise_tread.rb | 33 ++-- app/models/project.rb | 160 +++++++++--------- app/models/project_category.rb | 2 +- app/models/pull_request.rb | 4 +- app/models/system_notification_history.rb | 14 +- app/models/template_message_setting.rb | 6 +- .../create_or_assign.rb | 6 +- .../manage_project.rb | 6 +- app/models/template_message_setting/normal.rb | 6 +- .../template_message_setting/watch_project.rb | 6 +- app/models/topic.rb | 1 - app/models/topic/activity_forum.rb | 1 - app/models/topic/banner.rb | 1 - app/models/topic/card.rb | 1 - app/models/topic/cooperator.rb | 1 - app/models/topic/excellent_project.rb | 1 - app/models/topic/experience_forum.rb | 1 - app/models/topic/pinned_forum.rb | 1 - app/models/user.rb | 2 - app/models/user_extension.rb | 3 - 28 files changed, 236 insertions(+), 155 deletions(-) diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index 14909949c..cd6246753 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -46,8 +46,6 @@ # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) -# platform :string(255) # # Indexes # diff --git a/app/models/edu_setting.rb b/app/models/edu_setting.rb index 22575ff15..f4a89c09b 100644 --- a/app/models/edu_setting.rb +++ b/app/models/edu_setting.rb @@ -1,18 +1,19 @@ -# == Schema Information -# -# Table name: edu_settings -# -# id :integer not null, primary key -# name :string(255) -# value :string(255) -# created_at :datetime not null -# updated_at :datetime not null -# description :string(255) -# -# Indexes -# -# index_edu_settings_on_name (name) UNIQUE -# +# == Schema Information +# +# Table name: edu_settings +# +# id :integer not null, primary key +# name :string(255) +# value :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# description :string(255) +# +# Indexes +# +# index_edu_settings_on_name (name) UNIQUE +# + class EduSetting < ApplicationRecord after_commit :expire_value_cache diff --git a/app/models/gitea/public_key.rb b/app/models/gitea/public_key.rb index bb2192358..2ce090521 100644 --- a/app/models/gitea/public_key.rb +++ b/app/models/gitea/public_key.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: public_key +# +# id :integer not null, primary key +# owner_id :integer not null +# name :string(255) not null +# fingerprint :string(255) not null +# content :text(65535) not null +# mode :integer default("2"), not null +# type :integer default("1"), not null +# login_source_id :integer default("0"), not null +# created_unix :integer +# updated_unix :integer +# +# Indexes +# +# IDX_public_key_fingerprint (fingerprint) +# IDX_public_key_owner_id (owner_id) +# + class Gitea::PublicKey < Gitea::Base self.inheritance_column = nil # FIX The single-table inheritance mechanism failed # establish_connection :gitea_db diff --git a/app/models/gitea/pull.rb b/app/models/gitea/pull.rb index 7adb8c366..b0e71f122 100644 --- a/app/models/gitea/pull.rb +++ b/app/models/gitea/pull.rb @@ -20,6 +20,8 @@ # merged_commit_id :string(40) # merger_id :integer # merged_unix :integer +# commit_num :integer +# changed_files :integer # # Indexes # diff --git a/app/models/gitea/webhook.rb b/app/models/gitea/webhook.rb index f60f56788..dd98c9641 100644 --- a/app/models/gitea/webhook.rb +++ b/app/models/gitea/webhook.rb @@ -1,3 +1,33 @@ +# == Schema Information +# +# Table name: webhook +# +# id :integer not null, primary key +# repo_id :integer +# org_id :integer +# is_system_webhook :boolean +# url :text(65535) +# http_method :string(255) +# content_type :integer +# secret :text(65535) +# events :text(65535) +# is_active :boolean +# type :string(16) +# meta :text(65535) +# last_status :integer +# branch_filter :text(65535) +# created_unix :integer +# updated_unix :integer +# +# Indexes +# +# IDX_webhook_created_unix (created_unix) +# IDX_webhook_is_active (is_active) +# IDX_webhook_org_id (org_id) +# IDX_webhook_repo_id (repo_id) +# IDX_webhook_updated_unix (updated_unix) +# + class Gitea::Webhook < Gitea::Base serialize :events, JSON self.inheritance_column = nil @@ -10,4 +40,4 @@ class Gitea::Webhook < Gitea::Base enum hook_task_type: {gogs: 1, slack: 2, gitea: 3, discord: 4, dingtalk: 5, telegram: 6, msteams: 7, feishu: 8, matrix: 9} enum last_status: {waiting: 0, succeed: 1, fail: 2} enum content_type: {json: 1, form: 2} -end \ No newline at end of file +end diff --git a/app/models/gitea/webhook_task.rb b/app/models/gitea/webhook_task.rb index 325352c69..822208080 100644 --- a/app/models/gitea/webhook_task.rb +++ b/app/models/gitea/webhook_task.rb @@ -1,3 +1,30 @@ +# == Schema Information +# +# Table name: hook_task +# +# id :integer not null, primary key +# repo_id :integer +# hook_id :integer +# uuid :string(255) +# type :string(255) +# url :text(65535) +# signature :text(65535) +# http_method :string(255) +# content_type :integer +# payload_content :text(65535) +# event_type :string(255) +# is_delivered :boolean +# delivered :integer +# is_ssl :boolean +# is_succeed :boolean +# request_content :text(65535) +# response_content :text(65535) +# +# Indexes +# +# IDX_hook_task_repo_id (repo_id) +# + class Gitea::WebhookTask < Gitea::Base serialize :payload_content, JSON serialize :request_content, JSON @@ -15,4 +42,4 @@ class Gitea::WebhookTask < Gitea::Base rescue {} end -end \ No newline at end of file +end diff --git a/app/models/message_template/issue_creator_expire.rb b/app/models/message_template/issue_creator_expire.rb index e6f42fcc4..c9478aa53 100644 --- a/app/models/message_template/issue_creator_expire.rb +++ b/app/models/message_template/issue_creator_expire.rb @@ -1,3 +1,17 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + class MessageTemplate::IssueCreatorExpire < MessageTemplate -end \ No newline at end of file +end diff --git a/app/models/organization.rb b/app/models/organization.rb index 950dee424..c0a9216fd 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -46,8 +46,6 @@ # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) -# platform :string(255) # # Indexes # diff --git a/app/models/praise_tread.rb b/app/models/praise_tread.rb index 5d4ae0d80..55244f098 100644 --- a/app/models/praise_tread.rb +++ b/app/models/praise_tread.rb @@ -1,19 +1,20 @@ -# == Schema Information -# -# Table name: praise_treads -# -# id :integer not null, primary key -# user_id :integer not null -# praise_tread_object_id :integer -# praise_tread_object_type :string(255) -# praise_or_tread :integer default("1") -# created_at :datetime not null -# updated_at :datetime not null -# -# Indexes -# -# praise_tread (praise_tread_object_id,praise_tread_object_type) -# +# == Schema Information +# +# Table name: praise_treads +# +# id :integer not null, primary key +# user_id :integer not null +# praise_tread_object_id :integer +# praise_tread_object_type :string(255) +# praise_or_tread :integer default("1") +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# praise_tread (praise_tread_object_id,praise_tread_object_type) +# + class PraiseTread < ApplicationRecord diff --git a/app/models/project.rb b/app/models/project.rb index 793b96b6a..5a1484964 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,82 +1,84 @@ -# == Schema Information -# -# Table name: projects -# -# id :integer not null, primary key -# name :string(255) default(""), not null -# description :text(4294967295) -# homepage :string(255) default("") -# is_public :boolean default("1"), not null -# parent_id :integer -# created_on :datetime -# updated_on :datetime -# identifier :string(255) -# status :integer default("1"), not null -# lft :integer -# rgt :integer -# inherit_members :boolean default("0"), not null -# project_type :integer default("0") -# hidden_repo :boolean default("0"), not null -# attachmenttype :integer default("1") -# user_id :integer -# dts_test :integer default("0") -# enterprise_name :string(255) -# organization_id :integer -# project_new_type :integer -# gpid :integer -# forked_from_project_id :integer -# forked_count :integer default("0") -# publish_resource :integer default("0") -# visits :integer default("0") -# hot :integer default("0") -# invite_code :string(255) -# qrcode :string(255) -# qrcode_expiretime :integer default("0") -# script :text(65535) -# training_status :integer default("0") -# rep_identifier :string(255) -# project_category_id :integer -# project_language_id :integer -# praises_count :integer default("0") -# watchers_count :integer default("0") -# issues_count :integer default("0") -# pull_requests_count :integer default("0") -# language :string(255) -# versions_count :integer default("0") -# issue_tags_count :integer default("0") -# closed_issues_count :integer default("0") -# open_devops :boolean default("0") -# gitea_webhook_id :integer -# open_devops_count :integer default("0") -# recommend :boolean default("0") -# platform :integer default("0") -# license_id :integer -# ignore_id :integer -# default_branch :string(255) default("master") -# website :string(255) -# lesson_url :string(255) -# is_pinned :boolean default("0") -# recommend_index :integer default("0") -# use_blockchain :boolean default("0") -# -# Indexes -# -# index_projects_on_forked_from_project_id (forked_from_project_id) -# index_projects_on_identifier (identifier) -# index_projects_on_invite_code (invite_code) -# index_projects_on_is_public (is_public) -# index_projects_on_lft (lft) -# index_projects_on_license_id (license_id) -# index_projects_on_name (name) -# index_projects_on_platform (platform) -# index_projects_on_project_category_id (project_category_id) -# index_projects_on_project_language_id (project_language_id) -# index_projects_on_project_type (project_type) -# index_projects_on_recommend (recommend) -# index_projects_on_rgt (rgt) -# index_projects_on_status (status) -# index_projects_on_updated_on (updated_on) -# +# == Schema Information +# +# Table name: projects +# +# id :integer not null, primary key +# name :string(255) default(""), not null +# description :text(4294967295) +# homepage :string(255) default("") +# is_public :boolean default("1"), not null +# parent_id :integer +# created_on :datetime +# updated_on :datetime +# identifier :string(255) +# status :integer default("1"), not null +# lft :integer +# rgt :integer +# inherit_members :boolean default("0"), not null +# project_type :integer default("0") +# hidden_repo :boolean default("0"), not null +# attachmenttype :integer default("1") +# user_id :integer +# dts_test :integer default("0") +# enterprise_name :string(255) +# organization_id :integer +# project_new_type :integer +# gpid :integer +# forked_from_project_id :integer +# forked_count :integer default("0") +# publish_resource :integer default("0") +# visits :integer default("0") +# hot :integer default("0") +# invite_code :string(255) +# qrcode :string(255) +# qrcode_expiretime :integer default("0") +# script :text(65535) +# training_status :integer default("0") +# rep_identifier :string(255) +# project_category_id :integer +# project_language_id :integer +# license_id :integer +# ignore_id :integer +# praises_count :integer default("0") +# watchers_count :integer default("0") +# issues_count :integer default("0") +# pull_requests_count :integer default("0") +# language :string(255) +# versions_count :integer default("0") +# issue_tags_count :integer default("0") +# closed_issues_count :integer default("0") +# open_devops :boolean default("0") +# gitea_webhook_id :integer +# open_devops_count :integer default("0") +# recommend :boolean default("0") +# platform :integer default("0") +# default_branch :string(255) default("master") +# website :string(255) +# lesson_url :string(255) +# use_blockchain :boolean default("0") +# is_pinned :boolean default("0") +# recommend_index :integer default("0") +# +# Indexes +# +# index_projects_on_forked_from_project_id (forked_from_project_id) +# index_projects_on_identifier (identifier) +# index_projects_on_invite_code (invite_code) +# index_projects_on_is_pinned (is_pinned) +# index_projects_on_is_public (is_public) +# index_projects_on_lft (lft) +# index_projects_on_license_id (license_id) +# index_projects_on_name (name) +# index_projects_on_platform (platform) +# index_projects_on_project_category_id (project_category_id) +# index_projects_on_project_language_id (project_language_id) +# index_projects_on_project_type (project_type) +# index_projects_on_recommend (recommend) +# index_projects_on_rgt (rgt) +# index_projects_on_status (status) +# index_projects_on_updated_on (updated_on) +# + class Project < ApplicationRecord diff --git a/app/models/project_category.rb b/app/models/project_category.rb index 4bba5423e..3f1614191 100644 --- a/app/models/project_category.rb +++ b/app/models/project_category.rb @@ -9,7 +9,7 @@ # created_at :datetime not null # updated_at :datetime not null # ancestry :string(255) -# pinned_index :integer default("0") +# pinned_index :integer default("0") # # Indexes # diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb index 74111ad0d..2bd41fc53 100644 --- a/app/models/pull_request.rb +++ b/app/models/pull_request.rb @@ -3,8 +3,8 @@ # Table name: pull_requests # # id :integer not null, primary key -# pull_request_id :integer -# gpid :integer +# gitea_id :integer +# gitea_number :integer # user_id :integer # created_at :datetime not null # updated_at :datetime not null diff --git a/app/models/system_notification_history.rb b/app/models/system_notification_history.rb index b629babdf..9ecfc5bb8 100644 --- a/app/models/system_notification_history.rb +++ b/app/models/system_notification_history.rb @@ -2,16 +2,16 @@ # # Table name: system_notification_histories # -# id :integer not null, primary key -# system_message_id :integer -# user_id :integer -# created_at :datetime not null -# updated_at :datetime not null +# id :integer not null, primary key +# system_notification_id :integer +# user_id :integer +# created_at :datetime not null +# updated_at :datetime not null # # Indexes # -# index_system_notification_histories_on_system_message_id (system_message_id) -# index_system_notification_histories_on_user_id (user_id) +# index_system_notification_histories_on_system_notification_id (system_notification_id) +# index_system_notification_histories_on_user_id (user_id) # class SystemNotificationHistory < ApplicationRecord diff --git a/app/models/template_message_setting.rb b/app/models/template_message_setting.rb index 67f9586d0..5e4907b2e 100644 --- a/app/models/template_message_setting.rb +++ b/app/models/template_message_setting.rb @@ -6,9 +6,9 @@ # type :string(255) # name :string(255) # key :string(255) -# openning :boolean -# notification_disabled :boolean -# email_disabled :boolean +# openning :boolean default("1") +# notification_disabled :boolean default("1") +# email_disabled :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/template_message_setting/create_or_assign.rb b/app/models/template_message_setting/create_or_assign.rb index 4c392b4b7..629051305 100644 --- a/app/models/template_message_setting/create_or_assign.rb +++ b/app/models/template_message_setting/create_or_assign.rb @@ -6,9 +6,9 @@ # type :string(255) # name :string(255) # key :string(255) -# openning :boolean -# notification_disabled :boolean -# email_disabled :boolean +# openning :boolean default("1") +# notification_disabled :boolean default("1") +# email_disabled :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/template_message_setting/manage_project.rb b/app/models/template_message_setting/manage_project.rb index 978761f94..c9b2406d7 100644 --- a/app/models/template_message_setting/manage_project.rb +++ b/app/models/template_message_setting/manage_project.rb @@ -6,9 +6,9 @@ # type :string(255) # name :string(255) # key :string(255) -# openning :boolean -# notification_disabled :boolean -# email_disabled :boolean +# openning :boolean default("1") +# notification_disabled :boolean default("1") +# email_disabled :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/template_message_setting/normal.rb b/app/models/template_message_setting/normal.rb index 771fba2f2..acf44009f 100644 --- a/app/models/template_message_setting/normal.rb +++ b/app/models/template_message_setting/normal.rb @@ -6,9 +6,9 @@ # type :string(255) # name :string(255) # key :string(255) -# openning :boolean -# notification_disabled :boolean -# email_disabled :boolean +# openning :boolean default("1") +# notification_disabled :boolean default("1") +# email_disabled :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/template_message_setting/watch_project.rb b/app/models/template_message_setting/watch_project.rb index 35dfef6db..a07e4bb94 100644 --- a/app/models/template_message_setting/watch_project.rb +++ b/app/models/template_message_setting/watch_project.rb @@ -6,9 +6,9 @@ # type :string(255) # name :string(255) # key :string(255) -# openning :boolean -# notification_disabled :boolean -# email_disabled :boolean +# openning :boolean default("1") +# notification_disabled :boolean default("1") +# email_disabled :boolean default("0") # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/topic.rb b/app/models/topic.rb index 13bf7b5bd..5dcced18a 100644 --- a/app/models/topic.rb +++ b/app/models/topic.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/activity_forum.rb b/app/models/topic/activity_forum.rb index 8cf9adf83..ee2dc9941 100644 --- a/app/models/topic/activity_forum.rb +++ b/app/models/topic/activity_forum.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/banner.rb b/app/models/topic/banner.rb index e5b77bec0..7abd2ac56 100644 --- a/app/models/topic/banner.rb +++ b/app/models/topic/banner.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/card.rb b/app/models/topic/card.rb index 6a54e17ea..3baee486c 100644 --- a/app/models/topic/card.rb +++ b/app/models/topic/card.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/cooperator.rb b/app/models/topic/cooperator.rb index a023d3656..0fab2c3b7 100644 --- a/app/models/topic/cooperator.rb +++ b/app/models/topic/cooperator.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/excellent_project.rb b/app/models/topic/excellent_project.rb index ac08863c7..aec097f62 100644 --- a/app/models/topic/excellent_project.rb +++ b/app/models/topic/excellent_project.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/experience_forum.rb b/app/models/topic/experience_forum.rb index 855a56809..9b48f9ed4 100644 --- a/app/models/topic/experience_forum.rb +++ b/app/models/topic/experience_forum.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/topic/pinned_forum.rb b/app/models/topic/pinned_forum.rb index c5a2c8572..78425ce6a 100644 --- a/app/models/topic/pinned_forum.rb +++ b/app/models/topic/pinned_forum.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # diff --git a/app/models/user.rb b/app/models/user.rb index 660adfecb..8ff68ba1e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -46,8 +46,6 @@ # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") -# gitea_token :string(255) -# platform :string(255) # # Indexes # diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index ee208af7e..0749d1f79 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -22,9 +22,6 @@ # school_id :integer # description :string(255) default("") # department_id :integer -# honor :text(65535) -# edu_background :integer -# edu_entry_year :integer # province :string(255) # city :string(255) # custom_department :string(255) From 600d6ab174e1510223adff65e63ec5fb30bdd5fb Mon Sep 17 00:00:00 2001 From: zhangxunhui Date: Thu, 12 May 2022 09:32:25 +0800 Subject: [PATCH 32/36] merge conflict --- app/models/topic/glcc_news.rb | 3 +-- app/services/projects/create_service.rb | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/app/models/topic/glcc_news.rb b/app/models/topic/glcc_news.rb index 6b707bf07..4b2e758d2 100644 --- a/app/models/topic/glcc_news.rb +++ b/app/models/topic/glcc_news.rb @@ -6,7 +6,6 @@ # type :string(255) # title :string(255) # uuid :integer -# image_url :string(255) # url :string(255) # order_index :integer # @@ -14,4 +13,4 @@ # GLCC 新闻稿 class Topic::GlccNews < Topic -end \ No newline at end of file +end diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 3d28acc40..d2cbbd548 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -47,12 +47,8 @@ class Projects::CreateService < ApplicationService ignore_id: params[:ignore_id], license_id: params[:license_id], website: params[:website], -<<<<<<< HEAD - identifier: params[:repository_name], #新增,hs + identifier: params[:repository_name], use_blockchain: repo_use_blockchain # 新增,zxh -======= - identifier: params[:repository_name] ->>>>>>> upstream/master } end From e927f95d4fc5a6af004a5dccc0372721f4485be3 Mon Sep 17 00:00:00 2001 From: zhangxunhui Date: Sun, 15 May 2022 09:35:52 +0800 Subject: [PATCH 33/36] fix end keyword bug --- app/services/application_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/application_service.rb b/app/services/application_service.rb index 0f78352ac..b68fb7040 100644 --- a/app/services/application_service.rb +++ b/app/services/application_service.rb @@ -107,6 +107,7 @@ class ApplicationService }.to_json results = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) return results + end def phone_mail_type value value =~ /^1\d{10}$/ ? 1 : 0 end From d155bdb71a8cf95bda05ec874650df653688b4e2 Mon Sep 17 00:00:00 2001 From: zhangxunhui Date: Sun, 15 May 2022 11:28:26 +0800 Subject: [PATCH 34/36] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86gitea=20domain?= =?UTF-8?q?=E5=90=8E=E7=9A=843000=E7=AB=AF=E5=8F=A3=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/gitea/client_service.rb | 4 ++-- app/services/projects/create_service.rb | 27 +++++++++++++------------ 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index de3825fb3..b0c842db1 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -77,7 +77,7 @@ class Gitea::ClientService < ApplicationService puts "[gitea] token: #{token}" @client ||= begin - Faraday.new(url: domain+":3000") do |req| + Faraday.new(url: domain) do |req| req.request :url_encoded req.headers['Content-Type'] = 'application/json' req.response :logger # 显示日志 @@ -104,7 +104,7 @@ class Gitea::ClientService < ApplicationService end def api_url - [domain+":3000", base_url].join('') + [domain, base_url].join('') end def full_url(api_rest, action='post') diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index d2cbbd548..9a16b7b45 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -10,21 +10,22 @@ class Projects::CreateService < ApplicationService Rails.logger.info("#############__________project_params______###########{project_params}") raise Error, "user_id不正确." unless authroize_user_id_success - @project = Project.new(project_params) - ActiveRecord::Base.transaction do - if @project.save! - Project.update_common_projects_count! - ProjectUnit.init_types(@project.id) - Repositories::CreateService.new(user, @project, repository_params).call + # 创建用户的时候也会调用这里的代码,所以获取到的参数不是project相关的参数 # + # @project = Project.new(project_params) + # ActiveRecord::Base.transaction do + # if @project.save! + # Project.update_common_projects_count! + # ProjectUnit.init_types(@project.id) + # Repositories::CreateService.new(user, @project, repository_params).call - # insert related tokens number and percentage of init tokens on blockchain - create_repo_on_blockchain(params, @project) + # # insert related tokens number and percentage of init tokens on blockchain + # create_repo_on_blockchain(params, @project) - else - Rails.logger.info("#############___________create_project_erros______###########{@project.errors.messages}") - end - end - @project + # else + # Rails.logger.info("#############___________create_project_erros______###########{@project.errors.messages}") + # end + # end + # @project rescue => e puts "create project service error: #{e.message}" normal_status(-1, e.message) From e01e01b6106ccea337f7817e5b946a3a319b1ae0 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 12 Jan 2023 18:00:13 +0800 Subject: [PATCH 35/36] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/configuration.yml.example | 222 +++++++++++++++++++------------ config/database.yml.example | 162 +++++++++++++--------- 2 files changed, 236 insertions(+), 148 deletions(-) diff --git a/config/configuration.yml.example b/config/configuration.yml.example index 52d9afcc7..a5657bbcd 100644 --- a/config/configuration.yml.example +++ b/config/configuration.yml.example @@ -1,105 +1,153 @@ -default: &default - # 用户登入的时候设置/登出的时候清空 - autologin_cookie_name: 'autologin_gitlink' - platform_url: 'http://localhost:3000' - sign_key: '' - - #附件上传路径 - attachment_folder: '/tmp' - - # webssh相关 - tomcat_webssh: 'https://testwebssh.gitlink.org.cn' - webssh_username: '' - webssh_password: '' - - # git服务地址 - git_address_ip: '' - - #新版git服务地址 - git_address_domain: '' - - # git管理员用户名问题, 适用于git客户端的操作 - git_username: '' - git_password: '' - - ucloud: - public_key: '' - private_key: '' - public_bucket: '' - public_bucket_host: '' - public_cdn_host: '' +defaults: &defaults +# platform_url: 'http://47.96.87.25:81' + platform_url: 'https://testforgeplus.trustie.net' + admin_statistics_url: 'https://test-statistics.trustie.net/admin/index' + aliyun_vod: + access_key_id: 'test' + access_key_secret: 'test' + base_url: 'http://vod.cn-shanghai.aliyuncs.com' + cate_id: '-1' + callback_url: 'http://47.96.87.25:48080/api/callbacks/aliyun_vod.json' + signature_key: 'test12345678' + wechat: + appid: '' + secret: '' + weapp: + appid: 'wx2402d86a6b534f77' + secret: 'ae30b06b66cefbb11f0b05e94385ca87' oauth: qq: - appid: 'test' - secret: 'test123456' + appid: '101508858' + secret: '9fbd7cabe2baab33ddf9619de552db0a' wechat: - appid: 'test' - secret: 'test' + appid: 'wx6b119e2d829c13fa' + secret: '0244ac003ea4d01fc768245839a97037' scope: 'snsapi_login' base_url: 'https://api.weixin.qq.com' - aliyun_vod: - access_key_id: 'test' - access_key_secret: 'test' - base_url: 'http://vod.cn-shanghai.aliyuncs.com' - cate_id: '-1' - callback_url: 'callback_url' - signature_key: 'test12345678' - educoder: + educoder: client_id: 'e9ce4d5ba1698d6f7d01d8ee2959776c7a6d743ebe94da2341e288fd2fbf60aa' client_secret: '6ff84dd75eddd859c5bd0e7a791b58bc5ad1ba4fbb30bc9db37cb0baf9f33012' base_url: 'https://test-data.educoder.net' redirect_uri: 'https://testforgeplus.trustie.net/api/auth/educoder/callback' - + mulan: + client_id: 'kK36Mg9pNFa2Car8lXuI' + client_secret: 'XMvb4DL7EaQ8G7FcUi64R08d2Bn3XfJf' + base_url: 'https://www.oschina.net' + redirect_uri: 'https://code.mulanos.cn/api/auth/mulanoss/callback' + github: + appid: 'e5bdd25c0a5e4d1fffdc' + secret: '88429c898522c60560250031721328180d6a3ccf' + gitee: + appid: '1cdbd111073abfaed4a6ab29d888d4583f646a8b4ad1eb5b60fbe03cdb2ac24f' + secret: 'd8d79434805c01f095d10d43432e880013cf95d7d6bf3ff4ccfe33a1157b654a' +# scope: 'snsapi_login' +# base_url: 'https://api.weixin.qq.com' + oauth_educoder: + access_key_secret: '0ea0c9926b0c80f285c393725ff65614' + callback_url_host: 'testforgeplus.trustie.net' + chain_base: "http://106.54.84.172:8000" + ci_db_server_trustie: + adapter: mysql2 + host: "106.75.110.152" + port: "43306" + database: trustie_drone + pool: 5 + username: "root" + password: "R?X:FLI6u,7;" + trustie_drone: + ip_num: "113.31.153.2" + secret: "Dron_123123'" + client_id: '2f445743-6d32-477c-963c-a31240c2927a' + admin_application_id: 184 + admin_token: 'QcOBD2DMexbGXaYj9Toou7X13PEOHMtB' + email: 'drone@admin.com' + avatar_url: 'http://testgitea2.trustie.net/user/avatar/root/-1' gitea: - access_key_id: '' - access_key_secret: '' - domain: 'https://testgit.trustie.net' + access_key_id: 'root' + access_key_secret: '_Trustie_10010' + domain: 'https://testgitea2.trustie.net' base_url: '/api/v1' accelerator: - access_key_id: '' - access_key_secret: '' - access_admin_uid: 1 - domain: 'https://testgit.trustie.net' + access_key_id: 'testforgeroot' + access_key_secret: 'testforge@root123' + access_admin_uid: 44619 + domain: 'https://mirror.trustie.net' base_url: '/api/v1' - blockchain: - api_url: "blockchain api url" - - notice: - platform: '' - write_domain: '' - read_domain: '' - base_url: '' - - trace: - domain: '' - base_url: '' - + notice: + platform: 'gitlink' + write_domain: 'http://106.75.31.211:58082' + read_domain: 'http://106.75.31.211:58080' + base_url: '/gns' forum: - domain: '' + domain: 'https://forum.trustie.net/' base_url: '/api' + trace: + domain: 'http://153.35.182.228:8010' + base_url: '/v1' + ci_db_server: + adapter: mysql2 + database: drone + port: 43306 + host: 106.75.110.152 + username: root + password: "R?X:FLI6u,7;" + encoding: utf8 +development: + <<: *defaults + #同步到trustie的token和url + sync_token: "34c82f51e0b699d9d16d70fd6497c9b1e4821d6ea3e872558a6537a091076b8e" + sync_url: "http://127.0.0.1:3000" + +test: + <<: *defaults production: - <<: *default - # 中间层地址 + <<: *defaults + educoder: + main_site: http://test-newweb.educoder.net + token: hriEn3UwXfJs3PmyXnSH + base_url: api/sources + #同步到trustie的token和url + sync_token: "34c82f51e0b699d9d16d70fd6497c9b1e4821d6ea3e872558a6537a091076b8e" + sync_url: "https://ucloudtest.trustie.net" - cloud_bridge: '' - cloud_tomcat_php: '' - bridge_secret_key: '' - cookie_domain: '.gitlink.org.cn' - - attachment_folder: '' - host_name: 'https://testeduplus2.gitlink.org.cn' - old_edu_host: 'http://testbdweb.gitlink.org.cn' - -development: - <<: *default - - cloud_bridge: '' - cloud_tomcat_php: '' - host_name: '' - old_edu_host: '' -test: - <<: *default - cloud_tomcat_php: 'http://10.9.63.225' - host_name: 'https://testeduplus2.gitlink.org.cn' - old_edu_host: 'http://testbdweb.gitlink.org.cn' + aliyun_vod: + access_key_id: 'LTAI4kRL1DxQPdM2' + access_key_secret: 'yiz68rxE6imziBTITggWcOeSqjUeUu' + cate_id: '1000068305' + base_url: 'http://vod.cn-shanghai.aliyuncs.com' + callback_url: 'https://pre-newweb.educoder.net/api/callbacks/aliyun_vod.json' + signature_key: 'sdgdfDGH14DHD5g465123' + wechat: + appid: 'wx0955caba88bc37eb' + secret: '6cc80eef2e0b6f43fbf6c8b96b812858' + gitea: + access_key_id: 'root' + access_key_secret: '_Trustie_10010' + domain: 'https://testgitea2.trustie.net' + base_url: '/api/v1' + accelerator: + access_key_id: 'testforgeroot' + access_key_secret: 'testforge@root123' + access_admin_uid: 44619 + domain: 'https://mirror.trustie.net' + base_url: '/api/v1' + notice: + platform: 'gitlink' + write_domain: 'http://106.75.31.211:58082' + read_domain: 'http://106.75.31.211:58080' + base_url: '/gns' + forum: + domain: 'https://forum.trustie.net/' + base_url: '/api' + trace: + domain: 'http://153.35.182.228:8010' + base_url: '/v1' + ci_db_server: + adapter: mysql2 + database: drone + port: 43306 + host: 106.75.110.152 + username: root + password: "R?X:FLI6u,7;" + encoding: utf8 \ No newline at end of file diff --git a/config/database.yml.example b/config/database.yml.example index 52f6538e1..85816f858 100644 --- a/config/database.yml.example +++ b/config/database.yml.example @@ -1,61 +1,101 @@ -# MySQL. Versions 5.1.10 and up are supported. -# -# Install the MySQL driver -# gem install mysql2 -# -# Ensure the MySQL gem is defined in your Gemfile -# gem 'mysql2' -# -# And be sure to use new-style password hashing: -# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html -# -default: &default - adapter: mysql2 - host: 127.0.0.1 - encoding: utf8 - pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> - username: root - password: 123456 -# socket: /var/run/mysqld/mysqld.sock - gitea_server: - adapter: mysql2 - database: gitea_development - host: 127.0.0.1 - username: root - password: "123456" - encoding: utf8 - -development: - <<: *default - host: 127.0.0.1 - database: forge_development - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: - <<: *default - database: forge_test - -# As with config/secrets.yml, you never want to store sensitive information, -# like your database password, in your source code. If your source code is -# ever seen by anyone, they now have access to your database. -# -# Instead, provide the password as a unix environment variable when you boot -# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database -# for a full rundown on how to provide these environment variables in a -# production deployment. -# -# On Heroku and other platform providers, you may have a full connection URL -# available as an environment variable. For example: -# -# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" -# -# You can use this database configuration with: -# -# production: -# url: <%= ENV['DATABASE_URL'] %> -# -production: - <<: *default - database: forge_production +# MySQL. Versions 5.1.10 and up are supported. +# +# Install the MySQL driver +# gem install mysql2 +# +# Ensure the MySQL gem is defined in your Gemfile +# gem 'mysql2' +# +# And be sure to use new-style password hashing: +# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html +# +default: &default +# adapter: mysql2 +# host: 127.0.0.1 +# encoding: utf8 +# pool: <%#= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> +# username: root +# password: 123456 +# socket: /var/run/mysqld/mysqld.sock +# gitea_server: +# adapter: mysql2 +# database: gitea_development +# host: 127.0.0.1 +# username: root +# password: "123456" +# encoding: utf8 + + adapter: mysql2 + database: testforgeplus +# database: test_osredmweb +# host: 10.9.70.25 + host: 127.0.0.1 + username: root +# password: "Trust_#%01" + password: "123456" + encoding: utf8mb4 + reconnect: true + ci_server_db: + adapter: mysql2 + database: drone + port: 43306 + host: 106.75.110.152 + username: root + password: "R?X:FLI6u,7;" + encoding: utf8 + gitea_server: + adapter: mysql2 + database: testgitea8 + port: 3306 +# host: 10.9.70.25 + host: 127.0.0.1 + username: root +# password: "Trust_#%01" + password: "123456" + encoding: utf8 + trustie_web_server: + adapter: mysql2 + database: trustietest + port: 3306 +# host: 10.9.70.25 + host: 127.0.0.1 + username: root +# password: "Trust_#%01" + password: "123456" + encoding: utf8 + + +development: + <<: *default +# host: 127.0.0.1 +# database: testforgeplus + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: forge_test + +# As with config/secrets.yml, you never want to store sensitive information, +# like your database password, in your source code. If your source code is +# ever seen by anyone, they now have access to your database. +# +# Instead, provide the password as a unix environment variable when you boot +# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database +# for a full rundown on how to provide these environment variables in a +# production deployment. +# +# On Heroku and other platform providers, you may have a full connection URL +# available as an environment variable. For example: +# +# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" +# +# You can use this database configuration with: +# +# production: +# url: <%= ENV['DATABASE_URL'] %> +# +production: + <<: *default + database: testforgeplus From 78545d0f9c974c53eb37af2320c06487abda0fbb Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 12 Jan 2023 18:05:01 +0800 Subject: [PATCH 36/36] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/elasticsearch.yml.example | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 config/elasticsearch.yml.example diff --git a/config/elasticsearch.yml.example b/config/elasticsearch.yml.example new file mode 100644 index 000000000..e69de29bb