From 688be1bb7d1170369d372cee31474d626e009613 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 20 Dec 2021 16:15:33 +0800 Subject: [PATCH 01/26] fix: return issue version id --- app/views/issues/show.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/issues/show.json.jbuilder b/app/views/issues/show.json.jbuilder index be6de14e0..5c8cbc410 100644 --- a/app/views/issues/show.json.jbuilder +++ b/app/views/issues/show.json.jbuilder @@ -13,6 +13,7 @@ json.tracker @issue.tracker.try(:name) json.issue_status @issue.issue_status.try(:name) json.priority @issue.priority.try(:name) json.version @issue.version.try(:name) +json.version_id @issue.version.try(:id) json.issue_tags @issue.get_issue_tags json.done_ratio @issue.done_ratio.to_s + "%" json.issue_type @issue.issue_type From d28eba64233d7bcd0213d3db23b186742145391b Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 21 Dec 2021 09:46:24 +0800 Subject: [PATCH 02/26] fix: create org error --- app/controllers/organizations/organizations_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 3c2a92aa4..58aa0d29d 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -28,7 +28,7 @@ class Organizations::OrganizationsController < Organizations::BaseController def create ActiveRecord::Base.transaction do tip_exception("无法使用以下关键词:#{organization_params[:name]},请重新命名") if ReversedKeyword.check_exists?(organization_params[:name]) - Organizations::CreateForm.new(organization_params.merge(original_name: @organization.login)).validate! + Organizations::CreateForm.new(organization_params.merge(original_name: "")).validate! @organization = Organizations::CreateService.call(current_user, organization_params) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? end From 8e79b43aaf5c1dcd662705bb6f2c90699f8e674f Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 11:16:27 +0800 Subject: [PATCH 03/26] add: member bind team user --- app/models/concerns/project_operable.rb | 26 ++++++++++++++++++- app/models/member.rb | 25 ++++++++++-------- app/models/team_user.rb | 8 ++++++ ...20211222015006_add_team_user_to_members.rb | 5 ++++ 4 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 db/migrate/20211222015006_add_team_user_to_members.rb diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index a6dc0dd35..4571632cf 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -21,13 +21,37 @@ module ProjectOperable end def add_member!(user_id, role_name='Developer') - member = members.create!(user_id: user_id) + if self.owner.is_a?(Organization) + case role_name + when 'Manager' + team = self.owner.teams.admin.take + team = team.nil? ? Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = TeamUser.build(self.user_id, user_id, team.id) + when 'Developer' + team = self.owner.teams.write.take + team = team.nil? ? Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = TeamUser.build(self.user_id, user_id, team.id) + when 'Reporter' + team = self.owner.teams.read.take + team = team.nil? ? Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = TeamUser.build(self.user_id, user_id, team.id) + end + end + member = members.create!(user_id: user_id, team_user_id: team_user&.id) set_developer_role(member, role_name) end def remove_member!(user_id) member = members.find_by(user_id: user_id) member.destroy! if member && self.user_id != user_id + team_user = TeamUser.find_by_id(member&.team_user_id) + team_user.destroy! if team_user end def member?(user_id) diff --git a/app/models/member.rb b/app/models/member.rb index e72ae7c6b..521f939c5 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -11,23 +11,26 @@ # course_group_id :integer default("0") # is_collect :integer default("1") # graduation_group_id :integer default("0") +# team_user_id :integer # # Indexes # # index_members_on_course_id (course_id) # index_members_on_project_id (project_id) +# index_members_on_team_user_id (team_user_id) # index_members_on_user_id (user_id) # index_members_on_user_id_and_project_id (user_id,project_id,course_id) UNIQUE # -class Member < ApplicationRecord - belongs_to :user - # belongs_to :course, optional: true - belongs_to :project, optional: true - - has_many :member_roles, dependent: :destroy - has_many :roles, through: :member_roles - - validates :user_id, :project_id, presence: true - -end +class Member < ApplicationRecord + belongs_to :user + # belongs_to :course, optional: true + belongs_to :project, optional: true + belongs_to :team_user, optional: true + + has_many :member_roles, dependent: :destroy + has_many :roles, through: :member_roles + + validates :user_id, :project_id, presence: true + +end diff --git a/app/models/team_user.rb b/app/models/team_user.rb index 9670013a7..9f90bc15b 100644 --- a/app/models/team_user.rb +++ b/app/models/team_user.rb @@ -22,9 +22,17 @@ class TeamUser < ApplicationRecord belongs_to :team, counter_cache: :num_users belongs_to :user + has_one :member + validates :user_id, uniqueness: {scope: [:organization_id, :team_id]} + before_destroy :remove_project_member + def self.build(organization_id, user_id, team_id) self.create!(organization_id: organization_id, user_id: user_id, team_id: team_id) end + + def remove_project_member + member.destroy if member.present? + end end diff --git a/db/migrate/20211222015006_add_team_user_to_members.rb b/db/migrate/20211222015006_add_team_user_to_members.rb new file mode 100644 index 000000000..b3ca8edf0 --- /dev/null +++ b/db/migrate/20211222015006_add_team_user_to_members.rb @@ -0,0 +1,5 @@ +class AddTeamUserToMembers < ActiveRecord::Migration[5.2] + def change + add_reference :members, :team_user + end +end From 26ae9b35dfc9ac9e7b376147c2d69e999e069494 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 11:32:40 +0800 Subject: [PATCH 04/26] fix: change member role and change team user team --- app/models/concerns/project_operable.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/models/concerns/project_operable.rb b/app/models/concerns/project_operable.rb index 4571632cf..ee361d2cf 100644 --- a/app/models/concerns/project_operable.rb +++ b/app/models/concerns/project_operable.rb @@ -71,6 +71,28 @@ module ProjectOperable def change_member_role!(user_id, role) member = self.member(user_id) + if self.owner.is_a?(Organization) && member.team_user.present? + case role&.name + when 'Manager' + team = self.owner.teams.admin.take + team = team.nil? ? Team.build(self.user_id, 'admin', '管理员', '', 'admin', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = member.team_user.update(team_id: team&.id) + when 'Developer' + team = self.owner.teams.write.take + team = team.nil? ? Team.build(self.user_id, 'developer', '开发者', '', 'write', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = member.team_user.update(team_id: team&.id) + when 'Reporter' + team = self.owner.teams.read.take + team = team.nil? ? Team.build(self.user_id, 'reporter', '报告者', '', 'read', false, false) : team + TeamProject.build(self.user_id, team.id, self.id) + OrganizationUser.build(self.user_id, user_id) + team_user = member.team_user.update(team_id: team&.id) + end + end member.member_roles.last.update_attributes!(role: role) end From e1a5918c22cfa0eac3d625f781dff271a9dc7231 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 13:57:02 +0800 Subject: [PATCH 05/26] add: project trends project info --- app/controllers/project_trends_controller.rb | 2 +- app/views/project_trends/_detail.json.jbuilder | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/project_trends_controller.rb b/app/controllers/project_trends_controller.rb index 66702608d..f283d05f7 100644 --- a/app/controllers/project_trends_controller.rb +++ b/app/controllers/project_trends_controller.rb @@ -3,7 +3,7 @@ class ProjectTrendsController < ApplicationController before_action :check_project_public def index - project_trends = @project.project_trends.preload(:user, trend: :user) + project_trends = @project.project_trends.preload(:user, trend: :user, project: :owner) check_time = params[:time] #时间的筛选 check_type = params[:type] #动态类型的筛选,目前已知的有 Issue, PullRequest, Version diff --git a/app/views/project_trends/_detail.json.jbuilder b/app/views/project_trends/_detail.json.jbuilder index 75bcf2237..04de10f6a 100644 --- a/app/views/project_trends/_detail.json.jbuilder +++ b/app/views/project_trends/_detail.json.jbuilder @@ -6,6 +6,13 @@ json.user_name trend.user.try(:show_real_name) json.user_login trend.user.login json.user_avatar url_to_avatar(trend.user) json.action_time time_from_now(trend.created_at) +json.project do + json.owner do + json.partial! 'users/user_simple', locals: {user: trend&.project&.owner} + end + json.identifier trend&.project&.identifier + json.description trend&.project&.description +end if trend.trend_type == "Issue" json.partial! "issues/simple_issue_item", locals: {issue: trend.trend} From 36b68df273f503362ac396e464fc570bc7456d3b Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 14:39:47 +0800 Subject: [PATCH 06/26] fix: remote register validate --- app/controllers/accounts_controller.rb | 5 +++++ app/forms/register/remote_form.rb | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 app/forms/register/remote_form.rb diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index b8783c44e..7a355beaf 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -9,6 +9,7 @@ class AccountsController < ApplicationController # 其他平台同步注册的用户 def remote_register + # Register::RemoteForm.new(remote_register_params).validate! username = params[:username]&.gsub(/\s+/, "") tip_exception("无法使用以下关键词:#{username},请重新命名") if ReversedKeyword.check_exists?(username) email = params[:email]&.gsub(/\s+/, "") @@ -367,5 +368,9 @@ class AccountsController < ApplicationController def register_params params.permit(:login, :namespace, :password, :code) end + + def remote_register_params + params.permit(:username, :email, :password, :platform) + end end diff --git a/app/forms/register/remote_form.rb b/app/forms/register/remote_form.rb new file mode 100644 index 000000000..59a5fbc82 --- /dev/null +++ b/app/forms/register/remote_form.rb @@ -0,0 +1,16 @@ +module Register + class RemoteForm < Register::BaseForm + # login 登陆方式,支持邮箱、登陆、手机号等 + attr_accessor :username, :email, :password, :platform + + validates :username, :email, :password, presence: true + validate :check! + + def check! + Rails.logger.info "Register::RemoteForm params: username: #{username}; email: #{email}; password: #{password}; platform: #{platform}" + check_login(username) + check_mail(email) + check_password(password) + end + end +end From 0083ef33cba809ed64f20aec389d043207dea582 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 16:03:23 +0800 Subject: [PATCH 07/26] fix --- app/controllers/accounts_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 7a355beaf..4244287b8 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -9,7 +9,7 @@ class AccountsController < ApplicationController # 其他平台同步注册的用户 def remote_register - # Register::RemoteForm.new(remote_register_params).validate! + Register::RemoteForm.new(remote_register_params).validate! username = params[:username]&.gsub(/\s+/, "") tip_exception("无法使用以下关键词:#{username},请重新命名") if ReversedKeyword.check_exists?(username) email = params[:email]&.gsub(/\s+/, "") From 05c3f60dab424076086da4af1a807c0b245dc9c0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 18:08:10 +0800 Subject: [PATCH 08/26] fix --- app/controllers/repositories_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index b1df355e8..430994cec 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -238,14 +238,14 @@ class RepositoriesController < ApplicationController def archive domain = Gitea.gitea_config[:domain] api_url = Gitea.gitea_config[:base_url] - archive_url = "/repos/#{@owner.login}/#{@repository.identifier}/archive/#{URI.escape(params[:archive])}" + archive_url = "/repos/#{@owner.login}/#{@repository.identifier}/archive/#{params[:archive]}" file_path = [domain, api_url, archive_url].join file_path = [file_path, "access_token=#{current_user&.gitea_token}"].join("?") if @repository.hidden? return render_not_found if !request.format.zip? && !request.format.gzip? - redirect_to file_path + redirect_to URI.escape(file_path) end def raw From 64423f1999b765a5402a4802b23fa259135a4e7e Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Dec 2021 18:16:39 +0800 Subject: [PATCH 09/26] fix --- api_document.md | 8 ++++---- app/controllers/repositories_controller.rb | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api_document.md b/api_document.md index a43147bb2..533cd6a4b 100644 --- a/api_document.md +++ b/api_document.md @@ -26,11 +26,11 @@ POST accounts/remote_register *示例* ```bash curl -X POST \ --d "email=2456233122@qq.com" \ --d "password=djs_D_00001" \ --d "username=16895620" \ +-d "email=test77@forge.com" \ +-d "password=123456" \ +-d "username=testforge77" \ -d "platform=forge" \ -http://localhost:3000/api/accounts/remote_register | jq +https://testforgeplus.trustie.net/api/accounts/remote_register | jq ``` *请求参数说明:* diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 430994cec..0634a74c6 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -238,25 +238,25 @@ class RepositoriesController < ApplicationController def archive domain = Gitea.gitea_config[:domain] api_url = Gitea.gitea_config[:base_url] - archive_url = "/repos/#{@owner.login}/#{@repository.identifier}/archive/#{params[:archive]}" + archive_url = "/repos/#{@owner.login}/#{@repository.identifier}/archive/#{CGI.escape(params[:archive])}" file_path = [domain, api_url, archive_url].join file_path = [file_path, "access_token=#{current_user&.gitea_token}"].join("?") if @repository.hidden? return render_not_found if !request.format.zip? && !request.format.gzip? - redirect_to URI.escape(file_path) + redirect_to file_path end def raw domain = Gitea.gitea_config[:domain] api_url = Gitea.gitea_config[:base_url] - url = "/repos/#{@owner.login}/#{@repository.identifier}/raw/#{params[:filepath]}?ref=#{params[:ref]}" + url = "/repos/#{@owner.login}/#{@repository.identifier}/raw/#{params[:filepath]}?ref=#{CGI.escapte(params[:ref])}" file_path = [domain, api_url, url].join file_path = [file_path, "access_token=#{current_user&.gitea_token}"].join("&") - redirect_to URI.escape(file_path) + redirect_to file_path end private From 78f464ccba6df8fbf337a5908f944f806d7bad2e Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Dec 2021 10:37:57 +0800 Subject: [PATCH 10/26] fix: escape --- app/controllers/repositories_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 0634a74c6..c39ecbf5b 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -252,7 +252,7 @@ class RepositoriesController < ApplicationController domain = Gitea.gitea_config[:domain] api_url = Gitea.gitea_config[:base_url] - url = "/repos/#{@owner.login}/#{@repository.identifier}/raw/#{params[:filepath]}?ref=#{CGI.escapte(params[:ref])}" + url = "/repos/#{@owner.login}/#{@repository.identifier}/raw/#{URI.escape(params[:filepath])}?ref=#{CGI.escape(params[:ref])}" file_path = [domain, api_url, url].join file_path = [file_path, "access_token=#{current_user&.gitea_token}"].join("&") From 3e04a37ecef2d6302a4fb62128158933331d1620 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Dec 2021 14:26:40 +0800 Subject: [PATCH 11/26] add: team remove and joined template message --- .../organizations/team_users_controller.rb | 3 +- app/jobs/send_template_message_job.rb | 38 ++++++++---- app/models/message_template.rb | 6 +- app/models/message_template/team_joined.rb | 58 +++++++++++++++++++ app/models/message_template/team_left.rb | 58 +++++++++++++++++++ app/models/team.rb | 8 +-- public/message_template/team_joined.html | 47 +++++++++++++++ public/message_template/team_left.html | 47 +++++++++++++++ 8 files changed, 246 insertions(+), 19 deletions(-) create mode 100644 app/models/message_template/team_joined.rb create mode 100644 app/models/message_template/team_left.rb create mode 100755 public/message_template/team_joined.html create mode 100755 public/message_template/team_left.html diff --git a/app/controllers/organizations/team_users_controller.rb b/app/controllers/organizations/team_users_controller.rb index 0a5ff28a1..7a71dbbad 100644 --- a/app/controllers/organizations/team_users_controller.rb +++ b/app/controllers/organizations/team_users_controller.rb @@ -18,7 +18,7 @@ class Organizations::TeamUsersController < Organizations::BaseController ActiveRecord::Base.transaction do @team_user = TeamUser.build(@organization.id, @operate_user.id, @team.id) @organization_user = OrganizationUser.build(@organization.id, @operate_user.id) - SendTemplateMessageJob.perform_later('OrganizationRole', @operate_user.id, @organization.id, @team.authorize_name) if Site.has_notice_menu? + SendTemplateMessageJob.perform_later('TeamJoined', @operate_user.id, @organization.id, @team.id) if Site.has_notice_menu? Gitea::Organization::TeamUser::CreateService.call(@organization.gitea_token, @team.gtid, @operate_user.login) end rescue Exception => e @@ -31,6 +31,7 @@ class Organizations::TeamUsersController < Organizations::BaseController ActiveRecord::Base.transaction do @team_user.destroy! Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, @operate_user.login) + SendTemplateMessageJob.perform_later('TeamLeft', @operate_user.id, @organization.id, @team.id) if Site.has_notice_menu? org_team_users = @organization.team_users.where(user_id: @operate_user.id) unless org_team_users.present? @organization.organization_users.find_by(user_id: @operate_user.id).destroy! diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 900e8b84d..f17755420 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -94,18 +94,6 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::OrganizationLeft.get_email_message_content(receiver, organization) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end - when 'OrganizationRole' - user_id, organization_id, role = args[0], args[1], args[2] - user = User.find_by_id(user_id) - organization = Organization.find_by_id(organization_id) - return unless user.present? && organization.present? - receivers = User.where(id: user.id) - receivers_string, content, notification_url = MessageTemplate::OrganizationRole.get_message_content(receivers, organization, role) - Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, role: role}) - receivers.find_each do |receiver| - receivers_email_string, email_title, email_content = MessageTemplate::OrganizationRole.get_email_message_content(receiver, organization, role) - Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) - end when 'ProjectIssue' operator_id, issue_id = args[0], args[1] operator = User.find_by_id(operator_id) @@ -276,6 +264,32 @@ class SendTemplateMessageJob < ApplicationJob receivers_email_string, email_title, email_content = MessageTemplate::PullRequestMerged.get_email_message_content(receiver, operator, pull_request) Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) end + when 'TeamJoined' + user_id, organization_id, team_id = args[0], args[1], args[2] + user = User.find_by_id(user_id) + organization = Organization.find_by_id(organization_id) + team = Team.find_by_id(team_id) + return unless user.present? && organization.present? && team.present? + receivers = User.where(id: user.id) + receivers_string, content, notification_url = MessageTemplate::TeamJoined.get_message_content(receivers, organization, team) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, team_id: team.id}) + receivers.find_each do |receiver| + receivers_email_string, email_title, email_content = MessageTemplate::TeamJoined.get_email_message_content(receiver, organization, team) + Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) + end + when 'TeamLeft' + user_id, organization_id, team_id = args[0], args[1], args[2] + user = User.find_by_id(user_id) + organization = Organization.find_by_id(organization_id) + team = Team.find_by_id(team_id) + return unless user.present? && organization.present? && team.present? + receivers = User.where(id: user.id) + receivers_string, content, notification_url = MessageTemplate::TeamLeft.get_message_content(receivers, organization, team) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {user_id: user.id, organization_id: organization.id, team_id: team.id}) + receivers.find_each do |receiver| + receivers_email_string, email_title, email_content = MessageTemplate::TeamLeft.get_email_message_content(receiver, organization, team) + Notice::Write::EmailCreateService.call(receivers_email_string, email_title, email_content) + end end end end \ No newline at end of file diff --git a/app/models/message_template.rb b/app/models/message_template.rb index f1d0baa85..0f1f3a580 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -31,8 +31,6 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::OrganizationJoined', sys_notice: '你已加入 {organization} 组织', notification_url: '{baseurl}/{login}', email: email_html, email_title: 'GitLink: 你已加入 {organization} 组织') email_html = File.read("#{email_template_html_dir}/organization_left.html") self.create(type: 'MessageTemplate::OrganizationLeft', sys_notice: '你已被移出 {organization} 组织', notification_url: '', email: email_html, email_title: 'GitLink: 你已被移出 {organization} 组织') - email_html = File.read("#{email_template_html_dir}/organization_role.html") - self.create(type: 'MessageTemplate::OrganizationRole', sys_notice: '组织 {organization} 已把你的角色改为 {role}', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectDeleted', sys_notice: '你关注的仓库{nickname}/{repository}已被删除', notification_url: '') self.create(type: 'MessageTemplate::ProjectFollowed', sys_notice: '{nickname} 关注了你管理的仓库', notification_url: '{baseurl}/{login}') self.create(type: 'MessageTemplate::ProjectForked', sys_notice: '{nickname1} 复刻了你管理的仓库{nickname1}/{repository1}到{nickname2}/{repository2}', notification_url: '{baseurl}/{owner}/{identifier}') @@ -66,6 +64,10 @@ class MessageTemplate < ApplicationRecord self.create(type: 'MessageTemplate::PullRequestJournal', sys_notice: '{nickname}评论合并请求{title}:{notes}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/pull_request_merged.html") self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title} 已通过', email: email_html, email_title: 'GitLink: 合并请求 {title} 有状态变更', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') + email_html = File.read("#{email_template_html_dir}/team_joined.html") + self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有 {role}', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') + email_html = File.read("#{email_template_html_dir}/team_left.html") + self.create(type: 'MessageTemplate::TeamLeft', sys_notice: '你已被移出组织 {organization}{team} 团队', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') end def self.sys_notice diff --git a/app/models/message_template/team_joined.rb b/app/models/message_template/team_joined.rb new file mode 100644 index 000000000..f49940952 --- /dev/null +++ b/app/models/message_template/team_joined.rb @@ -0,0 +1,58 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 账号被拉入组织团队 +class MessageTemplate::TeamJoined < MessageTemplate + + # MessageTemplate::TeamJoined.get_message_content(User.where(login: 'yystopf'), Organization.last, Organization.last.teams.take) + def self.get_message_content(receivers, organization, team) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["Normal::Permission"] + end + end + return '', '', '' if receivers.blank? + content = sys_notice.gsub('{organization}', organization&.real_name).gsub('{team}', team&.nickname).gsub('{role}', team&.authorize_name) + url = notification_url.gsub('{login}', organization&.login) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::TeamJoined.get_message_content [ERROR] #{e}") + return '', '', '' + end + + def self.get_email_message_content(receiver, organization, role) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Permission"] + title = email_title + title.gsub!('{organization}', organization&.real_name) + title.gsub!('{team}', team&.nickname) + title.gsub!('{role}', team&.authorize_name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', organization&.login) + content.gsub!('{organization}', organization&.real_name) + content.gsub!('{team}', team&.nickname) + content.gsub!('{role}', team&.authorize_name) + + return receiver&.mail, title, content + else + return '', '', '' + end + + rescue => e + Rails.logger.info("MessageTemplate::TeamJoined.get_email_message_content [ERROR] #{e}") + return '', '', '' + end +end diff --git a/app/models/message_template/team_left.rb b/app/models/message_template/team_left.rb new file mode 100644 index 000000000..572422633 --- /dev/null +++ b/app/models/message_template/team_left.rb @@ -0,0 +1,58 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 账号被移出组织团队 +class MessageTemplate::TeamLeft < MessageTemplate + + # MessageTemplate::TeamLeft.get_message_content(User.where(login: 'yystopf'), Organization.last, Organization.last.teams.take) + def self.get_message_content(receivers, organization, team) + receivers.each do |receiver| + if receiver.user_template_message_setting.present? + receivers = receivers.where.not(id: receiver.id) unless receiver.user_template_message_setting.notification_body["Normal::Permission"] + end + end + return '', '', '' if receivers.blank? + content = sys_notice.gsub('{organization}', organization&.real_name).gsub('{team}', team&.nickname).gsub('{role}', team&.authorize_name) + url = notification_url.gsub('{login}', organization&.login) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::TeamLeft.get_message_content [ERROR] #{e}") + return '', '', '' + end + + def self.get_email_message_content(receiver, organization, team) + if receiver.user_template_message_setting.present? + return '', '', '' unless receiver.user_template_message_setting.email_body["Normal::Permission"] + title = email_title + title.gsub!('{organization}', organization&.real_name) + title.gsub!('{team}', team&.nickname) + title.gsub!('{role}', team&.authorize_name) + content = email + content.gsub!('{receiver}', receiver&.real_name) + content.gsub!('{baseurl}', base_url) + content.gsub!('{login}', organization&.login) + content.gsub!('{organization}', organization&.real_name) + content.gsub!('{team}', team&.nickname) + content.gsub!('{role}', team&.authorize_name) + + return receiver&.mail, title, content + else + return '', '', '' + end + + rescue => e + Rails.logger.info("MessageTemplate::TeamLeft.get_email_message_content [ERROR] #{e}") + return '', '', '' + end +end diff --git a/app/models/team.rb b/app/models/team.rb index 19d05c77a..8cb94ac28 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -56,10 +56,10 @@ class Team < ApplicationRecord def authorize_name case self.authorize - when 'read' then '报告者' - when 'write' then '开发者' - when 'admin' then '管理员' - when 'owner' then '拥有者' + when 'read' then '读取权限' + when 'write' then '写入权限' + when 'admin' then '管理员权限' + when 'owner' then '管理员权限' else '' end diff --git a/public/message_template/team_joined.html b/public/message_template/team_joined.html new file mode 100755 index 000000000..78496cced --- /dev/null +++ b/public/message_template/team_joined.html @@ -0,0 +1,47 @@ + + + 被拉入组织团队 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

