Skip to content

Commit 53dfa71

Browse files
committed
PostReceive hook now handle https URLs properly.
1 parent 46e6602 commit 53dfa71

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

Diff for: app/controllers/gitolite_hooks_controller.rb

+31-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
include ActionView::Helpers::TextHelper
2+
13
class GitoliteHooksController < ApplicationController
24

35
skip_before_filter :verify_authenticity_token, :check_if_login_required, :except => :test
@@ -57,21 +59,41 @@ def post_receive
5759

5860
# Post to each post-receive URL
5961
@repository.repository_post_receive_urls.all(:order => "active DESC, created_at ASC", :conditions => "active=1").each {|prurl|
60-
msg = "Posting #{payloads.length} post-receive payloads to #{prurl.url} ... "
61-
GitHosting.logger.debug msg
62+
if prurl.mode == :github
63+
msg = "Sending #{pluralize(payloads.length,'notification')} to #{prurl.url} ... "
64+
else
65+
msg = "Notifying #{prurl.url} ... "
66+
end
6267
output.write msg
6368
output.flush
69+
6470
uri = URI(prurl.url)
71+
http = Net::HTTP.new(uri.host, uri.port)
72+
http.use_ssl = (uri.scheme == 'https')
73+
74+
errmsg = nil
6575
payloads.each {|payload|
66-
if prurl.mode == :github
67-
res = Net::HTTP.post_form(uri, {"payload" => payload.to_json})
68-
else
69-
res = Net::HTTP.get_response(uri)
76+
begin
77+
if prurl.mode == :github
78+
request = Net::HTTP::Post.new(uri.request_uri)
79+
request.set_form_data({"payload" => payload.to_json})
80+
else
81+
request = Net::HTTP::Get.new(uri.request_uri)
82+
end
83+
res = http.start {|openhttp| openhttp.request request}
84+
errmsg = "Return code: #{res.code} (#{res.message})." if !res.is_a?(Net::HTTPSuccess)
85+
rescue => e
86+
errmsg = "Exception: #{e.message}"
7087
end
71-
output.write res.is_a?(Net::HTTPSuccess) ? "[success] " : "[failure] "
72-
output.flush
88+
break if errmsg || prurl.mode != :github
7389
}
74-
output.write "done\n"
90+
if errmsg
91+
output.write "[failure] done\n"
92+
GitHosting.logger.error "[ #{msg}Failed!\n #{errmsg} ]"
93+
else
94+
output.write "[success] done\n"
95+
GitHosting.logger.info "[ #{msg}Succeeded! ]"
96+
end
7597
output.flush
7698
} if @repository.repository_post_receive_urls.any?
7799

0 commit comments

Comments
 (0)