From a434fc59f5304432eb57cbcaf4c3da28eb590cf9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 15 Oct 2024 14:04:07 +0800 Subject: [PATCH 01/41] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E6=A0=B9?= =?UTF-8?q?=E6=8D=AEid=E6=9F=A5=E8=AF=A2issue=20pr=E7=BC=A9=E5=B0=8F?= =?UTF-8?q?=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/issues/journals_controller.rb | 2 +- app/controllers/api/v1/issues_controller.rb | 2 +- app/controllers/mark_files_controller.rb | 2 +- app/controllers/pull_requests_controller.rb | 4 ++-- app/controllers/reviews_controller.rb | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/issues/journals_controller.rb b/app/controllers/api/v1/issues/journals_controller.rb index 4a88c1b0f..a549714ff 100644 --- a/app/controllers/api/v1/issues/journals_controller.rb +++ b/app/controllers/api/v1/issues/journals_controller.rb @@ -46,7 +46,7 @@ class Api::V1::Issues::JournalsController < Api::V1::BaseController end def load_issue - @issue = @project.issues.issue_issue.where(project_issues_index: params[:index]).where.not(id: params[:index]).take || Issue.find_by_id(params[:index]) + @issue = @project.issues.issue_issue.where(project_issues_index: params[:index]).where.not(id: params[:index]).take || @project.issues.issue_issue.find_by_id(params[:index]) if @issue.blank? render_not_found("疑修不存在!") end diff --git a/app/controllers/api/v1/issues_controller.rb b/app/controllers/api/v1/issues_controller.rb index 76185a16b..87b7c051e 100644 --- a/app/controllers/api/v1/issues_controller.rb +++ b/app/controllers/api/v1/issues_controller.rb @@ -70,7 +70,7 @@ class Api::V1::IssuesController < Api::V1::BaseController private def load_issue - @issue = @project.issues.issue_issue.where(project_issues_index: params[:index]).where.not(id: params[:index]).take || Issue.find_by_id(params[:index]) + @issue = @project.issues.issue_issue.where(project_issues_index: params[:index]).where.not(id: params[:index]).take || @project.issues.issue_issue.find_by_id(params[:index]) if @issue.blank? render_not_found("疑修不存在!") end diff --git a/app/controllers/mark_files_controller.rb b/app/controllers/mark_files_controller.rb index a7ec304fd..f21b759fb 100644 --- a/app/controllers/mark_files_controller.rb +++ b/app/controllers/mark_files_controller.rb @@ -50,7 +50,7 @@ class MarkFilesController < ApplicationController end def load_pull_request - @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || @project.pull_requests.find_by_id(params[:id]) end end \ No newline at end of file diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 1fe079f29..dd10ddad1 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -295,11 +295,11 @@ class PullRequestsController < ApplicationController private def load_pull_request - @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || @project.pull_requests.find_by_id(params[:id]) end def find_pull_request - @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || @project.pull_requests.find_by_id(params[:id]) @issue = @pull_request&.issue if @pull_request.blank? normal_status(-1, "合并请求不存在") diff --git a/app/controllers/reviews_controller.rb b/app/controllers/reviews_controller.rb index b5fedfae0..8ad90e5f0 100644 --- a/app/controllers/reviews_controller.rb +++ b/app/controllers/reviews_controller.rb @@ -14,7 +14,7 @@ class ReviewsController < ApplicationController end def load_pull_request - @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || PullRequest.find_by_id(params[:id]) + @pull_request = @project.pull_requests.where(gitea_number: params[:id]).where.not(id: params[:id]).take || @project.pull_requests.find_by_id(params[:id]) end end \ No newline at end of file From 9db6713a34bc79da6f49882d9a6fdeeb6c584bdb Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:14:33 +0800 Subject: [PATCH 02/41] =?UTF-8?q?gitea=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 45 +++++++++++++++-------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index c824b6ce3..7a855871c 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -32,23 +32,38 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s - if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") - domain = GiteaService.gitea_config[:domain] - api_url = GiteaService.gitea_config[:base_url] - url = ("/repos"+url.split(base_url + "/api")[1]) - filepath, ref = url.split("/")[-1].split("?") - url.gsub!(url.split("/")[-1], '') - Rails.logger.info("url===#{url}") - Rails.logger.info(filepath) - request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join - Rails.logger.info("request_url===#{request_url}") - response = Faraday.get(request_url) - filename = filepath + md5_file = Base64.strict_encode64(params[:download_url]) + tmp_path = "#{Rails.root}/public/files/#{Time.now.strftime('%Y%m%d%')}-#{md5_file}" + cache_key ="get_file:#{Time.now.strftime('%Y%m%d%')}:#{md5_file}" + value = Rails.cache.read(cache_key) + if value.to_i >= 5 && File.exist?(tmp_path) + send_data(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') else - response = Faraday.get(URI.encode(url)) - filename = params[:download_url].to_s.split("/").pop() + if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") + domain = GiteaService.gitea_config[:domain] + api_url = GiteaService.gitea_config[:base_url] + url = ("/repos"+url.split(base_url + "/api")[1]) + filepath, ref = url.split("/")[-1].split("?") + url.gsub!(url.split("/")[-1], '') + Rails.logger.info("url===#{url}") + Rails.logger.info(filepath) + request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join + Rails.logger.info("request_url===#{request_url}") + response = Faraday.get(request_url) + filename = filepath + else + response = Faraday.get(URI.encode(url)) + filename = params[:download_url].to_s.split("/").pop() + end + if value.to_i == 0 + File.open(tmp_path, 'wb') do |file| + file.write(response.body) + end + end + value = value.to_i + 1 + Rails.cache.write(cache_key, value, expires_in: 1.day) + send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') end - send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') end def create From 04a8d194ccbce5138c8c92344312ff02368f0bf8 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:28:20 +0800 Subject: [PATCH 03/41] =?UTF-8?q?gitea=E6=96=87=E4=BB=B6=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E7=BC=93=E5=AD=98,=E6=9B=B4=E6=94=B9=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 7a855871c..eb73ea3f7 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -33,8 +33,9 @@ class AttachmentsController < ApplicationController normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s md5_file = Base64.strict_encode64(params[:download_url]) - tmp_path = "#{Rails.root}/public/files/#{Time.now.strftime('%Y%m%d%')}-#{md5_file}" - cache_key ="get_file:#{Time.now.strftime('%Y%m%d%')}:#{md5_file}" + FileUtils.mkdir_p("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") unless Dir.exists?("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") + tmp_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/#{Time.now.strftime('%Y%m%d')}-#{md5_file}" + cache_key ="get_file:#{Time.now.strftime('%Y%m%d')}:#{md5_file}" value = Rails.cache.read(cache_key) if value.to_i >= 5 && File.exist?(tmp_path) send_data(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') From fec67e64e52d639b7c528c8bd02e061f629b7dac Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:47:58 +0800 Subject: [PATCH 04/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,=E6=9B=B4=E6=94=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index eb73ea3f7..398b7fcc4 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -32,22 +32,26 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s + if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") + url = ("/repos"+url.to_s.split(base_url + "/api")[1]) + filepath, ref = url.to_s.split("/")[-1].to_s.split("?") + url.gsub!(url.to_s.split("/")[-1], '') + else + filepath, ref = url.to_s.split("/")[-1].to_s.split("?") + end + Rails.logger.info("url===#{url}") + Rails.logger.info(filepath) md5_file = Base64.strict_encode64(params[:download_url]) FileUtils.mkdir_p("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") unless Dir.exists?("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") tmp_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/#{Time.now.strftime('%Y%m%d')}-#{md5_file}" cache_key ="get_file:#{Time.now.strftime('%Y%m%d')}:#{md5_file}" value = Rails.cache.read(cache_key) if value.to_i >= 5 && File.exist?(tmp_path) - send_data(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') + send_data(tmp_path, filename: filepath, type: "application/octet-stream", disposition: 'attachment') else if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") domain = GiteaService.gitea_config[:domain] api_url = GiteaService.gitea_config[:base_url] - url = ("/repos"+url.split(base_url + "/api")[1]) - filepath, ref = url.split("/")[-1].split("?") - url.gsub!(url.split("/")[-1], '') - Rails.logger.info("url===#{url}") - Rails.logger.info(filepath) request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join Rails.logger.info("request_url===#{request_url}") response = Faraday.get(request_url) From f896735710543b5c825b29d1db7e71ade0005ec4 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:51:59 +0800 Subject: [PATCH 05/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,=E6=9B=B4=E6=94=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 398b7fcc4..30de26915 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -32,26 +32,23 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s - if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") - url = ("/repos"+url.to_s.split(base_url + "/api")[1]) - filepath, ref = url.to_s.split("/")[-1].to_s.split("?") - url.gsub!(url.to_s.split("/")[-1], '') - else - filepath, ref = url.to_s.split("/")[-1].to_s.split("?") - end - Rails.logger.info("url===#{url}") - Rails.logger.info(filepath) md5_file = Base64.strict_encode64(params[:download_url]) FileUtils.mkdir_p("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") unless Dir.exists?("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") tmp_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/#{Time.now.strftime('%Y%m%d')}-#{md5_file}" cache_key ="get_file:#{Time.now.strftime('%Y%m%d')}:#{md5_file}" value = Rails.cache.read(cache_key) if value.to_i >= 5 && File.exist?(tmp_path) + filepath, ref = url.split("/")[-1].split("?") send_data(tmp_path, filename: filepath, type: "application/octet-stream", disposition: 'attachment') else if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") domain = GiteaService.gitea_config[:domain] api_url = GiteaService.gitea_config[:base_url] + url = ("/repos"+url.split(base_url + "/api")[1]) + filepath, ref = url.split("/")[-1].split("?") + url.gsub!(url.split("/")[-1], '') + Rails.logger.info("url===#{url}") + Rails.logger.info(filepath) request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join Rails.logger.info("request_url===#{request_url}") response = Faraday.get(request_url) From 0dd1748f1bf27419d451313f7abcc2a9d402cc6a Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 11:58:53 +0800 Subject: [PATCH 06/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,=E6=9B=B4=E6=94=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 30de26915..a668a0691 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -39,7 +39,7 @@ class AttachmentsController < ApplicationController value = Rails.cache.read(cache_key) if value.to_i >= 5 && File.exist?(tmp_path) filepath, ref = url.split("/")[-1].split("?") - send_data(tmp_path, filename: filepath, type: "application/octet-stream", disposition: 'attachment') + send_data(tmp_path, filename: filepath, stream:false, type: 'application/octet-stream') else if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") domain = GiteaService.gitea_config[:domain] From bffecfc0e4db4a95484e0ec06db65742082ddbe7 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 12:00:31 +0800 Subject: [PATCH 07/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,=E6=9B=B4=E6=94=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index a668a0691..8a599cb04 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -39,7 +39,7 @@ class AttachmentsController < ApplicationController value = Rails.cache.read(cache_key) if value.to_i >= 5 && File.exist?(tmp_path) filepath, ref = url.split("/")[-1].split("?") - send_data(tmp_path, filename: filepath, stream:false, type: 'application/octet-stream') + send_file(tmp_path, filename: filepath, stream:false, type: 'application/octet-stream') else if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") domain = GiteaService.gitea_config[:domain] From c37a0768689daf41e8fa0c1ba7bdd0b306955cd1 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 14:22:12 +0800 Subject: [PATCH 08/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,md5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 8a599cb04..11208171c 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -32,7 +32,7 @@ class AttachmentsController < ApplicationController def get_file normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s - md5_file = Base64.strict_encode64(params[:download_url]) + md5_file = Digest::MD5.hexdigest(params[:download_url]) FileUtils.mkdir_p("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") unless Dir.exists?("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") tmp_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/#{Time.now.strftime('%Y%m%d')}-#{md5_file}" cache_key ="get_file:#{Time.now.strftime('%Y%m%d')}:#{md5_file}" @@ -51,20 +51,16 @@ class AttachmentsController < ApplicationController Rails.logger.info(filepath) request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join Rails.logger.info("request_url===#{request_url}") - response = Faraday.get(request_url) + file = Util.download_file(request_url, tmp_path) filename = filepath else - response = Faraday.get(URI.encode(url)) + file = Util.download_file(URI.encode(url), tmp_path) filename = params[:download_url].to_s.split("/").pop() end - if value.to_i == 0 - File.open(tmp_path, 'wb') do |file| - file.write(response.body) - end - end value = value.to_i + 1 Rails.cache.write(cache_key, value, expires_in: 1.day) - send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') + # send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') + send_data(file, filename: filename, type: "application/octet-stream", disposition: 'attachment') end end From 8a1453039554dbc08c6931c1a7f80620c5d68dbd Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 14:25:36 +0800 Subject: [PATCH 09/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,md5=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 11208171c..7d5e666af 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -60,7 +60,7 @@ class AttachmentsController < ApplicationController value = value.to_i + 1 Rails.cache.write(cache_key, value, expires_in: 1.day) # send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') - send_data(file, filename: filename, type: "application/octet-stream", disposition: 'attachment') + send_file(file, filename: filename, type: "application/octet-stream", disposition: 'attachment') end end From f33e583ca40c05ee570eb43b5adb0237f1bfe344 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 14:26:57 +0800 Subject: [PATCH 10/41] =?UTF-8?q?fixed=20gitea=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E7=BC=93=E5=AD=98,md5=20tmp=5Fpath?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 7d5e666af..b4628bff1 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -60,7 +60,7 @@ class AttachmentsController < ApplicationController value = value.to_i + 1 Rails.cache.write(cache_key, value, expires_in: 1.day) # send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') - send_file(file, filename: filename, type: "application/octet-stream", disposition: 'attachment') + send_file(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') end end From 17c8866d64c7af24c085d2c5aba01e0c444efdc0 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 14:37:35 +0800 Subject: [PATCH 11/41] =?UTF-8?q?fixed=20get=5Ffile=20ref=E7=A9=BA?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index b4628bff1..fbe79f27d 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -49,7 +49,8 @@ class AttachmentsController < ApplicationController url.gsub!(url.split("/")[-1], '') Rails.logger.info("url===#{url}") Rails.logger.info(filepath) - request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{URI.escape(ref.split('ref=')[1])}&access_token=#{User.where(admin: true).take&.gitea_token}"].join + ref = ref.blank? ? "" : URI.escape(ref.split('ref=')[1]) + request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{ref}&access_token=#{User.where(admin: true).take&.gitea_token}"].join Rails.logger.info("request_url===#{request_url}") file = Util.download_file(request_url, tmp_path) filename = filepath From fc972a9cad384cbb95a852af4afb98ae4d6b10da Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 15:28:40 +0800 Subject: [PATCH 12/41] fixed get_file request.referer --- app/controllers/attachments_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index fbe79f27d..9a720fbaf 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -30,6 +30,7 @@ class AttachmentsController < ApplicationController def get_file + Rails.logger.info("request.referer===#{request.referer}") normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s md5_file = Digest::MD5.hexdigest(params[:download_url]) From 2084698801d8369d02a548c89ac8e8b36a59ed34 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 15:57:48 +0800 Subject: [PATCH 13/41] =?UTF-8?q?fixed=20get=5Ffile=20request.referer=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 9a720fbaf..0ee0363af 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -30,6 +30,7 @@ class AttachmentsController < ApplicationController def get_file + Rails.logger.info("request.host===#{request.host}") Rails.logger.info("request.referer===#{request.referer}") normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s From c89493d6e94747667e2dfe6ba1af2f10b30ce546 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 16:06:26 +0800 Subject: [PATCH 14/41] =?UTF-8?q?fixed=20get=5Ffile=20request.referer=20?= =?UTF-8?q?=E9=98=B2=E7=9B=97=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 0ee0363af..0746f3d1b 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -30,8 +30,7 @@ class AttachmentsController < ApplicationController def get_file - Rails.logger.info("request.host===#{request.host}") - Rails.logger.info("request.referer===#{request.referer}") + tip_exception(403, "你没有权限访问") if request.host.present? && !request.referer.to_s.include?(request.host.to_s.gsub("www.","")) normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s md5_file = Digest::MD5.hexdigest(params[:download_url]) From ba7f36c34c751a2a3e74268c4c9ec1e123c8082b Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 17 Oct 2024 16:21:19 +0800 Subject: [PATCH 15/41] =?UTF-8?q?fixed=20get=5Ffile=20request.referer=20?= =?UTF-8?q?=E9=98=B2=E7=9B=97=E9=93=BE=E4=BC=98=E5=8C=96=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attachments_controller.rb | 43 ++++++++++------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb index 0746f3d1b..e4038fafa 100644 --- a/app/controllers/attachments_controller.rb +++ b/app/controllers/attachments_controller.rb @@ -30,40 +30,33 @@ class AttachmentsController < ApplicationController def get_file + Rails.logger.info("request.host===#{request.host},request.referer===#{request.referer}") tip_exception(403, "你没有权限访问") if request.host.present? && !request.referer.to_s.include?(request.host.to_s.gsub("www.","")) normal_status(-1, "参数缺失") if params[:download_url].blank? url = base_url.starts_with?("https:") ? params[:download_url].to_s.gsub("http:", "https:") : params[:download_url].to_s md5_file = Digest::MD5.hexdigest(params[:download_url]) FileUtils.mkdir_p("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") unless Dir.exists?("#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/") tmp_path = "#{Rails.root}#{EduSetting.get("attachment_folder")}gitea/#{Time.now.strftime('%Y%m%d')}-#{md5_file}" - cache_key ="get_file:#{Time.now.strftime('%Y%m%d')}:#{md5_file}" - value = Rails.cache.read(cache_key) - if value.to_i >= 5 && File.exist?(tmp_path) + if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") + domain = GiteaService.gitea_config[:domain] + api_url = GiteaService.gitea_config[:base_url] + url = ("/repos"+url.split(base_url + "/api")[1]) filepath, ref = url.split("/")[-1].split("?") - send_file(tmp_path, filename: filepath, stream:false, type: 'application/octet-stream') + url.gsub!(url.split("/")[-1], '') + # Rails.logger.info("url===#{url}") + Rails.logger.info(filepath) + ref = ref.blank? ? "" : URI.escape(ref.split('ref=')[1]) + request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{ref}&access_token=#{User.where(admin: true).take&.gitea_token}"].join + Rails.logger.info("request_url===#{request_url}") + File.delete(tmp_path) if File.exist?(tmp_path) # 删除之前的文件 + Util.download_file(request_url, tmp_path) + filename = filepath else - if url.starts_with?(base_url) && !url.starts_with?("#{base_url}/repo") - domain = GiteaService.gitea_config[:domain] - api_url = GiteaService.gitea_config[:base_url] - url = ("/repos"+url.split(base_url + "/api")[1]) - filepath, ref = url.split("/")[-1].split("?") - url.gsub!(url.split("/")[-1], '') - Rails.logger.info("url===#{url}") - Rails.logger.info(filepath) - ref = ref.blank? ? "" : URI.escape(ref.split('ref=')[1]) - request_url = [domain, api_url, URI.encode(url), URI.escape(filepath), "?ref=#{ref}&access_token=#{User.where(admin: true).take&.gitea_token}"].join - Rails.logger.info("request_url===#{request_url}") - file = Util.download_file(request_url, tmp_path) - filename = filepath - else - file = Util.download_file(URI.encode(url), tmp_path) - filename = params[:download_url].to_s.split("/").pop() - end - value = value.to_i + 1 - Rails.cache.write(cache_key, value, expires_in: 1.day) - # send_data(response.body.force_encoding("UTF-8"), filename: filename, type: "application/octet-stream", disposition: 'attachment') - send_file(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') + File.delete(tmp_path) if File.exist?(tmp_path) # 删除之前的文件 + Util.download_file(URI.encode(url), tmp_path) + filename = params[:download_url].to_s.split("/").pop() end + send_file(tmp_path, filename: filename, type: "application/octet-stream", disposition: 'attachment') end def create From e8112212bb9082a9c92e6b01074f75603cf452e8 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 18 Oct 2024 16:32:21 +0800 Subject: [PATCH 16/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9Acommit=20messa?= =?UTF-8?q?ge=E5=85=B3=E8=81=94issue=E6=93=8D=E4=BD=9C=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/commit_logs_controller.rb | 6 +++++ app/controllers/concerns/git_helper.rb | 8 ++++++ .../change_issue_status_by_message_job.rb | 27 +++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 app/jobs/change_issue_status_by_message_job.rb diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb index c3bbf9c16..fc97182e3 100644 --- a/app/controllers/commit_logs_controller.rb +++ b/app/controllers/commit_logs_controller.rb @@ -25,6 +25,12 @@ class CommitLogsController < ApplicationController commit_log.project_trends.create(user_id: user.id, project_id: project&.id, action_type: "create") if user.id !=2 # 统计数据新增 CacheAsyncSetJob.perform_later("project_common_service", {commits: 1}, project.id) + + # 触发变更issue状态的job + close_issue_content = message.to_s.scan(/\b(Close|Closes|Closed|Closing|close|closes|closed|closing)\s*(#\d+(,\s*#\d+)*)?\b/) + ChangeIssueStatusByMessageJob.perform_later(project, user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? + solve_issue_content = message.to_s.scan(/\b(Fix|Fixes|Fixed|Fixing|fix|fixes|fixed|fixing|Resolve|Resolves|Resolved|Resolving|resolve|resolves|resolved|resolving|Implement|Implements|Implemented|Implementing|implement|implements|implemented|implementing)\s*(#\d+(,\s*#\d+)*)?\b/) + ChangeIssueStatusByMessageJob.perform_later(project, user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? end end diff --git a/app/controllers/concerns/git_helper.rb b/app/controllers/concerns/git_helper.rb index ede90dc6c..9a48e5ed5 100644 --- a/app/controllers/concerns/git_helper.rb +++ b/app/controllers/concerns/git_helper.rb @@ -77,4 +77,12 @@ module GitHelper cha_path = path.present? ? path.split(";") : [] cha_path.reject(&:blank?)[0].try(:strip) end + + def expain_issue_commit(commit_message) + respace_arr= commit_message.to_s.scan(/#(\d+)/).map{|s|[s[0], "##{s[0]}"]}.uniq.sort_by{|s|-s[0].to_i} + respace_arr.each do |item| + issue = Issue.find_by_id(item[0].to_i) + + end + end end \ No newline at end of file diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb new file mode 100644 index 000000000..03b0fccec --- /dev/null +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -0,0 +1,27 @@ +class ChangeIssueStatusByMessageJob < ApplicationJob + queue_as :notify + + # Close, Closes, Closed, Closing, close, closes, closed, closing + # Fix, Fixes, Fixed, Fixing, fix, fixes, fixed, fixing + # Resolve, Resolves, Resolved, Resolving, resolve, resolves, resolved, resolving + # Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing + # 以上关键词后接 issue_id 例如:Closes #234 Closes #123, #245, #992 + + def perform(project, user, tag_issue_id_content, status_id=1) + Rails.logger.info "需要操作的issue_id内容为 #{tag_issue_id_content}" + tag_issue_id_content = tag_issue_id_content.gsub(/\s+/, '') + tag_issue_id_content.to_s.split(",").each do |tag_issue| + issue_id = tag_issue.gsub('#', '') + issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) + next unless issue.present? # issue不存在 跳过 + next if issue.project.present? && !user.admin? && !project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 + next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) + if issue.pm_project_id.present? + Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + else + Api::V1::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + end + end + end +end \ No newline at end of file From ee1b7c8f57109da737b98db48b3cdfe64395c75e Mon Sep 17 00:00:00 2001 From: yystopf Date: Sat, 19 Oct 2024 10:48:38 +0800 Subject: [PATCH 17/41] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9Acommit?= =?UTF-8?q?=E5=85=B3=E8=81=94issue=E6=93=8D=E4=BD=9C=E8=80=85=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E4=B8=BA=E6=8F=90=E4=BA=A4=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/commit_logs_controller.rb | 8 ++++++-- app/jobs/change_issue_status_by_message_job.rb | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb index fc97182e3..e32844994 100644 --- a/app/controllers/commit_logs_controller.rb +++ b/app/controllers/commit_logs_controller.rb @@ -26,11 +26,15 @@ class CommitLogsController < ApplicationController # 统计数据新增 CacheAsyncSetJob.perform_later("project_common_service", {commits: 1}, project.id) + commit_user = User.find_by(mail: commit[:committer][:email]) rescue nil + commit_user = User.find_by(login: commit[:committer][:name]) if commit_user.blank? rescue nil + next if commit_user.blank? + # 触发变更issue状态的job close_issue_content = message.to_s.scan(/\b(Close|Closes|Closed|Closing|close|closes|closed|closing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(project, commit_user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? solve_issue_content = message.to_s.scan(/\b(Fix|Fixes|Fixed|Fixing|fix|fixes|fixed|fixing|Resolve|Resolves|Resolved|Resolving|resolve|resolves|resolved|resolving|Implement|Implements|Implemented|Implementing|implement|implements|implemented|implementing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(project, commit_user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? end end diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 03b0fccec..0e456b7cb 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -14,7 +14,7 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue_id = tag_issue.gsub('#', '') issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 - next if issue.project.present? && !user.admin? && !project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 + next if issue.project.present? && !user.admin? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? From 151e028d345f76f3e0714beee217df7144f3077c Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 21 Oct 2024 10:45:30 +0800 Subject: [PATCH 18/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=E8=AE=B0=E5=BD=95jour?= =?UTF-8?q?nal=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/commit_logs_controller.rb | 4 +- .../change_issue_status_by_message_job.rb | 6 +-- app/models/journal.rb | 1 + app/services/api/pm/issues/update_service.rb | 41 ++++++++++--------- app/services/api/v1/issues/update_service.rb | 27 ++++++------ ...410926031030_add_operate_by_to_journals.rb | 5 +++ 6 files changed, 46 insertions(+), 38 deletions(-) create mode 100644 db/migrate/202410926031030_add_operate_by_to_journals.rb diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb index e32844994..fbdea6d10 100644 --- a/app/controllers/commit_logs_controller.rb +++ b/app/controllers/commit_logs_controller.rb @@ -32,9 +32,9 @@ class CommitLogsController < ApplicationController # 触发变更issue状态的job close_issue_content = message.to_s.scan(/\b(Close|Closes|Closed|Closing|close|closes|closed|closing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, commit_user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(commit_id, project, commit_user, close_issue_content[0][1], 5) if close_issue_content[0].present? && close_issue_content[0][1].present? solve_issue_content = message.to_s.scan(/\b(Fix|Fixes|Fixed|Fixing|fix|fixes|fixed|fixing|Resolve|Resolves|Resolved|Resolving|resolve|resolves|resolved|resolving|Implement|Implements|Implemented|Implementing|implement|implements|implemented|implementing)\s*(#\d+(,\s*#\d+)*)?\b/) - ChangeIssueStatusByMessageJob.perform_later(project, commit_user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? + ChangeIssueStatusByMessageJob.perform_later(commit_id, project, commit_user, solve_issue_content[0][1], 3) if solve_issue_content[0].present? && solve_issue_content[0][1].present? end end diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 0e456b7cb..7db38a4dc 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -7,7 +7,7 @@ class ChangeIssueStatusByMessageJob < ApplicationJob # Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing # 以上关键词后接 issue_id 例如:Closes #234 Closes #123, #245, #992 - def perform(project, user, tag_issue_id_content, status_id=1) + def perform(commitsha, project, user, tag_issue_id_content, status_id=1) Rails.logger.info "需要操作的issue_id内容为 #{tag_issue_id_content}" tag_issue_id_content = tag_issue_id_content.gsub(/\s+/, '') tag_issue_id_content.to_s.split(",").each do |tag_issue| @@ -18,9 +18,9 @@ class ChangeIssueStatusByMessageJob < ApplicationJob next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? - Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") else - Api::V1::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user) + Api::V1::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") end end end diff --git a/app/models/journal.rb b/app/models/journal.rb index 377ca1331..b3a699c8f 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -22,6 +22,7 @@ # resolveer_id :integer # need_respond :boolean default("0") # updated_on :datetime +# operate_by :string(255) default("Issue") # # Indexes # diff --git a/app/services/api/pm/issues/update_service.rb b/app/services/api/pm/issues/update_service.rb index 661bd211f..21119ca9b 100644 --- a/app/services/api/pm/issues/update_service.rb +++ b/app/services/api/pm/issues/update_service.rb @@ -3,7 +3,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService include Api::V1::Issues::Concerns::Checkable include Api::V1::Issues::Concerns::Loadable - attr_reader :project, :issue, :current_user + attr_reader :project, :issue, :current_user, :operate_by attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num attr_reader :target_pm_project_id, :pm_sprint_id, :pm_issue_type, :root_id, :time_scale attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id @@ -12,10 +12,11 @@ class Api::Pm::Issues::UpdateService < ApplicationService validates :project, :issue, :current_user, presence: true validates :blockchain_token_num, numericality: {greater_than: 0}, allow_blank: true - def initialize(project, issue, params, current_user = nil) + def initialize(project, issue, params, current_user = nil, operate_by='Issue') @project = project @issue = issue @current_user = current_user + @operate_by = operate_by @status_id = params[:status_id] @priority_id = params[:priority_id] @milestone_id = params[:milestone_id] @@ -183,91 +184,91 @@ class Api::Pm::Issues::UpdateService < ApplicationService begin # 更改标题 if @updated_issue.previous_changes["subject"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "subject", old_value: @updated_issue.previous_changes["subject"][0], value: @updated_issue.previous_changes["subject"][1]}) end # 更改描述 if @updated_issue.previous_changes["description"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "description", old_value: @updated_issue.previous_changes["description"][0], value: @updated_issue.previous_changes["description"][1]}) end # 修改状态 if @updated_issue.previous_changes["status_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "status_id", old_value: @updated_issue.previous_changes["status_id"][0], value: @updated_issue.previous_changes["status_id"][1]}) end # 修改优先级 if @updated_issue.previous_changes["priority_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "priority_id", old_value: @updated_issue.previous_changes["priority_id"][0], value: @updated_issue.previous_changes["priority_id"][1]}) end # 修改工作项类型 if @updated_issue.previous_changes["pm_issue_type"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "pm_issue_type", old_value: @updated_issue.previous_changes["pm_issue_type"][0], value: @updated_issue.previous_changes["pm_issue_type"][1]}) end # 修改迭代 if @updated_issue.previous_changes["pm_sprint_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "pm_sprint_id", old_value: @updated_issue.previous_changes["pm_sprint_id"][0], value: @updated_issue.previous_changes["pm_sprint_id"][1]}) end # 修改代码库 if @updated_issue.previous_changes["project_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "project_id", old_value: @updated_issue.previous_changes["project_id"][0], value: @updated_issue.previous_changes["project_id"][1]}) end # 修改里程碑 if @updated_issue.previous_changes["fixed_version_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "fixed_version_id", old_value: @updated_issue.previous_changes["fixed_version_id"][0], value: @updated_issue.previous_changes["fixed_version_id"][1]}) end # 更改分支 if @updated_issue.previous_changes["branch_name"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "branch_name", old_value: @updated_issue.previous_changes["branch_name"][0], value: @updated_issue.previous_changes["branch_name"][1]}) end # 更改开始时间 if @updated_issue.previous_changes["start_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "start_date", old_value: @updated_issue.previous_changes["start_date"][0], value: @updated_issue.previous_changes["start_date"][1]}) end # 更改结束时间 if @updated_issue.previous_changes["due_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "due_date", old_value: @updated_issue.previous_changes["due_date"][0], value: @updated_issue.previous_changes["due_date"][1]}) end # 更改预估工时 if @updated_issue.previous_changes["time_scale"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "time_scale", old_value: @updated_issue.previous_changes["time_scale"][0], value: @updated_issue.previous_changes["time_scale"][1]}) end # 更改父工作项 if @updated_issue.previous_changes["root_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "root_id", old_value: @updated_issue.previous_changes["root_id"][0], value: @updated_issue.previous_changes["root_id"][1]}) # 更改子工作项 before_parent_issue = Issue.find_by_id(@updated_issue.previous_changes["root_id"][0]) if before_parent_issue.present? - journal = before_parent_issue.journals.create!({user_id: current_user.id}) + journal = before_parent_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "tag_leaf_issue", old_value: @updated_issue.id.to_s}) end after_parent_issue = Issue.find_by_id(@updated_issue.previous_changes["root_id"][1]) if after_parent_issue.present? - journal = after_parent_issue.journals.create!({user_id: current_user.id}) + journal = after_parent_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: @updated_issue.pm_issue_type_string, prop_key: "tag_leaf_issue", value: @updated_issue.id.to_s}) end end @@ -283,7 +284,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_assigner_ids = [] if @assigner_ids.nil? now_assigner_ids = @updated_issue.assigners.pluck(:id) if !(now_assigner_ids.sort == new_assigner_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "assigner", prop_key: "#{new_assigner_ids.size}", old_value: now_assigner_ids.join(","), value: new_assigner_ids.join(",")}) end @@ -299,7 +300,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_issue_tag_ids = [] if @issue_tag_ids.nil? now_issue_tag_ids = @updated_issue.issue_tags.pluck(:id) if !(now_issue_tag_ids.sort == new_issue_tag_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "issue_tag", prop_key: "#{new_issue_tag_ids.size}", old_value: now_issue_tag_ids.join(","), value: new_issue_tag_ids.join(",")}) end rescue @@ -315,7 +316,7 @@ class Api::Pm::Issues::UpdateService < ApplicationService new_attachment_ids = [] if @attachment_ids.nil? now_attachment_ids = @updated_issue.attachments.pluck(:id) if !(now_attachment_ids.sort == new_attachment_ids.sort) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attachment", prop_key: "#{new_attachment_ids.size}", old_value: now_attachment_ids.join(","), value: new_attachment_ids.join(",")}) end rescue diff --git a/app/services/api/v1/issues/update_service.rb b/app/services/api/v1/issues/update_service.rb index 10f814300..21f2b9267 100644 --- a/app/services/api/v1/issues/update_service.rb +++ b/app/services/api/v1/issues/update_service.rb @@ -3,7 +3,7 @@ class Api::V1::Issues::UpdateService < ApplicationService include Api::V1::Issues::Concerns::Checkable include Api::V1::Issues::Concerns::Loadable - attr_reader :project, :issue, :current_user + attr_reader :project, :issue, :current_user, :operate_by attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num attr_reader :target_pm_project_id, :pm_sprint_id, :pm_issue_type, :root_id, :time_scale attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id @@ -12,10 +12,11 @@ class Api::V1::Issues::UpdateService < ApplicationService validates :project, :issue, :current_user, presence: true validates :blockchain_token_num, numericality: {greater_than: 0}, allow_blank: true - def initialize(project, issue, params, current_user = nil) + def initialize(project, issue, params, current_user = nil, operate_by='Issue') @project = project @issue = issue @current_user = current_user + @operate_by = operate_by @status_id = params[:status_id] @priority_id = params[:priority_id] @milestone_id = params[:milestone_id] @@ -183,49 +184,49 @@ class Api::V1::Issues::UpdateService < ApplicationService begin # 更改标题 if @updated_issue.previous_changes["subject"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "subject", old_value: @updated_issue.previous_changes["subject"][0], value: @updated_issue.previous_changes["subject"][1]}) end # 更改描述 if @updated_issue.previous_changes["description"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "description", old_value: @updated_issue.previous_changes["description"][0], value: @updated_issue.previous_changes["description"][1]}) end # 修改状态 if @updated_issue.previous_changes["status_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "status_id", old_value: @updated_issue.previous_changes["status_id"][0], value: @updated_issue.previous_changes["status_id"][1]}) end # 修改优先级 if @updated_issue.previous_changes["priority_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "priority_id", old_value: @updated_issue.previous_changes["priority_id"][0], value: @updated_issue.previous_changes["priority_id"][1]}) end # 修改里程碑 if @updated_issue.previous_changes["fixed_version_id"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "fixed_version_id", old_value: @updated_issue.previous_changes["fixed_version_id"][0], value: @updated_issue.previous_changes["fixed_version_id"][1]}) end # 更改分支 if @updated_issue.previous_changes["branch_name"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "branch_name", old_value: @updated_issue.previous_changes["branch_name"][0], value: @updated_issue.previous_changes["branch_name"][1]}) end # 更改开始时间 if @updated_issue.previous_changes["start_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "start_date", old_value: @updated_issue.previous_changes["start_date"][0], value: @updated_issue.previous_changes["start_date"][1]}) end # 更改结束时间 if @updated_issue.previous_changes["due_date"].present? - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attr", prop_key: "due_date", old_value: @updated_issue.previous_changes["due_date"][0], value: @updated_issue.previous_changes["due_date"][1]}) end rescue @@ -240,7 +241,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_assigner_ids = [] if @assigner_ids.nil? now_assigner_ids = @updated_issue.assigners.pluck(:id) if !(now_assigner_ids & assigner_ids).empty? || !(now_assigner_ids.empty? && new_assigner_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "assigner", prop_key: "#{new_assigner_ids.size}", old_value: now_assigner_ids.join(","), value: new_assigner_ids.join(",")}) end @@ -256,7 +257,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_issue_tag_ids = [] if @issue_tag_ids.nil? now_issue_tag_ids = @updated_issue.issue_tags.pluck(:id) if !(now_issue_tag_ids & new_issue_tag_ids).empty? || !(now_issue_tag_ids.empty? && new_issue_tag_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "issue_tag", prop_key: "#{new_issue_tag_ids.size}", old_value: now_issue_tag_ids.join(","), value: new_issue_tag_ids.join(",")}) end rescue @@ -272,7 +273,7 @@ class Api::V1::Issues::UpdateService < ApplicationService new_attachment_ids = [] if @attachment_ids.nil? now_attachment_ids = @updated_issue.attachments.pluck(:id) if !(now_attachment_ids & new_attachment_ids).empty? || !(now_attachment_ids.empty? && new_attachment_ids.empty?) - journal = @updated_issue.journals.create!({user_id: current_user.id}) + journal = @updated_issue.journals.create!({user_id: current_user.id, operate_by: @operate_by}) journal.journal_details.create!({property: "attachment", prop_key: "#{new_attachment_ids.size}", old_value: now_attachment_ids.join(","), value: new_attachment_ids.join(",")}) end rescue diff --git a/db/migrate/202410926031030_add_operate_by_to_journals.rb b/db/migrate/202410926031030_add_operate_by_to_journals.rb new file mode 100644 index 000000000..cfe6590c6 --- /dev/null +++ b/db/migrate/202410926031030_add_operate_by_to_journals.rb @@ -0,0 +1,5 @@ +class AddOperateByToJournals < ActiveRecord::Migration[5.2] + def change + add_column :journals, :operate_by, :string, default: 'Issue' + end +end From 256f29b7f4c3554c605d8a91c47df78f53c4e0a9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 21 Oct 2024 11:17:31 +0800 Subject: [PATCH 19/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=9D=A5=E6=BA=90=E8=A7=A3=E6=9E=90url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/journal.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/models/journal.rb b/app/models/journal.rb index b3a699c8f..f7f6800dc 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -83,6 +83,17 @@ class Journal < ApplicationRecord end end + def operate_by_content + return '' if self.operate_by == "Issue" + if self.operate_by.starts_with?("Project#") + project_id, commit_sha = self.operate_by.scan(/#(\d+).*?@(\w+)/)[0] + project =Project.find_by_id(project_id) + return "通过#{project&.owner&.real_name}/#{project&.name}" + end + rescue + return '' + end + def pm_operate_category detail = self.journal_details.take if %w(requirement task bug).include?(detail.property) && detail.prop_key.to_s == "1" @@ -93,7 +104,7 @@ class Journal < ApplicationRecord end def pm_operate_content - content = "" + content = "#{operate_by_content}" detail = self.journal_details.take case detail.property when 'requirement' @@ -501,7 +512,7 @@ class Journal < ApplicationRecord end def operate_content - content = "" + content = "#{operate_by_content}" detail = self.journal_details.take case detail.property when 'issue' From 12c020f3156e93c0b19961556c3634590df55885 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 21 Oct 2024 11:29:48 +0800 Subject: [PATCH 20/41] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9Ajournal?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/journal.rb | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/app/models/journal.rb b/app/models/journal.rb index f7f6800dc..8e3af8702 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -88,7 +88,7 @@ class Journal < ApplicationRecord if self.operate_by.starts_with?("Project#") project_id, commit_sha = self.operate_by.scan(/#(\d+).*?@(\w+)/)[0] project =Project.find_by_id(project_id) - return "通过#{project&.owner&.real_name}/#{project&.name}" + return "通过#{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" end rescue return '' @@ -165,7 +165,7 @@ class Journal < ApplicationRecord end return content else - return "创建了需求" + content += "创建了需求" end when 'task' case detail.prop_key @@ -225,7 +225,7 @@ class Journal < ApplicationRecord end return content else - return "创建了任务" + content += "创建了任务" end when 'bug' case detail.prop_key @@ -285,14 +285,14 @@ class Journal < ApplicationRecord end return content else - return "创建了缺陷" + content += "创建了缺陷" end when 'attr' case detail.prop_key when 'subject' - return "修改了标题" + content += "修改了标题" when 'description' - return "修改了正文" + content += "修改了正文" when 'priority_id' old_value = IssuePriority.find_by_id(detail.old_value)&.name new_value = IssuePriority.find_by_id(detail.value)&.name @@ -502,13 +502,15 @@ class Journal < ApplicationRecord issue = self.issue case issue.pm_issue_type when 1 - return "创建了需求" + content += "创建了需求" when 2 - return "创建了任务" + content += "创建了任务" when 3 - return "创建了缺陷" + content += "创建了缺陷" end end + + return content end def operate_content @@ -516,7 +518,7 @@ class Journal < ApplicationRecord detail = self.journal_details.take case detail.property when 'issue' - return "创建了疑修" + content += "创建了疑修" when 'attachment' old_value = Attachment.where("BINARY id in (?) or uuid in (?)", detail.old_value.to_s.split(","), detail.old_value.to_s.split(",")).pluck(:filename).join("、") new_value = Attachment.where("BINARY id in (?) or uuid in (?)", detail.value.to_s.split(","), detail.value.to_s.split(",")).pluck(:filename).join("、") @@ -545,12 +547,12 @@ class Journal < ApplicationRecord content += "将负责人由#{old_value}更改为#{new_value}" end when 'attr' - content = "将" + content += "将" case detail.prop_key when 'subject' - return "修改了标题" + content += "修改了标题" when 'description' - return "修改了描述" + content += "修改了描述" when 'status_id' old_value = IssueStatus.find_by_id(detail.old_value)&.name new_value = IssueStatus.find_by_id(detail.value)&.name From a3ee98125bb2b5d58aec9aa91f1802ba7f5bc511 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 21 Oct 2024 11:37:45 +0800 Subject: [PATCH 21/41] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20journal=E6=9D=A5?= =?UTF-8?q?=E6=BA=90=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/journal.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/journal.rb b/app/models/journal.rb index 8e3af8702..9094c2d71 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -88,7 +88,7 @@ class Journal < ApplicationRecord if self.operate_by.starts_with?("Project#") project_id, commit_sha = self.operate_by.scan(/#(\d+).*?@(\w+)/)[0] project =Project.find_by_id(project_id) - return "通过#{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" + return "通过#{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" end rescue return '' From 23c0bcbf365a550db80cdab19f942d3e39fb950b Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 18 Oct 2024 09:13:15 +0800 Subject: [PATCH 22/41] =?UTF-8?q?fixed=20oauth2=E7=94=A8=E6=88=B7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E8=A1=A8=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/me.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/users/me.json.jbuilder b/app/views/users/me.json.jbuilder index e2d3693ae..c6f8cdc88 100644 --- a/app/views/users/me.json.jbuilder +++ b/app/views/users/me.json.jbuilder @@ -1,4 +1,4 @@ -json.username @user.full_name +json.username @user.full_name.to_s.each_char.select { |c| c.bytes.first < 240 }.join('') json.login @user.login json.user_id @user.id json.image_url url_to_avatar(@user) From 6e6a15bbc1958d9d3fe08925c7c2d95536a32634 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Tue, 22 Oct 2024 09:27:53 +0800 Subject: [PATCH 23/41] =?UTF-8?q?fixed=20raw=20request.referer=20=E9=98=B2?= =?UTF-8?q?=E7=9B=97=E9=93=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 4 ++++ app/controllers/repositories_controller.rb | 1 + 2 files changed, 5 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d9dd9e2e6..ea050ebe5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -210,6 +210,10 @@ class ApplicationController < ActionController::Base tip_exception(401, "请登录后再操作") unless User.current.logged? end + def require_referer + tip_exception(403, "你没有权限访问") if request.host.present? && !request.referer.to_s.include?(request.host.to_s.gsub("www.","")) + end + def require_login_or_token if params[:token].present? user = User.try_to_autologin(params[:token]) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 536bda3a8..b7776bcfd 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -13,6 +13,7 @@ class RepositoriesController < ApplicationController before_action :get_ref, only: %i[entries sub_entries top_counts files archive] before_action :get_latest_commit, only: %i[entries sub_entries top_counts] before_action :get_statistics, only: %i[top_counts] + before_action :require_referer, only: [:raw] def files result = @project.educoder? ? nil : Gitea::Repository::Files::GetService.call(@owner, @project.identifier, @ref, params[:search], @owner.gitea_token) From 2cd36d019cdab3cb41dfd2a5b049e4aee9600999 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 22 Oct 2024 17:30:07 +0800 Subject: [PATCH 24/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=A1=B9=E7=9B=AE=E6=90=9C=E7=B4=A2=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/update_project_topic_job.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/jobs/update_project_topic_job.rb b/app/jobs/update_project_topic_job.rb index 52341d672..b3ef540aa 100644 --- a/app/jobs/update_project_topic_job.rb +++ b/app/jobs/update_project_topic_job.rb @@ -4,6 +4,7 @@ class UpdateProjectTopicJob < ApplicationJob queue_as :message def perform(project_id) + return unless $redis_cache.set("UpdateProjectTopicJob:#{project_id}", 1, nx: true, ex: 10.seconds) project = Project.find_by(id: project_id) return if project.blank? begin @@ -25,7 +26,9 @@ class UpdateProjectTopicJob < ApplicationJob topic_count +=1 end end + $redis_cache.del("UpdateProjectTopicJob:#{project_id}") rescue => e + $redis_cache.del("UpdateProjectTopicJob:#{project_id}") puts "get_repos_languages: error:#{e.message}" end end From 271e1f4ac724d49b955d51634a8317f210fa3623 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 23 Oct 2024 09:27:57 +0800 Subject: [PATCH 25/41] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=A0=87=E7=AD=BE=E5=85=B3=E8=81=94=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=A4=8D=E5=90=88=E5=94=AF=E4=B8=80=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/project_topic_ralate.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/project_topic_ralate.rb b/app/models/project_topic_ralate.rb index d8638699f..5c4c760a1 100644 --- a/app/models/project_topic_ralate.rb +++ b/app/models/project_topic_ralate.rb @@ -19,4 +19,8 @@ class ProjectTopicRalate < ApplicationRecord belongs_to :project_topic, counter_cache: :projects_count belongs_to :project + + validates :project_id, uniqueness: { scope: :project_topic_id } + + end From dd3c14e50ea3961ab97be746413ffeb6285102c1 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:11:14 +0800 Subject: [PATCH 26/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 48 ++++++++++++++++++++ app/libs/ci4s/service.rb | 58 ++++++++++++++++++++++++ app/models/open_users/ci4s.rb | 27 +++++++++++ config/routes.rb | 1 + 4 files changed, 134 insertions(+) create mode 100644 app/controllers/oauth/ci4s_controller.rb create mode 100644 app/libs/ci4s/service.rb create mode 100644 app/models/open_users/ci4s.rb diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb new file mode 100644 index 000000000..7ccc444bb --- /dev/null +++ b/app/controllers/oauth/ci4s_controller.rb @@ -0,0 +1,48 @@ +class Oauth::Ci4sController < Oauth::BaseController + include RegisterHelper + + + # 需要educoder那边设置回调地址 + def create + begin + code = params['code'].to_s.strip + tip_exception("code不能为空") if code.blank? + + new_user = false + token = Ci4s::Service.access_token(code) + # result = token[:account_info] + result = Ci4s::Service.user_info(result[:access_token]) + + # 存在该用户 + open_user = OpenUsers::Ci4s.find_by(uid: result['login']) + if open_user.present? && open_user.user.present? + successful_authentication(open_user.user) + redirect_to root_path(new_user: false) + return + else + if current_user.blank? || !current_user.logged? + new_user = true + session[:unionid] = result['username'] + # login = User.generate_login('E') + login = result['username'] + email = result['email'] + email = "#{login}@forge.com" if email.blank? + reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', result['mobile']) + if reg_result[:message].blank? + open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: result) + successful_authentication(open_user.user) + else + render_error(reg_result[:message]) + end + else + OpenUsers::Ci4s.create!(user: current_user, uid: result['login'], extra: result) + end + end + Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") + + redirect_to root_path(new_user: new_user) + rescue Exception => ex + render_error(ex.message) + end + end +end diff --git a/app/libs/ci4s/service.rb b/app/libs/ci4s/service.rb new file mode 100644 index 000000000..d931a513f --- /dev/null +++ b/app/libs/ci4s/service.rb @@ -0,0 +1,58 @@ +require 'oauth2' + +module Ci4s::Service + module_function + + def client_id + config = Rails.application.config_for(:configuration) + config.dig("oauth", "ci4s", "appid") + end + + def client_secret + config = Rails.application.config_for(:configuration) + config.dig("oauth", "ci4s", "appid") + end + + def base_url + config = Rails.application.config_for(:configuration) + config.dig("oauth", "ci4s", "base_url") + end + + def redirect_uri + config = Rails.application.config_for(:configuration) + config.dig("oauth", "ci4s", "redirect_uri") + end + + + def request(method, url, params) + begin + Rails.logger.info("[Ci4sOauth] [#{method.to_s.upcase}] #{url} || #{params}") + + client = Faraday.new(url: base_url) + response = client.public_send(method, url, params) + result = JSON.parse(response.body) + + Rails.logger.info("[Ci4sOauth] [#{response.status}] #{result}") + + result + rescue Exception => e + raise Gitlink::TipException.new(e.message) + end + end + + def access_token(code) + begin + Rails.logger.info("[Ci4sOauth] [code] #{code} ") + Rails.logger.info("[Ci4sOauth] [redirect_uri] #{redirect_uri} ") + client = OAuth2::Client.new(client_id, client_secret, site: base_url) + result = client.auth_code.get_token(code, redirect_uri: redirect_uri).to_hash + return result + rescue Exception => e + raise Gitlink::TipException.new(e.message) + end + end + + def user_info(access_token) + request(:get, '/user/info', {access_token: access_token}) + end +end \ No newline at end of file diff --git a/app/models/open_users/ci4s.rb b/app/models/open_users/ci4s.rb new file mode 100644 index 000000000..8a9e1f54c --- /dev/null +++ b/app/models/open_users/ci4s.rb @@ -0,0 +1,27 @@ +# == Schema Information +# +# Table name: open_users +# +# id :integer not null, primary key +# user_id :integer +# type :string(255) +# uid :string(255) +# created_at :datetime not null +# updated_at :datetime not null +# extra :text(65535) +# +# Indexes +# +# index_open_users_on_type_and_uid (type,uid) UNIQUE +# index_open_users_on_user_id (user_id) +# + +class OpenUsers::Ci4s < OpenUser + def nickname + extra&.[]('username') + end + + def en_type + 'ci4s' + end +end diff --git a/config/routes.rb b/config/routes.rb index 501a024b4..6a8677322 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,7 @@ Rails.application.routes.draw do get 'auth/failure', to: 'oauth/base#auth_failure' get 'auth/cas/callback', to: 'oauth/cas#create' get 'auth/acge/callback', to: "oauth/acge#create" + get 'auth/ci4s/callback', to: "oauth/ci4s#create" get 'auth/acge/refer', to: "oauth/acge#refer" get 'auth/:provider/callback', to: 'oauth/callbacks#create' From c0da80139a0dcb6df9bfba77756182e8be1e2b06 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:13:26 +0800 Subject: [PATCH 27/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/libs/ci4s/service.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/libs/ci4s/service.rb b/app/libs/ci4s/service.rb index d931a513f..57cd753b3 100644 --- a/app/libs/ci4s/service.rb +++ b/app/libs/ci4s/service.rb @@ -5,12 +5,12 @@ module Ci4s::Service def client_id config = Rails.application.config_for(:configuration) - config.dig("oauth", "ci4s", "appid") + config.dig("oauth", "ci4s", "client_id") end def client_secret config = Rails.application.config_for(:configuration) - config.dig("oauth", "ci4s", "appid") + config.dig("oauth", "ci4s", "client_secret") end def base_url From d038f30994ef29aa10e433fcc3935cff3567f4b1 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:19:02 +0800 Subject: [PATCH 28/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 4 ++++ app/libs/ci4s/service.rb | 3 +++ config/routes.rb | 1 + 3 files changed, 8 insertions(+) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index 7ccc444bb..543466563 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -2,6 +2,10 @@ class Oauth::Ci4sController < Oauth::BaseController include RegisterHelper + def oauth_url + Ci4s::Service.oauth_url(code) + end + # 需要educoder那边设置回调地址 def create begin diff --git a/app/libs/ci4s/service.rb b/app/libs/ci4s/service.rb index 57cd753b3..c67ccf5b9 100644 --- a/app/libs/ci4s/service.rb +++ b/app/libs/ci4s/service.rb @@ -23,6 +23,9 @@ module Ci4s::Service config.dig("oauth", "ci4s", "redirect_uri") end + def oauth_url + "#{base_url}/oauth/authorize?client_id=#{client_id}&redirect_uri=#{URI.encode_www_form_component(redirect_uri)}&response_type=code&grant_type=authorization_code" + end def request(method, url, params) begin diff --git a/config/routes.rb b/config/routes.rb index 6a8677322..3e9145ae7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -26,6 +26,7 @@ Rails.application.routes.draw do get 'auth/failure', to: 'oauth/base#auth_failure' get 'auth/cas/callback', to: 'oauth/cas#create' get 'auth/acge/callback', to: "oauth/acge#create" + get 'oauth_ci4s', to: "oauth/ci4s#oauth_url" get 'auth/ci4s/callback', to: "oauth/ci4s#create" get 'auth/acge/refer', to: "oauth/acge#refer" get 'auth/:provider/callback', to: 'oauth/callbacks#create' From c93ae8ebaefa9df22f87cff4fa4849b701c7d161 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:21:04 +0800 Subject: [PATCH 29/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index 543466563..a19fd987d 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -3,7 +3,7 @@ class Oauth::Ci4sController < Oauth::BaseController def oauth_url - Ci4s::Service.oauth_url(code) + redirect_to Ci4s::Service.oauth_url end # 需要educoder那边设置回调地址 From 36409600eaec6a287ccae5d3894595751a909cd1 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:23:44 +0800 Subject: [PATCH 30/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index a19fd987d..ec82e2de7 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -8,7 +8,7 @@ class Oauth::Ci4sController < Oauth::BaseController # 需要educoder那边设置回调地址 def create - begin + # begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? @@ -45,8 +45,8 @@ class Oauth::Ci4sController < Oauth::BaseController Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") redirect_to root_path(new_user: new_user) - rescue Exception => ex - render_error(ex.message) - end + # rescue Exception => ex + # render_error(ex.message) + # end end end From 04da22ed64455157dfc26aa9e16b5f25a0665043 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:25:11 +0800 Subject: [PATCH 31/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index ec82e2de7..ba76d370b 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -13,7 +13,8 @@ class Oauth::Ci4sController < Oauth::BaseController tip_exception("code不能为空") if code.blank? new_user = false - token = Ci4s::Service.access_token(code) + result = Ci4s::Service.access_token(code) + Rails.logger.info("[OAuth2] result -> #{result}") # result = token[:account_info] result = Ci4s::Service.user_info(result[:access_token]) From 45f597ab47b07ac841e08801d1c451739e220728 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:41:58 +0800 Subject: [PATCH 32/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/libs/ci4s/service.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/libs/ci4s/service.rb b/app/libs/ci4s/service.rb index c67ccf5b9..ebef5a4c5 100644 --- a/app/libs/ci4s/service.rb +++ b/app/libs/ci4s/service.rb @@ -31,7 +31,16 @@ module Ci4s::Service begin Rails.logger.info("[Ci4sOauth] [#{method.to_s.upcase}] #{url} || #{params}") - client = Faraday.new(url: base_url) + client ||= begin + Faraday.new(url: base_url) do |req| + req.request :url_encoded + req.headers['Content-Type'] = 'application/json' + req.response :logger # 显示日志 + req.adapter Faraday.default_adapter + req.authorization :Bearer, params[:access_token] + req.headers['Authorization'] + end + end response = client.public_send(method, url, params) result = JSON.parse(response.body) From 3a460b3b1db94b55e95b7f5776416a467a508ad7 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:48:25 +0800 Subject: [PATCH 33/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20user=5Finfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index ba76d370b..dc345505d 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -13,13 +13,13 @@ class Oauth::Ci4sController < Oauth::BaseController tip_exception("code不能为空") if code.blank? new_user = false - result = Ci4s::Service.access_token(code) - Rails.logger.info("[OAuth2] result -> #{result}") - # result = token[:account_info] - result = Ci4s::Service.user_info(result[:access_token]) - + token = Ci4s::Service.access_token(code) + Rails.logger.info("[OAuth2] result -> #{token}") + result = Ci4s::Service.user_info(token[:access_token]) + tip_exception("请求用户信息错误") if result['code'].to_i != 200 + user_info = result['data'] # 存在该用户 - open_user = OpenUsers::Ci4s.find_by(uid: result['login']) + open_user = OpenUsers::Ci4s.find_by(uid: user_info['login']) if open_user.present? && open_user.user.present? successful_authentication(open_user.user) redirect_to root_path(new_user: false) @@ -27,20 +27,20 @@ class Oauth::Ci4sController < Oauth::BaseController else if current_user.blank? || !current_user.logged? new_user = true - session[:unionid] = result['username'] + session[:unionid] = user_info['username'] # login = User.generate_login('E') - login = result['username'] - email = result['email'] + login = user_info['username'] + email = user_info['email'] email = "#{login}@forge.com" if email.blank? - reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', result['mobile']) + reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', user_info['mobile']) if reg_result[:message].blank? - open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: result) + open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: user_info) successful_authentication(open_user.user) else render_error(reg_result[:message]) end else - OpenUsers::Ci4s.create!(user: current_user, uid: result['login'], extra: result) + OpenUsers::Ci4s.create!(user: current_user, uid: user_info['login'], extra: user_info) end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") From 52f43dbcc3e2935d843c5b657ce67b4d757d8907 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 11:52:53 +0800 Subject: [PATCH 34/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20user=5Finfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index dc345505d..2783768de 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -19,7 +19,7 @@ class Oauth::Ci4sController < Oauth::BaseController tip_exception("请求用户信息错误") if result['code'].to_i != 200 user_info = result['data'] # 存在该用户 - open_user = OpenUsers::Ci4s.find_by(uid: user_info['login']) + open_user = OpenUsers::Ci4s.find_by(uid: user_info['username']) if open_user.present? && open_user.user.present? successful_authentication(open_user.user) redirect_to root_path(new_user: false) @@ -40,7 +40,7 @@ class Oauth::Ci4sController < Oauth::BaseController render_error(reg_result[:message]) end else - OpenUsers::Ci4s.create!(user: current_user, uid: user_info['login'], extra: user_info) + OpenUsers::Ci4s.create!(user: current_user, uid: user_info['username'], extra: user_info) end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") From 13da8e3577df081231a1bd75f6f35e7c311b6831 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 13:57:30 +0800 Subject: [PATCH 35/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20user=5Finfo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index 2783768de..70fb9779e 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -45,7 +45,7 @@ class Oauth::Ci4sController < Oauth::BaseController end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") - redirect_to root_path(new_user: new_user) + redirect_to root_path(new_user: new_user) && return # rescue Exception => ex # render_error(ex.message) # end From 527c1a5e9c7eac5e4017fc80fbd8b25fac658910 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 14:03:46 +0800 Subject: [PATCH 36/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20user=5Finfo=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index 70fb9779e..f7924c51a 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -33,6 +33,7 @@ class Oauth::Ci4sController < Oauth::BaseController email = user_info['email'] email = "#{login}@forge.com" if email.blank? reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', user_info['mobile']) + Rails.logger.info("[OAuth2] reg_result -> #{reg_result}") if reg_result[:message].blank? open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: user_info) successful_authentication(open_user.user) From 67b7206183f06b313a8ea1da9f5793559c3e41b3 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Wed, 23 Oct 2024 14:56:07 +0800 Subject: [PATCH 37/41] =?UTF-8?q?fixed=20ci4s=20oauth2=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=20user=5Finfo=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/oauth/ci4s_controller.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/app/controllers/oauth/ci4s_controller.rb b/app/controllers/oauth/ci4s_controller.rb index f7924c51a..a36454562 100644 --- a/app/controllers/oauth/ci4s_controller.rb +++ b/app/controllers/oauth/ci4s_controller.rb @@ -8,7 +8,7 @@ class Oauth::Ci4sController < Oauth::BaseController # 需要educoder那边设置回调地址 def create - # begin + begin code = params['code'].to_s.strip tip_exception("code不能为空") if code.blank? @@ -32,23 +32,22 @@ class Oauth::Ci4sController < Oauth::BaseController login = user_info['username'] email = user_info['email'] email = "#{login}@forge.com" if email.blank? - reg_result = autologin_register(login,email, "Ec#{login}2021#", 'educoder', user_info['mobile']) + reg_result = autologin_register(login, email, "Ec#{login}2021#", 'educoder', user_info['mobile']) Rails.logger.info("[OAuth2] reg_result -> #{reg_result}") if reg_result[:message].blank? open_user = OpenUsers::Ci4s.create!(user_id: reg_result[:user][:id], uid: login, extra: user_info) successful_authentication(open_user.user) else - render_error(reg_result[:message]) + tip_exception(reg_result[:message]) end else OpenUsers::Ci4s.create!(user: current_user, uid: user_info['username'], extra: user_info) end end Rails.logger.info("[OAuth2] session[:unionid] -> #{session[:unionid]}") - - redirect_to root_path(new_user: new_user) && return - # rescue Exception => ex - # render_error(ex.message) - # end + redirect_to root_path(new_user: new_user) + rescue Exception => ex + render_error(ex.message) + end end end From cf519788d1442a1778b1ea465b742e997ddafe43 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 25 Oct 2024 10:02:32 +0800 Subject: [PATCH 38/41] =?UTF-8?q?fixed=20=E5=A2=9E=E5=8A=A0=E6=95=8F?= =?UTF-8?q?=E6=84=9F=E8=AF=8D=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chinese_dictionary.txt | 76 +++++++++++++++++- config/harmonious_dictionary/harmonious.hash | Bin 46320 -> 48789 bytes .../harmonious_english.yml | 2 +- 3 files changed, 76 insertions(+), 2 deletions(-) diff --git a/config/harmonious_dictionary/chinese_dictionary.txt b/config/harmonious_dictionary/chinese_dictionary.txt index c65450d70..b8a3eb177 100644 --- a/config/harmonious_dictionary/chinese_dictionary.txt +++ b/config/harmonious_dictionary/chinese_dictionary.txt @@ -1375,4 +1375,78 @@ B样 江猪媳 酱猪媳 枪支 -毒品 \ No newline at end of file +毒品 +新葡京 +皇家 +皇家娱乐 +官网开户 +客服开户 +娱乐开户 +财务客服 +果博 +果博东方 +缅甸果博 +腾龙 +新腾龙 +开户会员 +果敢老街 +客服QV +代理QV +Q微 +微QV +综合盘 +盛世 +玉祥 +玉祥娱乐 +百家龙虎 +新锦江 +游戏真假 +小勐拉 +华纳 +腾龙官方 +老街银河 +福利来 +环球娱乐 +果博福布斯 +欧亚公司 +欧亚国际 +龙虎 +腾龍 +麦芒国际 +龙源国际 +皇家国际 +银钻国际 +迪威国际 +锦利国际 +网投 +网上赢了 +金沙国际 +澳门金沙 +新胜公司 +银河公司 +娱乐公司 +明珠代理 +亚星娱乐 +利博娱乐 +永鑫娱乐 +新锦江公司 +福布斯客服 +亚星正网 +尊龙凯时 +线上开户 +百家乐 +卡卡湾 +新金宝 +99贵宾 +牌桌 +游戏注册 +真人实体 +私人孕妈 +助孕 +捐卵 +借腹 +代妈 +孕妈 +借卵 +试管 +受孕 \ No newline at end of file diff --git a/config/harmonious_dictionary/harmonious.hash b/config/harmonious_dictionary/harmonious.hash index 7dfcdc80b75aa38a14a1ef1e29a791c268dbe4ca..b3fbb0eb213ccc090bf91583a39f67fc8d97ba2f 100644 GIT binary patch delta 1985 zcma)7O>7%Q6lU$j-Vg`lq;|JX8!3${K`Q!l=pnIMYN1Fi0*NSARTM5rrGi6{K!{7A zPSv<^5*#~uaaxC{5R+JGX`H%4Ahm-F7cS5Wq#h9Bg5=qsOU0oFB!tAw&g|@NL?mu+ zcfR+%@4b2N&7X!R|Bt7+NgnkiD$UuD^fcr{uSA!x`C?BcMtx@w$_9KbZ1pZek3vV9 z{O#lb&*vc28b)1_ccm_Uc3Ger)!WRD`4R-Dr|R&>n9^&^mjpzud}i8y2Ei%rL20vF z5PWOjbM9YGLStf95aBXP?pZ(i2S_OW;puqg8hixrX59e!#<r z&M}K8R7#^K@u3h2ac1bHHdik2%Rux%A?1WOs*C2QOyjNGg3~QwC=T@o)$6=W^gq+( zRoB0O`>P82X-JX@{lnqIp6urkdL|5SpAVwHh7H;8C-BC-96Ty^qsJF&5h(z-Mt=?B z>71ojR;MS?hadSRDS$40d_eMQRfMvazH63R;I;7typd_4ci-4vggX}%v@*WYL}Dc- zdm(l<0Db!dw1(*Y$r*`MUYZ{0Y*ed)8<%egyYVfc{^|avBUBS!8D|HqNG_lCyzs%K zc%#{ojziQ(FU*(+rd_!w{27H>%~>~!{w}KCgJzfvb1^fhT^24hp{)h!JSm@`MY9*5GlEf@-%< z$lVmW$d4(s%qB|ay}}#r)tEeYZcnmo>rj_6B9_&LG!|)VN330YaIL~n#DjFh|6r2I z9CivHGKh{Svi?;OzK=(a{)avvzl+pCqb5I-7DstX%VN;Plis*mxD zB5HMO{V-l_n-2>)(&o7+S_U4^EI*IOrI4K?q!{%Avt!51eT2)`nFva;V0RSxH0rG2 zjKwzygX_xcxL&sKyOmn2ZCel-=hDK~KINf!A|<K|<*yZsH%dZjA`z`M{ZH13_c?euX@Zin8im%V&wJp-wo3PZcB(+IC=|qj{o_ajx5N)k07Dmn3 pTNP(ET?)qR^{uB|owgH6IHT5!OZK0WMc>H7kA-N&ev+|6!M|gCf7$>5 delta 260 zcmbRGm+8YxCRP@XY9{lIto?$FoRg;t`fTP9QeY?Jp*kemF_{v0Fw<_!+>m^L>!y9okCkB2xj zEm<|$fm3vHa;VnioGgyb*F%4@17$A8YHwDKd%-bz$!_7zmg!r?7`Z3Eue~w(QQdDw z?#=h=Wf?bfHEv;L Date: Fri, 25 Oct 2024 11:49:36 +0800 Subject: [PATCH 39/41] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E9=A1=B9=E6=98=AF=E5=90=A6=E5=9C=A8=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=86=85=E4=BB=A5=E5=8F=8A=E6=98=AF=E5=90=A6=E6=9C=89?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E7=9A=84=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../change_issue_status_by_message_job.rb | 21 ++++++++++++++++++- app/models/journal.rb | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 7db38a4dc..c7f06a8fe 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -7,6 +7,24 @@ class ChangeIssueStatusByMessageJob < ApplicationJob # Implement, Implements, Implemented, Implementing, implement, implements, implemented, implementing # 以上关键词后接 issue_id 例如:Closes #234 Closes #123, #245, #992 + + def get_pm_issue_data(user, org, pm_project_id, issue_id) + url = URI("#{EduSetting.get("pms_server_url")}/api/pms/#{org.login}/pmsProjectIssues/#{issue_id}?pmProjectId=#{pm_project_id}") + + + https = Net::HTTP.new(url.host, url.port) + https.use_ssl = true + request = Net::HTTP::Get.new(url) + request["Cookie"] = "autologin_trustie=#{Token.get_or_create_permanent_login_token(user, 'autologin')&.value}" + response = https.request(request) + + puts response.read_body + return JSON.parse(response.read_body)['code'].to_i == 200 + rescue + return false + end + + def perform(commitsha, project, user, tag_issue_id_content, status_id=1) Rails.logger.info "需要操作的issue_id内容为 #{tag_issue_id_content}" tag_issue_id_content = tag_issue_id_content.gsub(/\s+/, '') @@ -15,7 +33,8 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 next if issue.project.present? && !user.admin? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && project.owner.is_a?(Organization) && !project.owner.is_member?(user.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.pm_project_id.present? && !user.admin? && project.owner.is_a?(Organization) && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? Api::Pm::Issues::UpdateService.call(issue_project, issue, {status_id: status_id}, user, "Project##{project.id}@#{commitsha}") diff --git a/app/models/journal.rb b/app/models/journal.rb index 9094c2d71..77c806ca8 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -88,7 +88,7 @@ class Journal < ApplicationRecord if self.operate_by.starts_with?("Project#") project_id, commit_sha = self.operate_by.scan(/#(\d+).*?@(\w+)/)[0] project =Project.find_by_id(project_id) - return "通过#{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" + return "通过 #{project&.owner&.real_name}/#{project&.name} 提交 #{commit_sha[0...10]}" end rescue return '' From e9b8f2aee74e3b9db28768c3be34a6ee41178e28 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 25 Oct 2024 13:49:29 +0800 Subject: [PATCH 40/41] =?UTF-8?q?=E6=9B=B4=E6=94=B9:=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=9C=A8commit=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BB=BB=E6=84=8Fissue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/change_issue_status_by_message_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index c7f06a8fe..6e273d3ac 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -32,8 +32,8 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue_id = tag_issue.gsub('#', '') issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 - next if issue.project.present? && !user.admin? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && !user.admin? && project.owner.is_a?(Organization) && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.project.present? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 + next if issue.pm_project_id.present? && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present? From b891d995698df19b68461d4bffa6433abfb53135 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 25 Oct 2024 14:27:48 +0800 Subject: [PATCH 41/41] fix --- app/jobs/change_issue_status_by_message_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/change_issue_status_by_message_job.rb b/app/jobs/change_issue_status_by_message_job.rb index 6e273d3ac..5fa970c14 100644 --- a/app/jobs/change_issue_status_by_message_job.rb +++ b/app/jobs/change_issue_status_by_message_job.rb @@ -33,7 +33,7 @@ class ChangeIssueStatusByMessageJob < ApplicationJob issue = project.issues.issue_issue.where(project_issues_index: issue_id).where.not(id: issue_id).take || Issue.issue_issue.find_by_id(issue_id) next unless issue.present? # issue不存在 跳过 next if issue.project.present? && !issue.project.member?(user) # issue归属项目,用户没有修改issue的权限,跳过 - next if issue.pm_project_id.present? && get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 + next if issue.pm_project_id.present? && !get_pm_issue_data(user, project.owner, issue.pm_project_id, issue.id) # issue是组织下工作项,不具备组织的访问权限,跳过 issue_project = issue.project || Project.new(id: 0, user_id: 0, name: 'pm_mm', identifier: 'pm_mm', is_public:true) if issue.pm_project_id.present?