59 lines
2.4 KiB
Ruby
59 lines
2.4 KiB
Ruby
class ForksController < ApplicationController
|
||
before_action :require_login
|
||
before_action :require_profile_completed, only: [:create]
|
||
before_action :load_project
|
||
before_action :authenticate_user!
|
||
before_action :authenticate_project!, only: [:create]
|
||
|
||
def fork_list
|
||
@user = current_user
|
||
@organizations = current_user.organizations
|
||
|
||
end
|
||
|
||
def create
|
||
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 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失败,fork失败,仓库底层数据出现了问题")
|
||
end
|
||
# return if current_user != @project.owner
|
||
# render_result(-1, "自己不能fork自己的项目")
|
||
end
|
||
|
||
def authenticate_user!
|
||
return if @project.is_public
|
||
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
|