+ {receiver},您好!
+ 你已被拉入组织 {organization}{team} 团队,拥有 {role} +

+
+
+
+

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
+ QQ群:1071514693

+

GitLink团队

+
+
+
+
+ + \ No newline at end of file diff --git a/public/message_template/team_left.html b/public/message_template/team_left.html new file mode 100755 index 000000000..1321e7b4d --- /dev/null +++ b/public/message_template/team_left.html @@ -0,0 +1,47 @@ + + + 被移出组织团队 + + + + +
+
+
+ +

确实开源,协同创新

+
+
+
+

+ {receiver},您好!
+ 你已被移出组织 {organization}{team} 团队 +

+
+
+
+

如果您在使用中有任何的疑问和建议,欢迎您给我们反馈意见
+ QQ群:1071514693

+

GitLink团队

+
+
+
+
+ + \ No newline at end of file From 4ce03145df7dbdaa68d5111bca09d4e20368bec8 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 23 Dec 2021 14:33:31 +0800 Subject: [PATCH 12/26] fix --- app/models/message_template.rb | 2 +- app/models/team.rb | 8 ++++---- public/message_template/team_joined.html | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 0f1f3a580..c9812e511 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -65,7 +65,7 @@ class MessageTemplate < ApplicationRecord email_html = File.read("#{email_template_html_dir}/pull_request_merged.html") self.create(type: 'MessageTemplate::PullRequestMerged', sys_notice: '你提交的合并请求:{title} 已通过', email: email_html, email_title: 'GitLink: 合并请求 {title} 有状态变更', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}') email_html = File.read("#{email_template_html_dir}/team_joined.html") - self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有 {role}', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::TeamJoined', sys_notice: '你已被拉入组织 {organization}{team} 团队,拥有{role}权限', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') email_html = File.read("#{email_template_html_dir}/team_left.html") self.create(type: 'MessageTemplate::TeamLeft', sys_notice: '你已被移出组织 {organization}{team} 团队', email: email_html, email_title: 'GitLink: 在 {organization} 组织你的账号有权限变更', notification_url: '{baseurl}/{login}') end diff --git a/app/models/team.rb b/app/models/team.rb index 8cb94ac28..c2e633380 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -56,10 +56,10 @@ class Team < ApplicationRecord def authorize_name case self.authorize - when 'read' then '读取权限' - when 'write' then '写入权限' - when 'admin' then '管理员权限' - when 'owner' then '管理员权限' + when 'read' then '读取' + when 'write' then '写入' + when 'admin' then '管理员' + when 'owner' then '管理员' else '' end diff --git a/public/message_template/team_joined.html b/public/message_template/team_joined.html index 78496cced..231f8b795 100755 --- a/public/message_template/team_joined.html +++ b/public/message_template/team_joined.html @@ -31,7 +31,7 @@

