186 lines
6.1 KiB
Ruby
186 lines
6.1 KiB
Ruby
class IssueWebhookJob < ApplicationJob
|
|
include ApplicationHelper
|
|
queue_as :message
|
|
|
|
def perform(issue_id)
|
|
issue = Issue.find_by(id: issue_id)
|
|
return if issue.blank?
|
|
project = issue.project
|
|
user = issue.user
|
|
domain = "#{Rails.application.config_for(:configuration)['platform_url']}"
|
|
gitea_domain = GiteaService.gitea_config[:domain]
|
|
ssh_url = "git@#{gitea_domain.gsub("https://", "")}:#{project.owner.login}/#{project.identifier}.git"
|
|
event_json = {
|
|
"action": "opened",
|
|
"number": 1,
|
|
"issue": {
|
|
"id": issue.id,
|
|
"url": "#{domain}/api/v1/#{project.owner.login}/#{project.identifier}/issues/#{issue.id}",
|
|
"html_url": "#{domain}/#{project.owner.login}/#{project.identifier}/issues/#{issue.id}",
|
|
"number": 1,
|
|
"user": {
|
|
"id": user.id,
|
|
"login": "#{user.login}",
|
|
"full_name": "",
|
|
"email": "#{user.mail}",
|
|
"avatar_url": "#{domain}/#{url_to_avatar(user)}",
|
|
"language": "",
|
|
"is_admin": false,
|
|
"last_login": "#{user.last_login_on}",
|
|
"created": "#{user.created_on}",
|
|
"restricted": false,
|
|
"active": false,
|
|
"prohibit_login": false,
|
|
"location": "",
|
|
"website": "",
|
|
"description": "",
|
|
"visibility": "public",
|
|
"followers_count": 0,
|
|
"following_count": 0,
|
|
"starred_repos_count": 0,
|
|
"username": "#{user.login}"
|
|
},
|
|
"original_author": "",
|
|
"original_author_id": 0,
|
|
"title": "#{issue.subject}",
|
|
"body": "#{issue.description}",
|
|
"ref": "",
|
|
"labels": [],
|
|
"milestone": nil,
|
|
"assignee": nil,
|
|
"assignees": nil,
|
|
"state": "open",
|
|
"is_locked": false,
|
|
"comments": 0,
|
|
"created_at": "#{issue.created_on}",
|
|
"updated_at": "#{issue.updated_on}",
|
|
"closed_at": nil,
|
|
"due_date": nil,
|
|
"pull_request": nil,
|
|
"repository": {
|
|
"id": 11307,
|
|
"name": "#{project.identifier}",
|
|
"owner": "#{project.owner.login}",
|
|
"full_name": "#{project.owner.login}/#{project.identifier}"
|
|
}
|
|
},
|
|
"repository": {
|
|
"id": project.id,
|
|
"owner": {
|
|
"id": project.owner.id,
|
|
"login": "#{project.owner.login}",
|
|
"full_name": "",
|
|
"email": "#{project.owner.mail}",
|
|
"avatar_url": "#{domain}/#{url_to_avatar(project.owner)}",
|
|
"language": "",
|
|
"is_admin": false,
|
|
"last_login": "#{project.owner.last_login_on}",
|
|
"created": "#{project.owner.created_on}",
|
|
"restricted": false,
|
|
"active": false,
|
|
"prohibit_login": false,
|
|
"location": "",
|
|
"website": "",
|
|
"description": "",
|
|
"visibility": "public",
|
|
"followers_count": 0,
|
|
"following_count": 0,
|
|
"starred_repos_count": 0,
|
|
"username": "#{project.owner.login}"
|
|
},
|
|
"name": "#{project.identifier}",
|
|
"full_name": "#{project.owner.login}/#{project.identifier}",
|
|
"description": "",
|
|
"empty": false,
|
|
"private": false,
|
|
"fork": false,
|
|
"template": false,
|
|
"parent": nil,
|
|
"mirror": false,
|
|
"size": 843,
|
|
"html_url": "#{domain}/#{project.owner.login}/#{project.identifier}",
|
|
"ssh_url": "#{ssh_url}",
|
|
"clone_url": "#{domain}/#{project.owner.login}/#{project.identifier}.git",
|
|
"original_url": "#{project.repository.mirror_url}",
|
|
"website": "",
|
|
"stars_count": 0,
|
|
"forks_count": 0,
|
|
"watchers_count": 1,
|
|
"open_issues_count": 1,
|
|
"open_pr_counter": 0,
|
|
"release_counter": 0,
|
|
"default_branch": "master",
|
|
"archived": false,
|
|
"created_at": "#{project.created_on}",
|
|
"updated_at": "#{project.updated_on}",
|
|
"permissions": {
|
|
"admin": true,
|
|
"push": true,
|
|
"pull": true
|
|
},
|
|
"has_issues": true,
|
|
"internal_tracker": {
|
|
"enable_time_tracker": true,
|
|
"allow_only_contributors_to_track_time": true,
|
|
"enable_issue_dependencies": true
|
|
},
|
|
"has_wiki": true,
|
|
"has_pull_requests": true,
|
|
"has_projects": false,
|
|
"ignore_whitespace_conflicts": false,
|
|
"allow_merge_commits": true,
|
|
"allow_rebase": true,
|
|
"allow_rebase_explicit": true,
|
|
"allow_squash_merge": true,
|
|
"default_merge_style": "merge",
|
|
"avatar_url": "",
|
|
"internal": false,
|
|
"mirror_interval": ""
|
|
},
|
|
"sender": {
|
|
"id": user.id,
|
|
"login": "#{user.login}",
|
|
"full_name": "",
|
|
"email": "#{user.mail}",
|
|
"avatar_url": "#{domain}/#{url_to_avatar(user)}",
|
|
"language": "",
|
|
"is_admin": false,
|
|
"last_login": "#{user.last_login_on}",
|
|
"created": "#{user.created_on}",
|
|
"restricted": false,
|
|
"active": false,
|
|
"prohibit_login": false,
|
|
"location": "",
|
|
"website": "",
|
|
"description": "",
|
|
"visibility": "public",
|
|
"followers_count": 0,
|
|
"following_count": 0,
|
|
"starred_repos_count": 0,
|
|
"username": "#{user.login}"
|
|
}
|
|
}
|
|
# puts "event_json:#{event_json.to_json}"
|
|
begin
|
|
url = URI("http://117.50.185.50:80")
|
|
http = Net::HTTP.new(url.host, url.port)
|
|
request = Net::HTTP::Post.new(url)
|
|
request["Content-Type"] = "application/json"
|
|
uuid = SecureRandom.uuid
|
|
request['X-GitHub-Delivery'] = uuid
|
|
request['X-Gitea-Delivery'] = uuid
|
|
request['X-Gogs-Delivery'] = uuid
|
|
request['X-GitHub-Event'] = 'issues'
|
|
request['X-Gitea-Event'] = 'issues'
|
|
request['X-Gogs-Event'] = 'issues'
|
|
request.body = JSON.dump(event_json)
|
|
|
|
response = http.request(request)
|
|
Rails.logger.info "issue #{issue_id} webhook event======#{response.read_body}"
|
|
rescue Exception => e
|
|
Rails.logger.info "issue #{issue_id} webhook event error======#{e.message}"
|
|
puts "issue: #{issue_id} webhook event error======#{e.message}"
|
|
end
|
|
end
|
|
|
|
end |