From 688be1bb7d1170369d372cee31474d626e009613 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 20 Dec 2021 16:15:33 +0800 Subject: [PATCH 01/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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/42] 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) From 43e06174299dbc8942ff1e5d1c122a4ddb72282b Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 30 Dec 2021 09:47:12 +0800 Subject: [PATCH 27/42] fix: webhook field changed --- app/views/projects/webhooks/_detail.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/webhooks/_detail.json.jbuilder b/app/views/projects/webhooks/_detail.json.jbuilder index 2497e5c64..41a91f4ad 100644 --- a/app/views/projects/webhooks/_detail.json.jbuilder +++ b/app/views/projects/webhooks/_detail.json.jbuilder @@ -1,4 +1,4 @@ json.(webhook, :id, :url, :http_method, :is_active) -json.type webhook.hook_task_type +json.type webhook.type json.last_status webhook.last_status json.create_time Time.at(webhook.created_unix).strftime("%Y-%m-%d %H:%M:%S") \ No newline at end of file From cfd94cb3b7cbfc0f58417dab37071ac1c04b6121 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 3 Jan 2022 20:33:11 +0800 Subject: [PATCH 28/42] fix: migrate repo username nil is excepted --- app/jobs/migrate_remote_repository_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index e54eaf2bc..488141910 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -6,7 +6,7 @@ class MigrateRemoteRepositoryJob < ApplicationJob return if repo.blank? puts "############ MigrateRemoteRepositoryJob starting ... ############" - + params.except!(:auth_password, :auth_username) if params[:auth_username].nil? gitea_repository = Gitea::Repository::MigrateService.new(token, params).call puts "#gitea_repository#{gitea_repository}" if gitea_repository[0]==201 From f339df699ea595b2a4b64e20424c91a2b3bd6b0f Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 3 Jan 2022 22:32:09 +0800 Subject: [PATCH 29/42] add: user upload image --- app/controllers/users_controller.rb | 17 +++++++++++++++-- app/helpers/repositories_helper.rb | 2 +- app/libs/util.rb | 1 + config/routes.rb | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 90e050707..8cb89febd 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,12 +1,13 @@ class UsersController < ApplicationController include ApplicationHelper include Ci::DbConnectable + include RepositoriesHelper before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users, :hovercard] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users, :hovercard] before_action :require_login, only: %i[me list sync_user_info] before_action :connect_to_ci_db, only: [:get_user_info] - before_action :convert_image!, only: [:update] + before_action :convert_image!, only: [:update, :update_image] skip_before_action :check_sign, only: [:attachment_show] def connect_to_ci_db(options={}) @@ -82,7 +83,19 @@ class UsersController < ApplicationController Util.write_file(@image, avatar_path(@user)) if user_params[:image].present? @user.attributes = user_params.except(:image) unless @user.save - render_error(@user.errors.full_messages.join(", ")) + render_error(-1, @user.errors.full_messages.join(", ")) + end + end + + def update_image + return render_not_found unless @user = User.find_by(login: params[:id]) || User.find_by_id(params[:id]) + return render_forbidden unless User.current.logged? && (current_user&.admin? || current_user.id == @user.id) + + return render_error(-1, '头像格式不正确!') unless params[:image].present? && image_type?(File.extname(params[:image].original_filename.to_s)[1..-1]) + if Util.write_file(@image, avatar_path(@user)) && params[:image].present? + render_ok({message: '头像修改成功'}) + else + render_error(-1, '头像修改失败!') end end diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 6eca8f776..b357d40b3 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -15,7 +15,7 @@ module RepositoriesHelper end def image_type?(str) - default_type = %w(png jpg gif tif psd svg bmp webp jpeg) + default_type = %w(png jpg gif tif psd svg bmp webp jpeg ico psd) default_type.include?(str&.downcase) end diff --git a/app/libs/util.rb b/app/libs/util.rb index 1db9460f0..691ed7cab 100644 --- a/app/libs/util.rb +++ b/app/libs/util.rb @@ -29,6 +29,7 @@ module Util file.write(io) end end + true end def download_file(url, save_path) diff --git a/config/routes.rb b/config/routes.rb index d4e1ba1c5..be87e7e68 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -213,6 +213,7 @@ Rails.application.routes.draw do get :watch_users get :fan_users get :hovercard + put :update_image end collection do post :following From 499734ebf9fbfefc197bc6dde4439bc9b27f585c Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 4 Jan 2022 22:44:39 +0800 Subject: [PATCH 30/42] fix: upload user image allow base64 --- app/controllers/application_controller.rb | 10 ++++++++-- app/controllers/users_controller.rb | 14 ++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d7707391f..4e59a7e07 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -709,14 +709,20 @@ class ApplicationController < ActionController::Base Rails.application.config_for(:configuration)['platform_url'] || request.base_url end + def image_type?(str) + default_type = %w(png jpg gif tif psd svg bmp webp jpeg ico psd) + default_type.include?(str&.downcase) + end + def convert_image! @image = params[:image] @image = @image.nil? && params[:user].present? ? params[:user][:image] : @image return unless @image.present? max_size = EduSetting.get('upload_avatar_max_size') || 2 * 1024 * 1024 # 2M if @image.class == ActionDispatch::Http::UploadedFile - render_error('请上传文件') if @image.size.zero? - render_error('文件大小超过限制') if @image.size > max_size.to_i + return render_error('请上传文件') if @image.size.zero? + return render_error('文件大小超过限制') if @image.size > max_size.to_i + return render_error('头像格式不正确!') unless image_type?(File.extname(@image.original_filename.to_s)[1..-1]) else image = @image.to_s.strip return render_error('请上传正确的图片') if image.blank? diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8cb89febd..00ea926fd 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,7 +1,6 @@ class UsersController < ApplicationController include ApplicationHelper include Ci::DbConnectable - include RepositoriesHelper before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users, :hovercard] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users, :hovercard] @@ -90,13 +89,12 @@ class UsersController < ApplicationController def update_image return render_not_found unless @user = User.find_by(login: params[:id]) || User.find_by_id(params[:id]) return render_forbidden unless User.current.logged? && (current_user&.admin? || current_user.id == @user.id) - - return render_error(-1, '头像格式不正确!') unless params[:image].present? && image_type?(File.extname(params[:image].original_filename.to_s)[1..-1]) - if Util.write_file(@image, avatar_path(@user)) && params[:image].present? - render_ok({message: '头像修改成功'}) - else - render_error(-1, '头像修改失败!') - end + + Util.write_file(@image, avatar_path(@user)) + return render_ok({message: '头像修改成功'}) + rescue Exception => e + uid_logger_error(e.message) + render_error(-1, '头像修改失败!') end def me From 7fde1e0e12f346e3c9a20379bf99e896008874d0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 6 Jan 2022 11:10:49 +0800 Subject: [PATCH 31/42] fix: webhook field changed --- app/views/projects/webhooks/edit.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/webhooks/edit.json.jbuilder b/app/views/projects/webhooks/edit.json.jbuilder index 2ee6d24e8..c54d10306 100644 --- a/app/views/projects/webhooks/edit.json.jbuilder +++ b/app/views/projects/webhooks/edit.json.jbuilder @@ -1,6 +1,6 @@ json.id @webhook.id json.(@webhook, :id, :http_method, :content_type, :url, :secret, :last_status, :is_active) -json.type @webhook.hook_task_type +json.type @webhook.type json.create_time Time.at(@webhook.created_unix).strftime("%Y-%m-%d %H:%M:%S") event = @webhook.events json.branch_filter event["branch_filter"] From 84f12adce8512ea37c75aabc25a1f3cd3ce6e5db Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 6 Jan 2022 14:29:31 +0800 Subject: [PATCH 32/42] fix: webhook tasks list error delay --- app/models/gitea/webhook_task.rb | 7 ++++++- app/views/projects/webhooks/tasks.json.jbuilder | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/models/gitea/webhook_task.rb b/app/models/gitea/webhook_task.rb index d19a163aa..325352c69 100644 --- a/app/models/gitea/webhook_task.rb +++ b/app/models/gitea/webhook_task.rb @@ -1,7 +1,6 @@ class Gitea::WebhookTask < Gitea::Base serialize :payload_content, JSON serialize :request_content, JSON - serialize :response_content, JSON self.inheritance_column = nil @@ -10,4 +9,10 @@ class Gitea::WebhookTask < Gitea::Base belongs_to :webhook, class_name: "Gitea::Webhook", foreign_key: :hook_id enum type: {gogs: 1, slack: 2, gitea: 3, discord: 4, dingtalk: 5, telegram: 6, msteams: 7, feishu: 8, matrix: 9} + + def response_content_json + JSON.parse(response_content) + rescue + {} + end end \ No newline at end of file diff --git a/app/views/projects/webhooks/tasks.json.jbuilder b/app/views/projects/webhooks/tasks.json.jbuilder index b8aef99f5..82b2eae4a 100644 --- a/app/views/projects/webhooks/tasks.json.jbuilder +++ b/app/views/projects/webhooks/tasks.json.jbuilder @@ -1,5 +1,6 @@ json.total_count @tasks.total_count json.tasks @tasks.each do |task| - json.(task, :id, :type, :uuid, :is_succeed, :is_delivered, :payload_content, :request_content, :response_content) + json.(task, :id, :event_type, :type, :uuid, :is_succeed, :is_delivered, :payload_content, :request_content) + json.response_content task.response_content_json json.delivered_time Time.at(task.delivered*10**-9).strftime("%Y-%m-%d %H:%M:%S") end \ No newline at end of file From a7665df0ea1728e7e359ad95da61de2532205469 Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 6 Jan 2022 15:04:59 +0800 Subject: [PATCH 33/42] fix: download file url use cgi 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 c39ecbf5b..5ebc00b3f 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/#{URI.escape(params[:filepath])}?ref=#{CGI.escape(params[:ref])}" + url = "/repos/#{@owner.login}/#{@repository.identifier}/raw/#{CGI.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 47d1f727ce15e591893aad2e58dd82ffe6d26aed Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 6 Jan 2022 17:38:44 +0800 Subject: [PATCH 34/42] fix: create team count limit --- .../organizations/teams_controller.rb | 33 +++++++++++++------ .../teams/_simple_detail.json.jbuilder | 3 ++ .../organizations/teams/index.json.jbuilder | 8 +++-- 3 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 app/views/organizations/teams/_simple_detail.json.jbuilder diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index c599ac420..285f9960b 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -4,15 +4,24 @@ class Organizations::TeamsController < Organizations::BaseController before_action :check_user_can_edit_org, only: [:create, :update, :destroy] def index - #if @organization.is_owner?(current_user) || current_user.admin? - @teams = @organization.teams - #else - # @teams = @organization.teams.joins(:team_users).where(team_users: {user_id: current_user.id}) - #end - @is_admin = can_edit_org? - @teams = @teams.includes(:team_units, :team_users) - @teams = kaminari_paginate(@teams) + if params[:is_full].present? + if can_edit_org? + @teams = @organization.teams + else + @teams = [] + end + else + #if @organization.is_owner?(current_user) || current_user.admin? + @teams = @organization.teams + #else + # @teams = @organization.teams.joins(:team_users).where(team_users: {user_id: current_user.id}) + #end + @is_admin = can_edit_org? + @teams = @teams.includes(:team_units, :team_users) + + @teams = kaminari_paginate(@teams) + end end def search @@ -34,8 +43,12 @@ class Organizations::TeamsController < Organizations::BaseController def create ActiveRecord::Base.transaction do - Organizations::CreateTeamForm.new(team_params).validate! - @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + if @organization.teams.count >= 50 + return render_forbidden("组织的团队数量已超过限制!") + else + Organizations::CreateTeamForm.new(team_params).validate! + @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + end end rescue Exception => e uid_logger_error(e.message) diff --git a/app/views/organizations/teams/_simple_detail.json.jbuilder b/app/views/organizations/teams/_simple_detail.json.jbuilder new file mode 100644 index 000000000..5e9a6246d --- /dev/null +++ b/app/views/organizations/teams/_simple_detail.json.jbuilder @@ -0,0 +1,3 @@ +json.id team.id +json.name team.name +json.nickname team.nickname.blank? ? team.name : team.nickname \ No newline at end of file diff --git a/app/views/organizations/teams/index.json.jbuilder b/app/views/organizations/teams/index.json.jbuilder index ad3479ec4..189047fc4 100644 --- a/app/views/organizations/teams/index.json.jbuilder +++ b/app/views/organizations/teams/index.json.jbuilder @@ -1,4 +1,8 @@ -json.total_count @teams.total_count +json.total_count params[:is_full].present? ? @teams.count : @teams.total_count json.teams @teams do |team| - json.partial! "detail", team: team, organization: @organization + if params[:is_full].present? + json.partial! "simple_detail", team: team, organization: @organization + else + json.partial! "detail", team: team, organization: @organization + end end From 7a1e6cfbad27e54bf38435f47662c4626780872f Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 7 Jan 2022 15:19:10 +0800 Subject: [PATCH 35/42] fix: issue edit and new branches only load name api --- app/helpers/tag_chosen_helper.rb | 5 +++-- .../repository/branches/list_name_service.rb | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 app/services/gitea/repository/branches/list_name_service.rb diff --git a/app/helpers/tag_chosen_helper.rb b/app/helpers/tag_chosen_helper.rb index 4ded66e1a..dcf3c457c 100644 --- a/app/helpers/tag_chosen_helper.rb +++ b/app/helpers/tag_chosen_helper.rb @@ -29,8 +29,9 @@ module TagChosenHelper if project.educoder? return ['master'] else - branches = Gitea::Repository::Branches::ListService.call(project&.owner, project.identifier) - branches.collect{|i| i["name"] if i.is_a?(Hash)} + branches = Gitea::Repository::Branches::ListNameService.call(project&.owner, project.identifier) + return branches.collect{|i| i["name"] if i.is_a?(Hash)} if branches.is_a?(Array) + return branches["branch_name"] if branches.is_a?(Hash) end end diff --git a/app/services/gitea/repository/branches/list_name_service.rb b/app/services/gitea/repository/branches/list_name_service.rb new file mode 100644 index 000000000..716ee464c --- /dev/null +++ b/app/services/gitea/repository/branches/list_name_service.rb @@ -0,0 +1,22 @@ +class Gitea::Repository::Branches::ListNameService < Gitea::ClientService + attr_reader :user, :repo + + def initialize(user, repo) + @user = user + @repo = repo + end + + def call + response = get(url, params) + render_200_response(response) + end + + private + def params + Hash.new.merge(token: user.gitea_token) + end + + def url + "/repos/#{user.login}/#{repo}/branch_name_set".freeze + end +end From 2a09ced1ceec6b8bf067ed8844e5edccee5fb825 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 7 Jan 2022 15:41:50 +0800 Subject: [PATCH 36/42] fix: branches use branch name api --- app/controllers/projects_controller.rb | 5 +-- app/views/projects/branches.json.jbuilder | 37 ++++++++++++----------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 77b818cad..571805324 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -82,8 +82,9 @@ class ProjectsController < ApplicationController def branches return @branches = [] unless @project.forge? - result = Gitea::Repository::Branches::ListService.call(@owner, @project.identifier) - @branches = result.is_a?(Hash) && result.key?(:status) ? [] : result + # result = Gitea::Repository::Branches::ListService.call(@owner, @project.identifier) + result = Gitea::Repository::Branches::ListNameService.call(@owner, @project.identifier) + @branches = result.is_a?(Hash) ? (result.key?(:status) ? [] : result["branch_name"]) : result end def branches_slice diff --git a/app/views/projects/branches.json.jbuilder b/app/views/projects/branches.json.jbuilder index c7c2025b3..3bfc9f46b 100644 --- a/app/views/projects/branches.json.jbuilder +++ b/app/views/projects/branches.json.jbuilder @@ -1,21 +1,22 @@ json.array! @branches do |branch| - json.name branch['name'] - json.user_can_push branch['user_can_push'] - json.user_can_merge branch['user_can_merge'] - json.protected branch['protected'] + branch_name = branch.is_a?(Hash) ? branch['name'] : branch + json.name branch_name + # json.user_can_push branch['user_can_push'] + # json.user_can_merge branch['user_can_merge'] + # json.protected branch['protected'] json.http_url render_http_url(@project) - json.zip_url render_zip_url(@owner, @repository, branch['name']) - json.tar_url render_tar_url(@owner, @repository, branch['name']) - json.last_commit do - json.sha branch['commit']['id'] - json.message branch['commit']['message'] - json.timestamp render_unix_time(branch['commit']['timestamp']) - json.time_from_now time_from_now(branch['commit']['timestamp']) - json.author do - json.partial! 'repositories/commit_author', user: render_cache_commit_author(branch['commit']['author']), name: branch['commit']['author']['name'] - end - json.committer do - json.partial! 'repositories/commit_author', user: render_cache_commit_author(branch['commit']['committer']), name: branch['commit']['committer']['name'] - end - end + json.zip_url render_zip_url(@owner, @repository, branch_name) + json.tar_url render_tar_url(@owner, @repository, branch_name) + # json.last_commit do + # json.sha branch['commit']['id'] + # json.message branch['commit']['message'] + # json.timestamp render_unix_time(branch['commit']['timestamp']) + # json.time_from_now time_from_now(branch['commit']['timestamp']) + # json.author do + # json.partial! 'repositories/commit_author', user: render_cache_commit_author(branch['commit']['author']), name: branch['commit']['author']['name'] + # end + # json.committer do + # json.partial! 'repositories/commit_author', user: render_cache_commit_author(branch['commit']['committer']), name: branch['commit']['committer']['name'] + # end + # end end From f9bc2258ec68f006cc7d15c1a8353800eef1b500 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 11 Jan 2022 10:48:29 +0800 Subject: [PATCH 37/42] fix: migrate repo github use another addr --- app/controllers/projects_controller.rb | 27 +++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 571805324..6802dd063 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -59,18 +59,23 @@ class ProjectsController < ApplicationController Projects::MigrateForm.new(mirror_params).validate! @project = - if enable_accelerator?(mirror_params[:clone_addr]) + # if enable_accelerator?(mirror_params[:clone_addr]) + # source_clone_url = mirror_params[:clone_addr] + # uid_logger("########## 已动加速器 ##########") + # result = Gitea::Accelerator::MigrateService.call(mirror_params) + # if result[:status] == :success + # Rails.logger.info "########## 加速镜像成功 ########## " + # Projects::MigrateService.call(current_user, + # mirror_params.merge(source_clone_url: source_clone_url, + # clone_addr: accelerator_url(mirror_params[:repository_name]))) + # else + # Projects::MigrateService.call(current_user, mirror_params) + # end + if mirror_params[:clone_addr].include?("github.com") source_clone_url = mirror_params[:clone_addr] - uid_logger("########## 已动加速器 ##########") - result = Gitea::Accelerator::MigrateService.call(mirror_params) - if result[:status] == :success - Rails.logger.info "########## 加速镜像成功 ########## " - Projects::MigrateService.call(current_user, - mirror_params.merge(source_clone_url: source_clone_url, - clone_addr: accelerator_url(mirror_params[:repository_name]))) - else - Projects::MigrateService.call(current_user, mirror_params) - end + clone_url = source_clone_url.gsub('github.com', 'github.com.cnpmjs.org') + uid_logger("########## 更改clone_addr ##########") + Projects::MigrateService.call(current_user, mirror_params.merge(source_clone_url: source_clone_url, clone_addr: clone_url)) else Projects::MigrateService.call(current_user, mirror_params) end From f33b9559cd4a1100437f315cabf37a258881defa Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 13 Jan 2022 11:24:27 +0800 Subject: [PATCH 38/42] fix: download delay --- app/helpers/repositories_helper.rb | 2 +- app/views/repositories/_simple_entry.json.jbuilder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index b357d40b3..c69241858 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -11,7 +11,7 @@ module RepositoriesHelper def download_type(str) default_type = %w(xlsx xls ppt pptx pdf zip 7z rar exe pdb obj idb RData rdata doc docx mpp vsdx dot otf eot ttf woff woff2 mp4 mov wmv flv mpeg avi avchd webm mkv) - default_type.include?(str&.downcase) + default_type.include?(str&.downcase) || str.blank? end def image_type?(str) diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 80a54d477..9d0998c82 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -9,7 +9,7 @@ if @project.forge? json.type entry['type'] json.size entry['size'] - json.content decode64_content(entry, @owner, @repository, @ref, @path) + json.content direct_download ? nil : decode64_content(entry, @owner, @repository, @ref, @path) json.target entry['target'] download_url = From b6b8befde797cb4365dbbe5c52fc8f7c726353f2 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 14 Jan 2022 10:55:01 +0800 Subject: [PATCH 39/42] fix: pr update must edit assignee login --- app/controllers/pull_requests_controller.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index bd9ae7701..0e3b5e608 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -274,10 +274,11 @@ class PullRequestsController < ApplicationController base: params[:base], #目标分支 milestone: 0, #里程碑,未与本地的里程碑关联 } + assignee_login = User.find_by_id(params[:assigned_to_id])&.login @requests_params = @local_params.merge({ - assignee: current_user.try(:login), + assignee: assignee_login, # assignees: ["#{params[:assigned_login].to_s}"], - assignees: ["#{current_user.try(:login).to_s}"], + assignees: ["#{assignee_login.to_s}"], labels: params[:issue_tag_ids], due_date: Time.now }) From 5d45b24299edc087fa598f6ad52b26a085b10a28 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 14 Jan 2022 10:55:53 +0800 Subject: [PATCH 40/42] fix: devops return result changed --- app/controllers/concerns/ci/cloud_account_manageable.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 13edb09c6..9f0998edc 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -179,7 +179,7 @@ module Ci::CloudAccountManageable def drone_oauth_user!(url, state) logger.info "[drone] drone_oauth_user url: #{url}" - conn = Faraday.new(url: url) do |req| + conn = Faraday.new(url: "#{Gitea.gitea_config[:domain]}#{url}") do |req| req.request :url_encoded req.adapter Faraday.default_adapter req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" @@ -188,7 +188,8 @@ module Ci::CloudAccountManageable response = conn.get logger.info "[drone] response headers: #{response.headers}" - response.headers['location'].include?('error') ? false : true + true + # response.headers['location'].include?('error') ? false : true end private From 25d0e784bbcc29cbc17051c8bafd1432ad909333 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 14 Jan 2022 16:00:59 +0800 Subject: [PATCH 41/42] fix: pr assignee info use array --- app/controllers/pull_requests_controller.rb | 5 ++--- app/services/pull_requests/create_service.rb | 5 ++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 0e3b5e608..2417e4fd5 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -276,11 +276,10 @@ class PullRequestsController < ApplicationController } assignee_login = User.find_by_id(params[:assigned_to_id])&.login @requests_params = @local_params.merge({ - assignee: assignee_login, # assignees: ["#{params[:assigned_login].to_s}"], assignees: ["#{assignee_login.to_s}"], - labels: params[:issue_tag_ids], - due_date: Time.now + labels: params[:issue_tag_ids] + # due_date: Time.now }) @issue_params = { author_id: current_user.id, diff --git a/app/services/pull_requests/create_service.rb b/app/services/pull_requests/create_service.rb index 4b814fd33..d15b3f9fc 100644 --- a/app/services/pull_requests/create_service.rb +++ b/app/services/pull_requests/create_service.rb @@ -125,7 +125,10 @@ class PullRequests::CreateService < ApplicationService end def gitea_pull_request_params - merge_original_pull_params.except(:milestone) + assignee_login = User.find_by_id(params[:assigned_to_id])&.login + merge_original_pull_params.except(:milestone).merge( + # assignees: ["#{params[:assigned_login].to_s}"], + assignees: ["#{assignee_login.to_s}"]) end def merge_original_pull_params From 70d22f7c4f7d503ae15eed63369fb7865a3ac6ea Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 14 Jan 2022 16:09:38 +0800 Subject: [PATCH 42/42] fix: create team overflow tip --- app/controllers/organizations/teams_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 285f9960b..09f5bc3f0 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -44,7 +44,7 @@ class Organizations::TeamsController < Organizations::BaseController def create ActiveRecord::Base.transaction do if @organization.teams.count >= 50 - return render_forbidden("组织的团队数量已超过限制!") + return tip_exception("组织的团队数量已超过限制!") else Organizations::CreateTeamForm.new(team_params).validate! @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params)