{receiver},您好!
- 你已被拉入组织 {organization}{team} 团队,拥有 {role} + 你已被拉入组织 {organization}{team} 团队,拥有{role}权限

From 12edc620df65430a6f0e5cec531ab279ff05643f Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 24 Dec 2021 16:15:59 +0800 Subject: [PATCH 13/26] fix: complete profile condition --- app/models/user.rb | 2 +- app/views/pull_requests/_commit.json.jbuilder | 37 +++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 3f37ab1ea..5ca3356b6 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -773,7 +773,7 @@ class User < Owner end def profile_is_completed? - self.nickname.present? && self.gender.present? && self.mail.present? && self.custom_department.present? + self.nickname.present? && self.mail.present? end protected diff --git a/app/views/pull_requests/_commit.json.jbuilder b/app/views/pull_requests/_commit.json.jbuilder index 52b776008..2cd2bab78 100644 --- a/app/views/pull_requests/_commit.json.jbuilder +++ b/app/views/pull_requests/_commit.json.jbuilder @@ -1,12 +1,27 @@ -json.author do - json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['Author']), name: commit['Author']['Name'] } -end +if commit['Status'].present? + json.author do + json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['Author']), name: commit['Author']['Name'] } + end + + json.committer do + json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['Committer']), name: commit['Committer']['Name'] } + end + json.timestamp render_unix_time(commit['Committer']['When']) + json.time_from_now time_from_now(commit['Committer']['When']) + json.created_at render_format_time_with_date(commit['Committer']['When']) + json.message commit['CommitMessage'] + json.sha commit['Sha'] +else + json.author do + json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['commit']['author']), name: commit['commit']['author']['name'] } + end -json.committer do - json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['Committer']), name: commit['Committer']['Name'] } -end -json.timestamp render_unix_time(commit['Committer']['When']) -json.time_from_now time_from_now(commit['Committer']['When']) -json.created_at render_format_time_with_date(commit['Committer']['When']) -json.message commit['CommitMessage'] -json.sha commit['Sha'] + json.committer do + json.partial! 'repositories/commit_author', locals: { user: render_cache_commit_author(commit['commit']['committer']), name: commit['commit']['committer']['name'] } + end + json.timestamp render_unix_time(commit['commit']['committer']['date']) + json.time_from_now time_from_now(commit['commit']['committer']['date']) + json.created_at render_format_time_with_date(commit['commit']['committer']['date']) + json.message commit['commit']['message'] + json.sha commit['sha'] +end \ No newline at end of file From dcf44a78f0a9a33bec35fffea1ddf75cca2fd99e Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 27 Dec 2021 16:34:54 +0800 Subject: [PATCH 14/26] fix: unvalid branch name return error --- app/services/gitea/repository/entries/create_service.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index 5e1a4c4b3..927be6a8f 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -55,7 +55,12 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService when 201 then success(json_parse!(body)) when 403 then error("你没有权限操作!") when 404 then error("你操作的链接不存在!") - when 422 then error("#{filepath}文件已存在,不能重复创建!") + when 422 + if @body[:new_branch].include?('') || @body[:new_branch].include?('\'') || @body[:new_branch].include?('^') || @body[:new_branch].include?('*') + error("不合法的分支名称!") + else + error("#{filepath}文件已存在,不能重复创建!") + end else error("系统错误!") end end From 4432e6568324191b7b3ccd123ad65bef3389a497 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 27 Dec 2021 17:32:35 +0800 Subject: [PATCH 15/26] fix: operate issue permission reset --- app/controllers/issues_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 6ea8fb8ef..872263d86 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -486,7 +486,8 @@ class IssuesController < ApplicationController end def operate_issue_permission - return render_forbidden("您没有权限进行此操作.") unless current_user.present? && current_user.logged? && (current_user.admin? || @project.member?(current_user) || @project.is_public?) + set_issue unless @issue.present? + return render_forbidden("您没有权限进行此操作.") unless current_user.present? && current_user.logged? && (current_user.admin? || @project.member?(current_user) || (@project.is_public && @issue.nil?) || (@project.is_public && @issue.present? && @issue.author_id == current_user.id)) end def export_issues(issues) From dbf5e711a5040230cde0392fefc0774bd98d19ec Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 27 Dec 2021 17:44:08 +0800 Subject: [PATCH 16/26] fix --- app/services/gitea/repository/entries/create_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index 927be6a8f..1bdc7246d 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -56,7 +56,7 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService when 403 then error("你没有权限操作!") when 404 then error("你操作的链接不存在!") when 422 - if @body[:new_branch].include?('') || @body[:new_branch].include?('\'') || @body[:new_branch].include?('^') || @body[:new_branch].include?('*') + if @body[:new_branch].include?('/') || @body[:new_branch].include?('\'') || @body[:new_branch].include?('^') || @body[:new_branch].include?('*') error("不合法的分支名称!") else error("#{filepath}文件已存在,不能重复创建!") From 076375633ab325adc7aed7d20fde683b4f196c62 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 27 Dec 2021 17:55:02 +0800 Subject: [PATCH 17/26] fix --- api_document.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api_document.md b/api_document.md index 533cd6a4b..a43147bb2 100644 --- a/api_document.md +++ b/api_document.md @@ -26,11 +26,11 @@ POST accounts/remote_register *示例* ```bash curl -X POST \ --d "email=test77@forge.com" \ --d "password=123456" \ --d "username=testforge77" \ +-d "email=2456233122@qq.com" \ +-d "password=djs_D_00001" \ +-d "username=16895620" \ -d "platform=forge" \ -https://testforgeplus.trustie.net/api/accounts/remote_register | jq +http://localhost:3000/api/accounts/remote_register | jq ``` *请求参数说明:* From 4304a35b80c3e3f6296b2239071d74bad244b3fe Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 11:07:40 +0800 Subject: [PATCH 18/26] fix --- app/controllers/issues_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 872263d86..73b3ee4c3 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -486,7 +486,7 @@ class IssuesController < ApplicationController end def operate_issue_permission - set_issue unless @issue.present? + @issue = Issue.find_by_id(params[:id]) unless @issue.present? return render_forbidden("您没有权限进行此操作.") unless current_user.present? && current_user.logged? && (current_user.admin? || @project.member?(current_user) || (@project.is_public && @issue.nil?) || (@project.is_public && @issue.present? && @issue.author_id == current_user.id)) end From 51e8c9d908332e7abbfbc9e23da972a00892ca4b Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 14:22:06 +0800 Subject: [PATCH 19/26] fix: compare use url escape --- app/controllers/compare_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index c8918d1c4..34324a505 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -44,10 +44,10 @@ class CompareController < ApplicationController def load_compare_params @base = Addressable::URI.unescape(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] - + @head = Addressable::URI.unescape(@head) end def gitea_compare(base, head) - Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, base, head, current_user.gitea_token) + Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, CGI.escape(base), CGI.escape(head), current_user.gitea_token) end end From 04bf423fcb80064ed5cec27fc132df7b5cd0fbfd Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 14:42:55 +0800 Subject: [PATCH 20/26] fix --- app/controllers/compare_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 34324a505..cec52330a 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -42,9 +42,11 @@ class CompareController < ApplicationController end def load_compare_params - @base = Addressable::URI.unescape(params[:base]) + # @base = Addressable::URI.unescape(params[:base]) + @base = Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] - @head = Addressable::URI.unescape(@head) + # @head = Addressable::URI.unescape(@head) + @head = Base64.decode6(@head) end def gitea_compare(base, head) From 75f3166ffa47732a04effbc680727e1673ba81e2 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 14:45:12 +0800 Subject: [PATCH 21/26] fix --- app/controllers/compare_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index cec52330a..869f095dc 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -46,7 +46,7 @@ class CompareController < ApplicationController @base = Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] # @head = Addressable::URI.unescape(@head) - @head = Base64.decode6(@head) + @head = Base64.decode64(@head) end def gitea_compare(base, head) From f3cf2c87c9b0c5b8e4917888787b58b60d4e4bd0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 18:29:58 +0800 Subject: [PATCH 22/26] fix: create pr branch name escape --- app/services/pull_requests/create_service.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index eaf931f38..6f93a3c60 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -129,8 +129,10 @@ class PullRequests::CreateService < ApplicationService end def merge_original_pull_params + base_pull_params[:head] = CGI.escape(base_pull_params[:head]) + base_pull_params[:base] = CGI.escape(base_pull_params[:base]) if pull_request.is_original && @params[:merge_user_login] - base_pull_params.merge(head: "#{@params[:merge_user_login]}:#{@params[:head]}") + base_pull_params.merge(head: "#{@params[:merge_user_login]}:#{base_pull_params[:head]}") else base_pull_params end From 8c99b754fb00cb6fc75af28a1473c0d5303adad9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 28 Dec 2021 18:37:44 +0800 Subject: [PATCH 23/26] fix: create pr branch name escape --- app/services/pull_requests/create_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index 6f93a3c60..4b814fd33 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -162,7 +162,7 @@ class PullRequests::CreateService < ApplicationService def compare_head_base! head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@project.identifier}:#{@params[:head]}" : @params[:head] - compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, @params[:base], head, @current_user.gitea_token) + compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, CGI.escape(@params[:base]), CGI.escape(head), @current_user.gitea_token) raise '分支内容相同,无需创建合并请求' if compare_result["Commits"].blank? && compare_result["Diff"].blank? end From fa86d3ea10c6202e4faed7d2c7728e0d95a574a0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 29 Dec 2021 09:50:57 +0800 Subject: [PATCH 24/26] fix: branch delay --- app/controllers/compare_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 869f095dc..4e6d86fc6 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -43,10 +43,10 @@ class CompareController < ApplicationController def load_compare_params # @base = Addressable::URI.unescape(params[:base]) - @base = Base64.decode64(params[:base]) + @base = params[:base].include?(":") ? params[:base].split(":")[0] + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] # @head = Addressable::URI.unescape(@head) - @head = Base64.decode64(@head) + @head = @head.include?(":") ? @head.split(":")[0] + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) end def gitea_compare(base, head) From 0c1df3b2cba93fb47a5ded053bb7f7d8e6a2f52e Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 29 Dec 2021 09:53:14 +0800 Subject: [PATCH 25/26] fix --- app/controllers/compare_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 4e6d86fc6..2bbcbe59e 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -43,10 +43,10 @@ class CompareController < ApplicationController def load_compare_params # @base = Addressable::URI.unescape(params[:base]) - @base = params[:base].include?(":") ? params[:base].split(":")[0] + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) + @base = params[:base].include?(":") ? Addressable::URI.unescape(params[:base].split(":")[0]) + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] # @head = Addressable::URI.unescape(@head) - @head = @head.include?(":") ? @head.split(":")[0] + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) + @head = @head.include?(":") ? Addressable::URI.unescape(@head.split(":")[0]) + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) end def gitea_compare(base, head) From d6b66d532459f411002f4449f83b17e3ae801f39 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 29 Dec 2021 09:56:49 +0800 Subject: [PATCH 26/26] fix --- app/controllers/compare_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/compare_controller.rb b/app/controllers/compare_controller.rb index 2bbcbe59e..07691d79f 100644 --- a/app/controllers/compare_controller.rb +++ b/app/controllers/compare_controller.rb @@ -43,10 +43,10 @@ class CompareController < ApplicationController def load_compare_params # @base = Addressable::URI.unescape(params[:base]) - @base = params[:base].include?(":") ? Addressable::URI.unescape(params[:base].split(":")[0]) + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) + @base = params[:base].include?(":") ? Addressable::URI.unescape(params[:base].split(":")[0]) + ':' + Base64.decode64(params[:base].split(":")[1]) : Base64.decode64(params[:base]) @head = params[:head].include?('.json') ? params[:head][0..-6] : params[:head] # @head = Addressable::URI.unescape(@head) - @head = @head.include?(":") ? Addressable::URI.unescape(@head.split(":")[0]) + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) + @head = @head.include?(":") ? Addressable::URI.unescape(@head.split(":")[0]) + ':' + Base64.decode64(@head.split(":")[1]) : Base64.decode64(@head) end def gitea_compare(base, head)