Merge branch 'report-ssl-errors' of https://gitlab.com/stanhu/gitlab-ce
This commit is contained in:
commit
949a7e8e20
5 changed files with 29 additions and 23 deletions
|
@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
|
|||
|
||||
v 8.3.0 (unreleased)
|
||||
- Fix API setting of 'public' attribute to false will make a project private (Stan Hu)
|
||||
- Handle and report SSL errors in Web hook test (Stan Hu)
|
||||
- Fix: Assignee selector is empty when 'Unassigned' is selected (Jose Corcuera)
|
||||
- Fix 500 error when update group member permission
|
||||
- Trim leading and trailing whitespace of milestone and issueable titles (Jose Corcuera)
|
||||
|
|
|
@ -25,13 +25,12 @@ class Projects::HooksController < Projects::ApplicationController
|
|||
|
||||
def test
|
||||
if !@project.empty_repo?
|
||||
status = TestHookService.new.execute(hook, current_user)
|
||||
status, message = TestHookService.new.execute(hook, current_user)
|
||||
|
||||
if status
|
||||
flash[:notice] = 'Hook successfully executed.'
|
||||
else
|
||||
flash[:alert] = 'Hook execution failed. '\
|
||||
'Ensure hook URL is correct and service is up.'
|
||||
flash[:alert] = "Hook execution failed: #{message}"
|
||||
end
|
||||
else
|
||||
flash[:alert] = 'Hook execution failed. Ensure the project has commits.'
|
||||
|
|
|
@ -37,31 +37,33 @@ class WebHook < ActiveRecord::Base
|
|||
def execute(data, hook_name)
|
||||
parsed_url = URI.parse(url)
|
||||
if parsed_url.userinfo.blank?
|
||||
WebHook.post(url,
|
||||
body: data.to_json,
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: enable_ssl_verification)
|
||||
response = WebHook.post(url,
|
||||
body: data.to_json,
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: enable_ssl_verification)
|
||||
else
|
||||
post_url = url.gsub("#{parsed_url.userinfo}@", "")
|
||||
auth = {
|
||||
username: URI.decode(parsed_url.user),
|
||||
password: URI.decode(parsed_url.password),
|
||||
}
|
||||
WebHook.post(post_url,
|
||||
body: data.to_json,
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: enable_ssl_verification,
|
||||
basic_auth: auth)
|
||||
response = WebHook.post(post_url,
|
||||
body: data.to_json,
|
||||
headers: {
|
||||
"Content-Type" => "application/json",
|
||||
"X-Gitlab-Event" => hook_name.singularize.titleize
|
||||
},
|
||||
verify: enable_ssl_verification,
|
||||
basic_auth: auth)
|
||||
end
|
||||
rescue SocketError, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::OpenTimeout => e
|
||||
|
||||
[response.code == 200, ActionView::Base.full_sanitizer.sanitize(response.to_s)]
|
||||
rescue SocketError, OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED, Net::OpenTimeout => e
|
||||
logger.error("WebHook Error => #{e}")
|
||||
false
|
||||
[false, e.to_s]
|
||||
end
|
||||
|
||||
def async_execute(data, hook_name)
|
||||
|
|
|
@ -70,8 +70,6 @@ class Spinach::Features::ProjectHooks < Spinach::FeatureSteps
|
|||
|
||||
step 'I should see hook service down error message' do
|
||||
expect(page).to have_selector '.flash-alert',
|
||||
text: 'Hook execution failed. '\
|
||||
'Ensure hook URL is correct and '\
|
||||
'service is up.'
|
||||
text: 'Hook execution failed: Exception from'
|
||||
end
|
||||
end
|
||||
|
|
|
@ -71,5 +71,11 @@ describe ProjectHook do
|
|||
|
||||
expect { @project_hook.execute(@data, 'push_hooks') }.to raise_error(RuntimeError)
|
||||
end
|
||||
|
||||
it "handles SSL exceptions" do
|
||||
expect(WebHook).to receive(:post).and_raise(OpenSSL::SSL::SSLError.new('SSL error'))
|
||||
|
||||
expect(@project_hook.execute(@data, 'push_hooks')).to eq([false, 'SSL error'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue