|
|
|
@@ -0,0 +1,181 @@ |
|
|
|
class IssueWebhookJob < ApplicationJob |
|
|
|
include ApplicationHelper |
|
|
|
queue_as :message |
|
|
|
|
|
|
|
def perform(issue_id, user_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": 888, |
|
|
|
"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": null, |
|
|
|
"assignee": null, |
|
|
|
"assignees": null, |
|
|
|
"state": "open", |
|
|
|
"is_locked": false, |
|
|
|
"comments": 0, |
|
|
|
"created_at": "#{issue.created_on}", |
|
|
|
"updated_at": "#{issue.updated_on}", |
|
|
|
"closed_at": null, |
|
|
|
"due_date": null, |
|
|
|
"pull_request": null, |
|
|
|
"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": null, |
|
|
|
"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}" |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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 webhook event======#{response.read_body}" |
|
|
|
end |
|
|
|
|
|
|
|
end |