Skip to content
Snippets Groups Projects
Unverified Commit 1f69b76e authored by azul's avatar azul
Browse files

respond with 400 on invalid input

parent 59cf7e32
Branches bugfix/400
No related tags found
1 merge request!10respond with 400 on invalid input
Pipeline #
module Nickserver
class ClientError < StandardError
end
end
...@@ -3,12 +3,12 @@ require 'nickserver/response' ...@@ -3,12 +3,12 @@ require 'nickserver/response'
module Nickserver module Nickserver
class ErrorResponse < Nickserver::Response class ErrorResponse < Nickserver::Response
def initialize(message) def initialize(message)
@status = 500 @status = 400
@message = message + "\n" @message = message
end end
def content def content
"#{status} #{message}" JSON.generate(error: message)
end end
protected protected
......
...@@ -6,6 +6,7 @@ require 'nickserver/config' ...@@ -6,6 +6,7 @@ require 'nickserver/config'
require 'nickserver/adapters/celluloid_http' require 'nickserver/adapters/celluloid_http'
require 'nickserver/dispatcher' require 'nickserver/dispatcher'
require 'nickserver/logging_responder' require 'nickserver/logging_responder'
require 'nickserver/client_error'
module Nickserver module Nickserver
class ReelServer < Reel::Server::HTTP class ReelServer < Reel::Server::HTTP
...@@ -35,16 +36,24 @@ module Nickserver ...@@ -35,16 +36,24 @@ module Nickserver
protected protected
def handle_request(request) def handle_request(request)
logger.info "#{request.method} #{request.uri}" log_request(request)
logger.debug " #{params(request)}"
handler = handler_for(request) handler = handler_for(request)
handler.respond_to params(request), request.headers handler.respond_to params(request), request.headers
rescue ClientError => e
logger.warn e
request.respond 400, JSON.generate(error: e.message)
rescue StandardError => e rescue StandardError => e
logger.error e logger.error e
logger.error e.backtrace.join "\n "
request.respond 500, "{}" request.respond 500, "{}"
end end
def log_request(request)
logger.info "#{request.method} #{request.uri}"
logger.debug " #{params(request)}"
rescue URI::Error => e
raise ClientError, e.message
end
def handler_for(request) def handler_for(request)
# with reel the request is the responder # with reel the request is the responder
responder = LoggingResponder.new(request, logger) responder = LoggingResponder.new(request, logger)
......
...@@ -123,7 +123,7 @@ class Nickserver::DispatcherTest < Minitest::Test ...@@ -123,7 +123,7 @@ class Nickserver::DispatcherTest < Minitest::Test
end end
def error(msg) def error(msg)
response status: 500, content: "500 #{msg}\n" response status: 400, content: JSON.generate(error: msg)
end end
def http_connection_error def http_connection_error
......
require 'test_helper' require 'test_helper'
require 'nickserver/error_response' require 'nickserver/error_response'
require 'json'
class ErrorResponseTest < Minitest::Test class ErrorResponseTest < Minitest::Test
def test_content def test_content
response = Nickserver::ErrorResponse.new "Not a valid address" response = Nickserver::ErrorResponse.new "Not a valid address"
assert_equal "500 Not a valid address\n", response.content assert_equal 400, response.status
assert_equal 500, response.status assert_equal JSON.generate(error: "Not a valid address"),
response.content
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment