Browse Source

ADD create gitea webhook api

tags/v1.0.0
Jasder 5 years ago
parent
commit
eb2f1f46e0
2 changed files with 42 additions and 10 deletions
  1. +16
    -0
      app/controllers/ci/cloud_accounts_controller.rb
  2. +26
    -10
      app/services/gitea/hooks/create_service.rb

+ 16
- 0
app/controllers/ci/cloud_accounts_controller.rb View File

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

+ 26
- 10
app/services/gitea/hooks/create_service.rb View File

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

Loading…
Cancel
Save