Browse Source

FIX 完善ci服务的解绑流程

tags/v1.0.0
Jasder 5 years ago
parent
commit
32ec60bbe3
5 changed files with 69 additions and 49 deletions
  1. +19
    -5
      app/controllers/ci/cloud_accounts_controller.rb
  2. +23
    -23
      app/controllers/hooks_controller.rb
  3. +3
    -1
      app/models/ci/perm.rb
  4. +10
    -10
      app/services/gitea/hooks/destroy_service.rb
  5. +14
    -10
      app/services/gitea/hooks/list_service.rb

+ 19
- 5
app/controllers/ci/cloud_accounts_controller.rb 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
return render_error('你未绑定CI服务器')
when User::DEVOPS_UNINIT, cloud_account.blank?
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

+ 23
- 23
app/controllers/hooks_controller.rb View File

@@ -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
hooks_response = Gitea::Hooks::ListService.new(@user, @repository.try(:identifier)).call
if hooks_response.status == 200
def index
hooks_response = Gitea::Hooks::ListService.new(@user.gitea_token, @user.login, @repository.try(:identifier)).call
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, # 是否为推送事件
# send_everything: params[:send_everything] || false, #是否为所有事件
# push_only: params[:push_only] || 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, #删除分支/标签
# fork: params[:fork] || false, #仓库被派生
# delete: params[:delete] || false, #删除分支/标签
# fork: params[:fork] || false, #仓库被派生
# issues: params[:issues] || false, #工单 # issues: params[:issues] || false, #工单
# issue_comment: params[:issue_comment] || false, #评论
# push: params[:push] || false # 推送
# issue_comment: params[:issue_comment] || 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
unless @project.user_id == current_user.id
tip_exception(403, "您没有权限进入")
def check_user
unless @project.user_id == current_user.id
tip_exception(403, "您没有权限进入")
end end
end end
end end

+ 3
- 1
app/models/ci/perm.rb 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

+ 10
- 10
app/services/gitea/hooks/destroy_service.rb 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)
@user = user
@repo_name = repo_name
def initialize(token, owner, repo, hook_id)
@token = token
@owner = owner
@repo = repo
@hook_id = hook_id @hook_id = hook_id
end end


def call
response = delete(url, params)
def call
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

+ 14
- 10
app/services/gitea/hooks/list_service.rb 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)
@user = user
@repo_name = repo_name
@body = body
def initialize(token, owner, repo_name, params={})
@token = token
@owner = owner
@repo = repo
@params = params
end end


def call
response = get(url, params)
def call
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…
Cancel
Save