merge develop

This commit is contained in:
xxq250 2023-07-14 14:07:48 +08:00
commit 3ac9c0b5d8
7 changed files with 63 additions and 10 deletions

View File

@ -2,18 +2,44 @@ class ForksController < ApplicationController
before_action :require_login
before_action :require_profile_completed, only: [:create]
before_action :load_project
before_action :authenticate_project!, :authenticate_user!
before_action :authenticate_user!
before_action :authenticate_project!, only: [:create]
def fork_list
@user = current_user
@organizations = current_user.organizations
end
def create
@new_project = Projects::ForkService.new(current_user, @project, params[:organization], params[:new_name], params[:new_identifier]).call
target_owner = if params[:organization].present? && @organization
@organization
else
current_user
end
@new_project = Projects::ForkService.new(target_owner, @project, params[:organization], params[:new_name], params[:new_identifier]).call
if @new_project == false
render_result(-1, "已fork过一次该项目无法再次进行fork")
end
end
private
def authenticate_project!
if current_user&.id == @project.user_id && (params[:new_identifier].blank? || params[:new_identifier] == @project.identifier)
render_result(-1, "自己不能fork自己的项目")
elsif Project.exists?(user_id: current_user.id, identifier: (params[:new_identifier] || @project.identifier))
render_result(0, "fork失败你已拥有了这个项目")
if params[:organization].present?
return render_forbidden('参数错误当organization存在时不允许fork重命名') if params[:new_identifier].present? || params[:new_name].present?
@organization = Organization.find_by(login:params[:organization])
return render_forbidden('仓库不存在') unless @organization.present?
return render_forbidden('你没有权限操作') unless @organization.is_admin?(current_user.id)
end
if params[:organization].blank? && Project.exists?(user_id: current_user.id, identifier: (params[:new_identifier] || @project.identifier))
render_result(-1, "fork失败您已拥有了这个项目")
elsif @organization && Project.exists?(user_id: [@organization.id], identifier: (params[:new_identifier] || @project.identifier))
render_result(-1, "fork失败组织已拥有了这个项目")
elsif gitea_check_exit(current_user)
render_result(-1, "fork失败请联系系统管理员")
elsif @organization && gitea_check_exit(@organization)
render_result(-1, "fork失败请联系系统管理员")
end
# return if current_user != @project.owner
# render_result(-1, "自己不能fork自己的项目")
@ -24,4 +50,9 @@ class ForksController < ApplicationController
return if @project.member?(current_user) || current_user.admin?
render_forbidden('你没有权限操作')
end
def gitea_check_exit(user)
data = Gitea::Repository::GetService.new(user, params[:new_identifier]|| @project.identifier).call
data.present?
end
end

View File

@ -212,6 +212,8 @@ class UsersController < ApplicationController
def update
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)
keywords = user_params[:nickname].to_s.each_char.select { |c| c.bytes.first < 240 }.join('')
return normal_status(-1, "昵称中包含关键词:#{keywords},请重新命名") if ReversedKeyword.check_exists?(keywords)
Util.write_file(@image, avatar_path(@user)) if user_params[:image].present?
@user.attributes = user_params.except(:image)
unless @user.save

View File

@ -9,7 +9,7 @@ class Gitea::User::GetTokenService < Gitea::ClientService
def call
params = {}
url = "/users/#{username}/tokens".freeze
params = params.merge(page: 1, limit: 200, token: token)
params = params.merge(sudo: username, page: 1, limit: 200, token: token)
response = get(url, params)
render_status(response)
end

View File

@ -18,7 +18,7 @@ class Projects::ForkService < ApplicationService
:license_id, :ignore_id, {repository: [:identifier, :hidden]}]
result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization, @new_identifier).call
return false if result['clone_url'].nil?
clone_project.owner = @target_owner
clone_project.forked_from_project_id = @project.id
clone_project.gpid = result['id']

View File

@ -180,7 +180,7 @@ class PullRequests::CreateService < ApplicationService
end
def compare_head_base!
head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@project.identifier}:#{@params[:head]}" : @params[:head]
head = pull_request.is_original && @params[:merge_user_login] ? "#{@params[:merge_user_login]}/#{@params[:merge_project_identifier]}:#{@params[:head]}" : @params[:head]
compare_result = Gitea::Repository::Commits::CompareService.call(@owner.login, @project.identifier, Addressable::URI.escape(@params[:base]), Addressable::URI.escape(head), @current_user.gitea_token)
raise '分支内容相同,无需创建合并请求' if compare_result["Commits"].blank? && compare_result["Diff"].blank?
end

View File

@ -0,0 +1,16 @@
json.user do
json.id @user.id
json.type @user.type
json.name @user.real_name
json.login @user.login
json.image_url url_to_avatar(@user)
json.forked Project.exists?(user_id: @user.id, forked_from_project_id: @project.id)
end
json.organizations @organizations do |organization|
json.forked Project.exists?(user_id: organization.id, forked_from_project_id: @project.id)
json.id organization.id
json.name organization.login
json.nickname organization.nickname.blank? ? organization.name : organization.nickname
json.avatar_url url_to_avatar(organization)
json.created_at organization.created_on.strftime("%Y-%m-%d")
end

View File

@ -625,7 +625,11 @@ Rails.application.routes.draw do
end
resources :hooks
resources :forks, only: [:create]
resources :forks, only: [:create] do
collection do
get :fork_list
end
end
resources :project_trends, :path => :activity, only: [:index, :create]
resources :issue_tags, :path => :labels, only: [:create, :edit, :update, :destroy, :index]
resources :version_releases, :path => :releases, only: [:index,:new, :show, :create, :edit, :update, :destroy]