2015-10-23 18:33:26 +00:00
|
|
|
module Kemal
|
2014-07-30 22:17:53 +00:00
|
|
|
class Config
|
2016-05-05 19:35:36 +00:00
|
|
|
INSTANCE = Config.new
|
|
|
|
HANDLERS = [] of HTTP::Handler
|
|
|
|
ERROR_HANDLERS = {} of Int32 => HTTP::Server::Context -> String
|
2016-06-14 21:18:00 +00:00
|
|
|
@ssl : OpenSSL::SSL::Context::Server?
|
2016-04-16 21:04:53 +00:00
|
|
|
@server : HTTP::Server?
|
2016-04-09 14:20:39 +00:00
|
|
|
|
2016-03-19 13:15:25 +00:00
|
|
|
property host_binding, ssl, port, env, public_folder, logging,
|
2016-05-08 00:22:08 +00:00
|
|
|
always_rescue, serve_static, server, extra_options
|
2014-07-30 22:17:53 +00:00
|
|
|
|
|
|
|
def initialize
|
2016-02-15 07:01:41 +00:00
|
|
|
@host_binding = "0.0.0.0"
|
2014-07-30 22:17:53 +00:00
|
|
|
@port = 3000
|
2016-02-15 07:01:41 +00:00
|
|
|
@env = "development"
|
|
|
|
@serve_static = true
|
2015-12-12 18:27:46 +00:00
|
|
|
@public_folder = "./public"
|
2016-01-17 11:08:12 +00:00
|
|
|
@logging = true
|
2016-02-12 12:11:21 +00:00
|
|
|
@logger = nil
|
2016-02-14 10:43:25 +00:00
|
|
|
@error_handler = nil
|
|
|
|
@always_rescue = true
|
2014-07-30 22:17:53 +00:00
|
|
|
end
|
|
|
|
|
2016-02-12 12:11:21 +00:00
|
|
|
def logger
|
|
|
|
@logger.not_nil!
|
2014-07-30 22:17:53 +00:00
|
|
|
end
|
2015-11-12 20:48:22 +00:00
|
|
|
|
2016-02-12 12:11:21 +00:00
|
|
|
def logger=(logger : Kemal::BaseLogHandler)
|
|
|
|
@logger = logger
|
2015-11-12 20:48:22 +00:00
|
|
|
end
|
|
|
|
|
2016-02-12 12:11:21 +00:00
|
|
|
def scheme
|
|
|
|
ssl ? "https" : "http"
|
2016-01-17 12:17:27 +00:00
|
|
|
end
|
|
|
|
|
2016-02-12 12:11:21 +00:00
|
|
|
def handlers
|
|
|
|
HANDLERS
|
2016-01-17 12:17:27 +00:00
|
|
|
end
|
|
|
|
|
2015-11-12 20:48:22 +00:00
|
|
|
def add_handler(handler : HTTP::Handler)
|
|
|
|
HANDLERS << handler
|
|
|
|
end
|
2015-12-12 18:27:46 +00:00
|
|
|
|
2015-12-15 21:11:21 +00:00
|
|
|
def add_ws_handler(handler : HTTP::WebSocketHandler)
|
|
|
|
HANDLERS << handler
|
|
|
|
end
|
2016-02-12 12:11:21 +00:00
|
|
|
|
2016-05-05 19:35:36 +00:00
|
|
|
def error_handlers
|
|
|
|
ERROR_HANDLERS
|
|
|
|
end
|
|
|
|
|
|
|
|
def add_error_handler(status_code, &handler : HTTP::Server::Context -> _)
|
|
|
|
ERROR_HANDLERS[status_code] = ->(context : HTTP::Server::Context) { handler.call(context).to_s }
|
|
|
|
end
|
|
|
|
|
2016-02-15 07:01:41 +00:00
|
|
|
def setup
|
2016-05-03 18:11:35 +00:00
|
|
|
setup_log_handler
|
2016-02-15 07:01:41 +00:00
|
|
|
setup_error_handler
|
2016-05-03 18:11:35 +00:00
|
|
|
setup_static_file_handler
|
2016-02-15 07:01:41 +00:00
|
|
|
end
|
|
|
|
|
2016-05-03 18:11:35 +00:00
|
|
|
def setup_log_handler
|
2016-04-11 14:54:59 +00:00
|
|
|
@logger ||= if @logging
|
2016-07-05 19:14:00 +00:00
|
|
|
Kemal::CommonLogHandler.new
|
2016-04-16 21:04:53 +00:00
|
|
|
else
|
2016-07-05 19:14:00 +00:00
|
|
|
Kemal::NullLogHandler.new
|
2016-04-16 21:04:53 +00:00
|
|
|
end
|
2016-03-06 18:16:51 +00:00
|
|
|
HANDLERS.insert(0, @logger.not_nil!)
|
2016-02-12 12:11:21 +00:00
|
|
|
end
|
2016-02-14 10:43:25 +00:00
|
|
|
|
2016-07-04 17:23:16 +00:00
|
|
|
def extra_options(&@extra_options : OptionParser ->)
|
|
|
|
end
|
|
|
|
|
2016-02-15 07:01:41 +00:00
|
|
|
private def setup_error_handler
|
2016-02-14 10:43:25 +00:00
|
|
|
if @always_rescue
|
2016-04-12 17:00:37 +00:00
|
|
|
@error_handler ||= Kemal::CommonExceptionHandler.new
|
2016-03-03 16:14:10 +00:00
|
|
|
HANDLERS.insert(1, @error_handler.not_nil!)
|
2016-02-14 10:43:25 +00:00
|
|
|
end
|
|
|
|
end
|
2016-02-15 07:01:41 +00:00
|
|
|
|
2016-05-03 18:11:35 +00:00
|
|
|
private def setup_static_file_handler
|
2016-03-03 16:14:10 +00:00
|
|
|
HANDLERS.insert(2, Kemal::StaticFileHandler.new(@public_folder)) if @serve_static
|
2016-02-15 07:01:41 +00:00
|
|
|
end
|
2014-07-30 22:17:53 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.config
|
|
|
|
yield Config::INSTANCE
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.config
|
|
|
|
Config::INSTANCE
|
|
|
|
end
|
|
|
|
end
|