From eb2f1f46e02591e27527de6ecc12f572d8dcf056 Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Fri, 4 Sep 2020 15:46:07 +0800 Subject: [PATCH] ADD create gitea webhook api --- .../ci/cloud_accounts_controller.rb | 16 +++++++++ app/services/gitea/hooks/create_service.rb | 36 +++++++++++++------ 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 79e15a093..a696c075c 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -30,6 +30,9 @@ class Ci::CloudAccountsController < Ci::BaseController ci_user = Ci::User.find_by(user_login: current_user.login) repo = Ci::Repo.where(repo_namespace: current_user.login, repo_name: params[:repo]).first begin + bind_result = bind_hook!(current_user, @cloud_account, @repo) + return render_error('hook激活失败') unless bind_result + repo.activate!(ci_user.user_id) @project.update_column(:open_devops, true) @cloud_account.update_column(:ci_user_id, ci_user.user_id) @@ -149,4 +152,17 @@ class Ci::CloudAccountsController < Ci::BaseController end end end + + def bind_hook!(user, cloud_account, repo) + hook_params = { + "active": true, + "config": { + "content_type": "json", + "url": cloud_account.drone_url + "/hook?secret=#{repo.repo_signer}" + }, + "type": "gitea" + } + result = Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.repo_name, hook_params) + result.status == 201 ? true : false + end end diff --git a/app/services/gitea/hooks/create_service.rb b/app/services/gitea/hooks/create_service.rb index 9c66c9a7e..c6993ffa7 100644 --- a/app/services/gitea/hooks/create_service.rb +++ b/app/services/gitea/hooks/create_service.rb @@ -1,23 +1,39 @@ class Gitea::Hooks::CreateService < Gitea::ClientService - attr_reader :user, :repo_name, :body + attr_reader :token, :owner, :repo, :body - def initialize(user, repo_name, body) - @user = user - @repo_name = repo_name - @body = body + # body params: + # { + # "active": false, + # "branch_filter": "string", + # "config": { + # "content_type": "string", + # "url": "string" + # }, + # "events": [ + # "create" + # ], + # "type": "gitea" + # } + # eg: + # Gitea::Hooks::CreateService.call(user.gitea_token, user.login, repo.identifier, body) + def initialize(token, owner, repo, body) + @token = token + @owner = owner + @repo = repo + @body = body end - def call - response = post(url, params) + def call + post(url, params) end private def params - body.merge(token: user.gitea_token) + Hash.new.merge(token: token, data: body).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