def handle_error!(response, url, client)
messages = []
parse_error = nil
begin
result = RHC::Json.decode(response.content)
messages = parse_messages(result, {})
rescue => e
debug "Response did not include a message from server: #{e.message}"
end
case response.status
when 400
raise_generic_error(url, client) if messages.empty?
message, keys = messages_to_fields(messages)
raise ValidationException.new(message || "The operation could not be completed.", keys)
when 401
raise UnAuthorizedException, "Not authenticated"
when 403
raise RequestDeniedException, messages_to_error(messages) || "You are not authorized to perform this operation."
when 404
if messages.length == 1
case messages.first['exit_code']
when 127
raise DomainNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
when 101
raise ApplicationNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
end
end
raise ResourceNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
when 409
raise_generic_error(url, client) if messages.empty?
message, keys = messages_to_fields(messages)
raise ValidationException.new(message || "The operation could not be completed.", keys)
when 422
raise_generic_error(url, client) if messages.empty?
message, keys = messages_to_fields(messages)
raise ValidationException.new(message || "The operation was not valid.", keys)
when 400
raise ClientErrorException, messages_to_error(messages) || "The server did not accept the requested operation."
when 500
raise ServerErrorException, messages_to_error(messages) || generic_error_message(url, client)
when 503
raise ServiceUnavailableException, messages_to_error(messages) || generic_error_message(url, client)
else
raise ServerErrorException, messages_to_error(messages) || "Server returned an unexpected error code: #{response.status}"
end
raise_generic_error
end