FIX 完善ci服务的解绑流程

This commit is contained in:
Jasder 2020-09-04 10:17:44 +08:00
parent 74b2a5b021
commit 32ec60bbe3
5 changed files with 69 additions and 49 deletions

View File

@ -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

View File

@ -5,7 +5,7 @@ class HooksController < ApplicationController
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

View File

@ -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

View File

@ -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

View File

@ -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