From 32ec60bbe3f377be90cf172296a50db26c1e5ce8 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 10:17:44 +0800 Subject: [PATCH] =?UTF-8?q?FIX=20=E5=AE=8C=E5=96=84ci=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E8=A7=A3=E7=BB=91=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ci/cloud_accounts_controller.rb | 24 ++++++++-- app/controllers/hooks_controller.rb | 46 +++++++++---------- app/models/ci/perm.rb | 4 +- app/services/gitea/hooks/destroy_service.rb | 20 ++++---- app/services/gitea/hooks/list_service.rb | 24 ++++++---- 5 files changed, 69 insertions(+), 49 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index f133ec445..dc5579ef5 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -123,16 +123,30 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind_account!(user) cloud_account = user.ci_cloud_account - 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 - cloud_account.destroy + cloud_account.destroy! when User::DEVOPS_CERTIFICATION - cloud_account.ci_user.destroy + cloud_account.ci_user.destroy! end user.projects.update_all(open_devops: false) 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 diff --git a/app/controllers/hooks_controller.rb b/app/controllers/hooks_controller.rb index 92b1d7227..206f79477 100644 --- a/app/controllers/hooks_controller.rb +++ b/app/controllers/hooks_controller.rb @@ -4,18 +4,18 @@ class HooksController < ApplicationController before_action :check_user 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) @hooks_size = lists.size @hooks = paginate(lists) - else + else normal_status(-1, "出现错误") end end - def create + def create #根据gitea的api # hook_params = { # active: true, @@ -36,17 +36,17 @@ class HooksController < ApplicationController # content_type: params[:content_type].to_i, # secret: params[:secret], # 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, #是否为自定义事件 # branch_filter: params[:branch_filter] || "*", # events: { # create: params[:create] || false, #创建分支/标签 - # delete: params[:delete] || false, #删除分支/标签 - # fork: params[:fork] || false, #仓库被派生 + # delete: params[:delete] || false, #删除分支/标签 + # fork: params[:fork] || 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 #合并请求 # repository: params[:repository] || 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, p.try(:identifier), hook_params).call #创建gitea的hook功能 - end + end - def update + def update hook_params = params[:hook_params] 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, "更新成功") - else + else normal_status(-1, "更新失败") end - end + end - def destroy + def destroy response = Gitea::Hooks::DestroyService.new(@user, @repository.try(:identifier), params[:id]).call if response.status == 204 normal_status(1, "删除成功") - else + else normal_status(-1, "删除失败") end - end + end - private + private def set_repository @repository = @project.repository @@ -88,9 +88,9 @@ class HooksController < ApplicationController normal_status(-1, "用户不存在") unless @user.present? 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 diff --git a/app/models/ci/perm.rb b/app/models/ci/perm.rb index ae16d5880..8a238c2c6 100644 --- a/app/models/ci/perm.rb +++ b/app/models/ci/perm.rb @@ -1,4 +1,6 @@ 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 diff --git a/app/services/gitea/hooks/destroy_service.rb b/app/services/gitea/hooks/destroy_service.rb index 779ebd41d..b30178eaf 100644 --- a/app/services/gitea/hooks/destroy_service.rb +++ b/app/services/gitea/hooks/destroy_service.rb @@ -1,23 +1,23 @@ 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 end - def call - response = delete(url, params) + def call + delete(url, params) end private def params - Hash.new.merge(token: user.gitea_token) + Hash.new.merge(token: token) end def url - "/repos/#{user.login}/#{repo_name}/hooks/#{hook_id}".freeze + "/repos/#{owner}/#{repo}/hooks/#{hook_id}".freeze end - -end \ No newline at end of file +end diff --git a/app/services/gitea/hooks/list_service.rb b/app/services/gitea/hooks/list_service.rb index 00170073f..04dab7dbe 100644 --- a/app/services/gitea/hooks/list_service.rb +++ b/app/services/gitea/hooks/list_service.rb @@ -1,23 +1,27 @@ 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 - def call - response = get(url, params) + def call + get(url, params) end private def params - Hash.new.merge(token: user.gitea_token) + Hash.new.merge(token: token, + page: params[:page], + limit: params[:limit] + ).compact! end def url - "/repos/#{user.login}/#{repo_name}/hooks".freeze + "/repos/#{owner}/#{repo}/hooks".freeze end -end \ No newline at end of file +end