FIX 完善ci服务的解绑流程
This commit is contained in:
parent
74b2a5b021
commit
32ec60bbe3
|
@ -123,16 +123,30 @@ class Ci::CloudAccountsController < Ci::BaseController
|
||||||
|
|
||||||
def unbind_account!(user)
|
def unbind_account!(user)
|
||||||
cloud_account = user.ci_cloud_account
|
cloud_account = user.ci_cloud_account
|
||||||
|
|
||||||
case user.devops_step
|
case user.devops_step
|
||||||
when User::DEVOPS_UNINIT
|
when User::DEVOPS_UNINIT, cloud_account.blank?
|
||||||
return render_error('你还未绑定CI服务器')
|
return render_error('你未绑定CI服务器')
|
||||||
when User::DEVOPS_UNVERIFIED
|
when User::DEVOPS_UNVERIFIED
|
||||||
cloud_account.destroy
|
cloud_account.destroy!
|
||||||
when User::DEVOPS_CERTIFICATION
|
when User::DEVOPS_CERTIFICATION
|
||||||
cloud_account.ci_user.destroy
|
cloud_account.ci_user.destroy!
|
||||||
end
|
end
|
||||||
user.projects.update_all(open_devops: false)
|
user.projects.update_all(open_devops: false)
|
||||||
user.set_drone_step!(User::DEVOPS_UNINIT)
|
user.set_drone_step!(User::DEVOPS_UNINIT)
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# 删除用户项目下的与ci相关的所有webhook
|
||||||
|
user.projects.each do |project|
|
||||||
|
result = Gitea::Hooks::ListService.call(user.gitea_token, user.login, project.identifier)
|
||||||
|
|
||||||
|
if result.status == 200
|
||||||
|
hooks = JSON.parse(result.body)
|
||||||
|
hooks.each do |hook|
|
||||||
|
if hook['config']['url'].include? cloud_account.drone_host
|
||||||
|
Gitea::Hooks::DestroyService.call(user.gitea_token, user.login, project.identifier, hook['id'])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,18 +4,18 @@ class HooksController < ApplicationController
|
||||||
before_action :check_user
|
before_action :check_user
|
||||||
before_action :set_repository
|
before_action :set_repository
|
||||||
|
|
||||||
def index
|
def index
|
||||||
hooks_response = Gitea::Hooks::ListService.new(@user, @repository.try(:identifier)).call
|
hooks_response = Gitea::Hooks::ListService.new(@user.gitea_token, @user.login, @repository.try(:identifier)).call
|
||||||
if hooks_response.status == 200
|
if hooks_response.status == 200
|
||||||
lists = JSON.parse(hooks_response.body)
|
lists = JSON.parse(hooks_response.body)
|
||||||
@hooks_size = lists.size
|
@hooks_size = lists.size
|
||||||
@hooks = paginate(lists)
|
@hooks = paginate(lists)
|
||||||
else
|
else
|
||||||
normal_status(-1, "出现错误")
|
normal_status(-1, "出现错误")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
#根据gitea的api
|
#根据gitea的api
|
||||||
# hook_params = {
|
# hook_params = {
|
||||||
# active: true,
|
# active: true,
|
||||||
|
@ -36,17 +36,17 @@ class HooksController < ApplicationController
|
||||||
# content_type: params[:content_type].to_i,
|
# content_type: params[:content_type].to_i,
|
||||||
# secret: params[:secret],
|
# secret: params[:secret],
|
||||||
# events: {
|
# events: {
|
||||||
# push_only: params[:push_only] || false, # 是否为推送事件
|
# push_only: params[:push_only] || false, # 是否为推送事件
|
||||||
# send_everything: params[:send_everything] || false, #是否为所有事件
|
# send_everything: params[:send_everything] || false, #是否为所有事件
|
||||||
# choose_events: params[:choose_events] || false, #是否为自定义事件
|
# choose_events: params[:choose_events] || false, #是否为自定义事件
|
||||||
# branch_filter: params[:branch_filter] || "*",
|
# branch_filter: params[:branch_filter] || "*",
|
||||||
# events: {
|
# events: {
|
||||||
# create: params[:create] || false, #创建分支/标签
|
# create: params[:create] || false, #创建分支/标签
|
||||||
# delete: params[:delete] || false, #删除分支/标签
|
# delete: params[:delete] || false, #删除分支/标签
|
||||||
# fork: params[:fork] || false, #仓库被派生
|
# fork: params[:fork] || false, #仓库被派生
|
||||||
# issues: params[:issues] || false, #工单
|
# issues: params[:issues] || false, #工单
|
||||||
# issue_comment: params[:issue_comment] || false, #评论
|
# issue_comment: params[:issue_comment] || false, #评论
|
||||||
# push: params[:push] || false # 推送
|
# push: params[:push] || false # 推送
|
||||||
# pull_request: params[:pull_request] || false #合并请求
|
# pull_request: params[:pull_request] || false #合并请求
|
||||||
# repository: params[:repository] || false #仓库
|
# repository: params[:repository] || false #仓库
|
||||||
# release: params[:release] || false #版本发布
|
# release: params[:release] || false #版本发布
|
||||||
|
@ -58,28 +58,28 @@ class HooksController < ApplicationController
|
||||||
Gitea::Hooks::CreateService.new(@user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能
|
Gitea::Hooks::CreateService.new(@user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能
|
||||||
Gitea::Hooks::CreateService.new(user, p.try(:identifier), hook_params).call #创建gitea的hook功能
|
Gitea::Hooks::CreateService.new(user, p.try(:identifier), hook_params).call #创建gitea的hook功能
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
hook_params = params[:hook_params]
|
hook_params = params[:hook_params]
|
||||||
response = Gitea::Hooks::UpdateService.new(@user, @repository.try(:identifier), hook_params, params[:id]).call
|
response = Gitea::Hooks::UpdateService.new(@user, @repository.try(:identifier), hook_params, params[:id]).call
|
||||||
if response.status == 200
|
if response.status == 200
|
||||||
normal_status(1, "更新成功")
|
normal_status(1, "更新成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "更新失败")
|
normal_status(-1, "更新失败")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
response = Gitea::Hooks::DestroyService.new(@user, @repository.try(:identifier), params[:id]).call
|
response = Gitea::Hooks::DestroyService.new(@user, @repository.try(:identifier), params[:id]).call
|
||||||
if response.status == 204
|
if response.status == 204
|
||||||
normal_status(1, "删除成功")
|
normal_status(1, "删除成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "删除失败")
|
normal_status(-1, "删除失败")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_repository
|
def set_repository
|
||||||
@repository = @project.repository
|
@repository = @project.repository
|
||||||
|
@ -88,9 +88,9 @@ class HooksController < ApplicationController
|
||||||
normal_status(-1, "用户不存在") unless @user.present?
|
normal_status(-1, "用户不存在") unless @user.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_user
|
def check_user
|
||||||
unless @project.user_id == current_user.id
|
unless @project.user_id == current_user.id
|
||||||
tip_exception(403, "您没有权限进入")
|
tip_exception(403, "您没有权限进入")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
class Ci::Perm < Ci::RemoteBase
|
class Ci::Perm < Ci::RemoteBase
|
||||||
belongs_to :user, foreign_key: :perm_user_id
|
self.primary_key = nil
|
||||||
|
|
||||||
|
belongs_to :ci_user, class_name: 'Ci::User', foreign_key: :perm_user_id
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
class Gitea::Hooks::DestroyService < Gitea::ClientService
|
class Gitea::Hooks::DestroyService < Gitea::ClientService
|
||||||
attr_reader :user, :repo_name,:hook_id
|
attr_reader :token, :owner, :repo, :hook_id
|
||||||
|
|
||||||
def initialize(user, repo_name, hook_id)
|
def initialize(token, owner, repo, hook_id)
|
||||||
@user = user
|
@token = token
|
||||||
@repo_name = repo_name
|
@owner = owner
|
||||||
|
@repo = repo
|
||||||
@hook_id = hook_id
|
@hook_id = hook_id
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
response = delete(url, params)
|
delete(url, params)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def params
|
def params
|
||||||
Hash.new.merge(token: user.gitea_token)
|
Hash.new.merge(token: token)
|
||||||
end
|
end
|
||||||
|
|
||||||
def url
|
def url
|
||||||
"/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze
|
"/repos/#{owner}/#{repo}/hooks/#{hook_id}".freeze
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
|
||||||
|
|
|
@ -1,23 +1,27 @@
|
||||||
class Gitea::Hooks::ListService < Gitea::ClientService
|
class Gitea::Hooks::ListService < Gitea::ClientService
|
||||||
attr_reader :user, :repo_name
|
attr_reader :token, :owner, :repo, :params
|
||||||
|
|
||||||
def initialize(user, repo_name)
|
def initialize(token, owner, repo_name, params={})
|
||||||
@user = user
|
@token = token
|
||||||
@repo_name = repo_name
|
@owner = owner
|
||||||
@body = body
|
@repo = repo
|
||||||
|
@params = params
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
response = get(url, params)
|
get(url, params)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def params
|
def params
|
||||||
Hash.new.merge(token: user.gitea_token)
|
Hash.new.merge(token: token,
|
||||||
|
page: params[:page],
|
||||||
|
limit: params[:limit]
|
||||||
|
).compact!
|
||||||
end
|
end
|
||||||
|
|
||||||
def url
|
def url
|
||||||
"/repos/#{user.login}/#{repo_name}/hooks".freeze
|
"/repos/#{owner}/#{repo}/hooks".freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue