Commit Graph

479 Commits

Author SHA1 Message Date
sdogruyol 012ac8f6b7 Yield error in custom error handlers 2016-11-16 20:27:01 +03:00
sdogruyol d3eea1d9ab Rename to FilterBlock 2016-11-10 23:54:25 +03:00
sdogruyol 8ec9ed8331 Improve docs 2016-11-10 16:38:29 +03:00
sdogruyol ddc92c44e0 Move Kemal::Handler from ext folder 2016-11-10 14:56:05 +03:00
Serdar Dogruyol ec11698ab1 Only / Exclude Paths in Middleware (#245)
Add only / exclude paths in Middlewares
2016-11-09 19:18:39 +04:00
Sam Eaton 7688bd13a5 Close repsonse on halt (#246) 2016-11-07 23:31:36 +04:00
sdogruyol 4267a5eea9 Set default exception Content-Type to text/html. Fixes #202 2016-11-06 11:58:18 +03:00
sdogruyol 87d88318de Rename to Kemal::Exceptions::InvalidPathStartException 2016-11-04 11:49:11 +03:00
sdogruyol e6810c4516 Route declaration must start with / fixes #242 2016-11-04 11:12:59 +03:00
sdogruyol 7dd834ad28 Fix broken websocket routing :/ 2016-11-02 11:19:48 +03:00
sdogruyol d676b559d2 Rename return_with as halt for clear intention 2016-11-01 11:46:13 +03:00
Serdar Dogruyol 922d6de4d1 Middleware ordering (#236)
Improve and correct request middleware

 Request -> Middleware -> Filter -> Route
2016-10-28 11:35:34 +03:00
sdogruyol 1b27f5c011 Add Int64 type to context store 2016-10-24 16:12:29 +03:00
Sam Eaton 375259f34c Replace implementation with more appropriate URI.unescape (#231) 2016-10-19 11:30:58 +03:00
Sam Eaton e43b2a3a01 Decodes url parameters (#229)
Decode url parameters
2016-10-18 16:28:42 +03:00
Sdogruyol 5d71c76554 Don't nest lines with unless. Fixes #225 2016-10-13 22:09:06 +03:00
Serdar Dogruyol 3342007701 Yield UploadFile in parse_multipart (#224) 2016-10-12 16:51:28 +03:00
Sam Eaton 875032f0dc removes Content-Type response header if the file is cached
The content-type currently defaults to text/html, which is inaccurate
because no content is being returned. Google, and many popular CDNs
omit the Content-Type header for 304 response.
2016-10-11 15:51:37 -06:00
sdogruyol 7efe69ac31 Add multipart support <3 2016-10-01 18:18:28 +03:00
Sdogruyol ad9790b9d8 Update session doc 2016-09-30 14:03:29 +03:00
Sdogruyol e2c99bcfb8 Remove array support from session for now 2016-09-30 14:03:29 +03:00
Sdogruyol a8e53fb94e Session also supports arrays 2016-09-30 14:03:29 +03:00
Sdogruyol 8c600cb26e Make session name and expire time configurable 2016-09-30 14:03:29 +03:00
Sdogruyol 6d4bf575cb Make session accept more types 2016-09-30 14:03:29 +03:00
sdogruyol cf2144636d Update CHANGELOG 2016-09-20 20:32:09 -03:00
Aurelien Louis Dit Picard 39cfe14811 Adding port to Kemal#run (#208)
Adding port to Kemal#run
2016-09-20 20:27:35 -03:00
Serdar Dogruyol d41ad90826 Merge pull request #204 from crisward/master
gzip for static files
2016-09-18 13:03:54 +03:00
Cris Ward a8cc4f4177 gzip static files options dir listing and etags
format
2016-09-18 01:46:16 +01:00
maiha b2e81e6bc1 Disable ssl when `-D without_openssl` is given 2016-09-16 23:34:23 +09:00
sdogruyol 4cd30839a5 Add gzip helper to enable/disable HTTP::DeflateHandler 2016-09-15 19:35:34 +03:00
sdogruyol 7c8915bfa4 Don't forget to call_next on NullLogHandler 2016-09-05 17:56:16 +03:00
sdogruyol 64d3271fb2 Make HTTP::Server uninitialized instead of HTTP::Server? 2016-09-05 10:38:00 +03:00
sdogruyol 0a11a1aee9 Don't overried env unless KEMAL_ENV is explicily set 2016-09-02 15:18:26 +03:00
Cris Ward 6280af2e40 added mime types (#195)
* added mime types

Added some mime type for images. Very new to crystal so hopefully this is ok.
Without this they default to octet, which just does a download

* jpg to jpeg
2016-08-19 17:49:29 +03:00
Sdogruyol 849eda06c8 Don't round to seconds/minutes in CommonLogHandler 2016-08-14 14:52:50 +03:00
Sdogruyol ad571db682 Rename view.cr to templates.cr and move it under helpers 2016-08-13 17:43:18 +03:00
Sijawusz Pur Rahnama a6678f6622 Use String#starts_with? instead of String#[]? (#194)
It shows real intention and covers cases when `application/json` is passed in the middle of the string, like `some_garbage_string; application/json`
2016-08-12 22:17:57 +03:00
Sijawusz Pur Rahnama 28859fbdb8 Fix parsing JSON params when "charset" is present in "Content-Type" header (#193)
Resolves case when `Content-Type` headers is passed in form of `application/json; charset=utf-8`
2016-08-11 22:29:29 +03:00
Sdogruyol d4e96c7b44 Add spec for send_file binary 2016-08-08 21:49:47 +03:00
Sijawusz Pur Rahnama 31cc9fbff4 Add send_file helper variation for sending raw data (#188)
Add send_file helper variation for sending raw data

* Use Response#content_type=

* Fix docs
2016-08-08 21:15:43 +03:00
Sijawusz Pur Rahnama 4397a3c7fd Use Response#content_type= 2016-08-08 04:17:58 +02:00
Rayner De Los Santos F 0b92a7fd6c Use http-only cookie for session 2016-08-02 23:41:45 -04:00
sdogruyol e5a9035a61 Add doc to CommonLogHandler 2016-08-02 13:39:01 +03:00
Sdogruyol 1705852f25 Inject STDOUT by default in CommonLogHandler 2016-08-01 23:21:19 +03:00
Sdogruyol 98efbfe341 Improve logging and specs 2016-07-28 21:12:55 +03:00
Sdogruyol 676ed2aa67 Use send_file in built-in image handler 2016-07-19 21:05:49 +03:00
Sdogruyol 5e297d86f8 Add send_file to helpers 2016-07-19 20:58:04 +03:00
Sdogruyol b00bc7a202 Add next handler to init_handler_spec 2016-07-17 20:42:00 +03:00
Sdogruyol d1c788f065 Don't override content_type in Kemal::InitHandler if it's already set 2016-07-17 20:23:45 +03:00
Sdogruyol 646edb24ca Set Content-Type after call_next in Kemal::InitHandler 2016-07-17 19:04:03 +03:00
Sdogruyol 3e3200e23e Oops, forgot call_next(context) on Kemal::InitHandler 2016-07-17 18:15:12 +03:00
Sdogruyol 09d9e708f1 Introduce Kemal::InitHandler to initialize HTTP::Server::Context with defaults 2016-07-17 18:11:26 +03:00
Sdogruyol 725e051723 Document helpers 2016-07-17 17:06:49 +03:00
Sdogruyol f7484d14d3 Use nested module declaration 2016-07-17 14:43:13 +03:00
Sdogruyol 4edebcf8eb Format 2016-07-17 14:31:45 +03:00
Sdogruyol 6ffa4af0e1 Remove redundat http require and move it to kemal.cr 2016-07-17 14:28:21 +03:00
Sdogruyol d11b702ee4 More docs 2016-07-17 14:26:22 +03:00
Sdogruyol 8aab44f7cd Fix typo 2016-07-17 14:13:05 +03:00
Sdogruyol b5ff93c677 Add docs 2016-07-17 14:10:56 +03:00
Sdogruyol 09d82ed74b Add context store 2016-07-14 21:56:01 +03:00
sdogruyol dee1d1c58b Make macro variables local 2016-07-13 16:24:25 +03:00
sdogruyol fb5ac9e0b6 Don't remove #write from common_log_handler 2016-07-13 14:42:41 +03:00
Sdogruyol e6e70fe222 Don't load unless caller and content matches for content_for 2016-07-10 15:01:00 +03:00
Sdogruyol ce2ffed705 Don't yield content if there's not any content_for it 2016-07-10 13:24:38 +03:00
Sdogruyol f3175bdb72 Split helpers.cr into helpers/macros.cr and helpers/helpers.cr 2016-07-10 13:03:09 +03:00
Sdogruyol daac09a859 Add doc for content_for 2016-07-10 13:00:13 +03:00
Sdogruyol 21b194a901 Add content_for and yield_content helpers <3. Thanks @RX14 2016-07-09 19:54:35 +03:00
Sdogruyol 73d6123f3d WIP 2016-07-09 18:57:35 +03:00
Sdogruyol 3ea6a01afc Remove file handler from CommonLogHandler. Log only to STDOUT. Fixes #159 2016-07-05 22:14:00 +03:00
Sdogruyol 9d84d51975 No need to rewind STDOUT and File handler in CommonLogHandler 2016-07-05 20:15:36 +03:00
Sdogruyol ae25d0a774 Optimize CommonLogHandler to directly use the handler instead of string interpolation 2016-07-05 20:11:03 +03:00
Sdogruyol 20a174b66e Add extra_options from CLI 2016-07-04 20:23:16 +03:00
Sdogruyol 2c0dc7fa63 Read env from KEMAL_ENV instead of -e. Fixes #168 2016-07-03 23:49:16 +03:00
Sdogruyol 19581d6e3e Improve common_exception_handler to handler custom 500 errors. Fixes #175. 2016-07-03 11:13:29 +02:00
Mike Perham 22d6c1773e Remove HTTP prefix, this is a Rack impl convention, not a standard. 2016-06-29 14:52:47 -07:00
Mike Perham 8f5736a057 Need to initialize the session token or forms won't render 2016-06-28 16:46:45 -07:00
Mike Perham e407d0195c Implement CSRF protection
This adds a middleware which, when activated, will deny any form submission which does not include a valid `authenticity_token` parameter or `http-x-csrf-token` header with the request.

The header and parameter names are identical to the ones supported by Ruby's rack-protection gem for interoperability purposes.
2016-06-28 15:50:43 -07:00
Mike Perham 46b4dc6524 Add Session#delete, more docs 2016-06-27 16:24:03 -07:00
Mike Perham 94db0c8cb8 Implement basic in-memory session store
Sessions are stored in a non-persistent Hash.  Only String values are allowed.  A reaper fiber regularly removes any sessions which expire due to inactivity.
2016-06-27 14:37:40 -07:00
Sdogruyol 0c46bd65da Add X-Powered-By header 2016-06-19 03:22:55 +03:00
Matthew Gerrior fbbb43dcab Add "headers" helper to make it easier to add headers to response. 2016-06-16 10:33:38 -04:00
sdogruyol f92d812c32 Format 2016-06-15 08:58:14 +03:00
Omar Roth ac4a5afc05 Fix ssl and specs for 0.18 2016-06-14 16:18:00 -05:00
Matthew Gerrior d1f9c4394b Opt for built-in HTTP::Params class instead. 2016-06-14 07:32:13 -04:00
Matthew Gerrior a5e4bc21f3 Allow multiple values for a single parameter key. 2016-06-11 16:52:07 -04:00
sdogruyol c9b206d1d6 Remove unnecessary type annotations 2016-05-22 23:34:37 +03:00
sdogruyol b3ebf40201 Cache request url_params 2016-05-21 15:03:34 +03:00
Sdogruyol 67abb5fff3 Allow 404 error handler to be customizable 2016-05-15 14:58:09 +03:00
Sdogruyol 92d7273759 Inherit response.content type from filter if it's given. Fixes #146. 2016-05-14 11:07:19 +03:00
Ben Jolitz b73802df0e resolve merge conflict by trusting sdogruyol/master RE property listings 2016-05-07 17:22:08 -07:00
Ben Jolitz 108e732274 rename on_options -> extra_options 2016-05-07 17:18:42 -07:00
Sdogruyol 53df88b9fb Update filters to dont care about block return type 2016-05-06 21:03:24 +03:00
sdogruyol 3b402586f8 Make error handlers also work for filters 2016-05-06 14:08:34 +03:00
sdogruyol 09439dd437 Remove unnecessary views 2016-05-05 23:54:25 +03:00
sdogruyol 12ec74e923 Add instance types for Crystal 0.16.0 2016-05-05 23:35:53 +03:00
sdogruyol 76b5add665 Don't write to context in case of an exception 2016-05-05 23:22:58 +03:00
sdogruyol 6611b976a9 Improve exception handler 2016-05-05 23:12:17 +03:00
sdogruyol e6d9311895 Start implementing error block 2016-05-05 22:35:36 +03:00
sdogruyol 35239dfaa0 Improve config semantics 2016-05-03 21:11:35 +03:00
Sdogruyol e077d17943 Remove colorize from common exception handler 2016-04-18 22:17:55 +03:00
Sdogruyol 456724f8e4 Remove colorize from common log handler 2016-04-18 22:16:41 +03:00
Sdogruyol 18efc4601f Add more documentation 2016-04-18 21:40:48 +03:00
Sdogruyol a8ecbde222 Merge branch 'instance-vars' 2016-04-17 00:04:53 +03:00
sdogruyol 2b9152ff79 Update instance types 2016-04-13 11:00:02 +03:00
sdogruyol 40ab34c63d All specs passing 2016-04-12 20:00:37 +03:00
sdogruyol b4bc818490 Update handler 2016-04-12 17:35:29 +03:00
sdogruyol c47c9488fe Return string from context 2016-04-12 17:15:43 +03:00
sdogruyol 05e44e68c6 Updating to instance types 2016-04-12 14:41:09 +03:00
Jerome Gravel-Niquet e407f52897 Only set @logger when not previously set
This came in contradiction with the docs.
2016-04-11 10:54:59 -04:00
Sdogruyol 65d0af5b5f Update config to use uninitialized server 2016-04-09 17:33:17 +03:00
Sdogruyol b32099e13b Move server from local scope to config 2016-04-09 17:20:39 +03:00
Sdogruyol 0eb7638b1b Remove redundant at_exit hook 2016-04-09 17:17:11 +03:00
Ben Jolitz 1f809c68c8 Support additional options as part of the Config
This commit adds the ability to add a closure suitable for adding
additional options. It is expected to allow someone to set global,
module or class level variables so they can pass changes/options
suitable for making decisions.
2016-03-30 13:33:51 -07:00
Fatih Kadir Akın 8110788a41 Added return_with macro to break response in the middle of the block. 2016-03-30 00:48:58 +03:00
Serdar Dogruyol 7b1bc43a41 Update dsl.cr 2016-03-23 14:45:18 +02:00
sdogruyol be418feaf3 Fix WebSocketHandler 2016-03-23 13:21:19 +02:00
Filip Defar a8ff776b49 Don't convert host_binding to slice when instantiating server 2016-03-22 21:20:21 +01:00
Sdogruyol fd904cd98d 0.11.0 2016-03-19 15:15:44 +02:00
Sdogruyol 664673f125 Set content-type to text/html on errors.Fixes #130 2016-03-18 20:03:04 +02:00
Fatih Kadir Akın 8402f06bc3 Show backtrace in 500 statuses using `inspect_with_backtrace` 2016-03-08 13:43:46 +02:00
Serdar Dogruyol a194bebe31 Merge pull request #123 from f/master
Upgrade ParamParser to make it more convinient.
2016-03-07 13:41:24 +02:00
Fatih Kadir Akın 043d1c8aa2 Add memoization to lazy param parsing 2016-03-07 11:21:37 +02:00
Fatih Kadir Akın 4ee4b66135 Make the param getters lazy to improve performance 2016-03-06 22:29:23 +02:00
Fatih Kadir Akın 42deb95688 Remove merged params to improve performance 2016-03-06 21:46:35 +02:00
Fatih Kadir Akın 53d12534b7 Remove ParamContainer abstraction to make it faster. 2016-03-06 21:43:13 +02:00
Sdogruyol e3c3154006 Make sure to instantiate null log handler 2016-03-06 20:16:51 +02:00
Fatih Kadir Akın e53ba1d9da Decouple ParamContainer which makes the code cleaner, and fix kemal.cr
url -- by @sdogruyol
2016-03-06 14:08:59 +02:00
Fatih Kadir Akın 8267ffe2c5 Upgrade ParamParser to make it more convinient.
It now decouples `env.params` to `env.params.query`, `env.params.body`,
`env.params.json` and `env.params.url` and you still can access merged
values using `env.params.all`
2016-03-06 13:22:24 +02:00
Joris Moriau 04ccb973a9 set positions for errors and logger middleware, added 2 views 2016-03-03 21:23:04 +01:00
Armin Pašalić 6759fb2373 Add options to the DSL
As in https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.2 and because it's a nice way to document API
2016-02-25 17:38:57 +01:00
Joris Moriau 8f6b00ba55 decoupled-urlparams-from-routehandler 2016-02-19 12:45:25 +01:00
Joris Moriau e6d1da6dd2 added small feature 2016-02-17 20:56:19 +01:00
sdogruyol 5a58ee3cbb Format code 2016-02-17 11:52:13 +02:00
Joris Moriau c5201f01ad added verb for filters and minor improvements 2016-02-17 10:34:01 +01:00
Jerome Gravel-Niquet 69b836a98a use new Kilt 0.3 syntax, add mention in readme for clarity 2016-02-15 12:09:33 -05:00
Joris Moriau ed769ad700 added configure serve_static 2016-02-15 12:59:26 +01:00
Jerome Gravel-Niquet 9404fa5c80 Abstract template engines with Kilt 2016-02-14 13:37:55 -05:00
Sdogruyol 8c87a3fa67 Replace global macros with methods. Thanks @asterite 2016-02-14 18:52:49 +02:00
Sdogruyol 092f5a2e49 Improve kemal.cr 2016-02-14 15:15:52 +02:00
Joris Moriau f5b5260ab9 fixed small redundancy. 2016-02-14 13:57:51 +01:00
Joris Moriau f7975d917d decoupled errors from route-handler 2016-02-14 12:52:32 +01:00
Sdogruyol 88aa9cd497 Remove call_next from RouteHandler 2016-02-14 11:02:16 +02:00
sdogruyol 8f5bc755ae Add logger macro to easily setup custom log_handler 2016-02-12 16:09:15 +02:00
sdogruyol 3c75d727ba Complete decoupling logger 2016-02-12 14:11:34 +02:00
Joris Moriau 3aa22e11c0 - add_filters no longer needs to be called explicitly it will be lazily called if needed.
- the Filter middleware no longer needs to be the first in the handlers array.
- before and after methods will raise an exception if a filter for the requested path is already defined.
2016-02-12 12:03:38 +01:00
sdogruyol 454894820d Fix config 2016-02-12 10:22:52 +02:00
Sdogruyol 850af8819e Start decoupling logger 2016-02-11 23:26:47 +02:00
Sdogruyol ffc3d6d224 Don't require yaml 2016-02-10 22:02:10 +02:00
Sdogruyol 9de66e2a60 Update CLI wording 2016-02-10 21:58:32 +02:00
TSUYUSATO Kitsune 0f86e59db6 Cache Context#params result 2016-02-10 02:11:18 +09:00
TSUYUSATO Kitsune 55361b3c9a Use 302 to redirect instead of 301
`301` means "Moved Permanently", so browser caches this redirect, it is used when changing server URL.
`302` means "Found", it is used generally (e.g. redirect top page after
login).

Each of `301`, `302`, `303` and `307` means redict, but they are
different. We could choice those status in case.
2016-02-10 00:28:07 +09:00
Sdogruyol 3f3f0d442e Fix Filter namespace 2016-02-07 16:48:49 +02:00
Werner ab711c22fd Basic filter implementation, similar to Sinatra. 2016-02-07 09:49:38 -04:30
Sdogruyol 467a1b4581 Rename handlers 2016-02-03 22:08:54 +02:00
Aşkın Gedik 8390b96df3 remove unused methods 2016-02-02 17:20:44 +02:00
Serdar Dogruyol 0a1abe9a42 Merge pull request #69 from f/master
Radix-tree already has url param parsing with state-machine implementation which is faster than regex parsing. We don't need regex parsing anymore.
2016-01-26 10:23:39 +02:00
Fatih Kadir Akın ce1f595c5d Remove param parsing with regex since Radix has state-machine implementation which is a way faster 2016-01-25 22:52:41 +02:00
Serdar Dogruyol 23b09ff645 Merge pull request #68 from f/master
Fix for #67, Radix tree needs path style string
2016-01-25 22:28:25 +02:00
Fatih Kadir Akın afdb6fb793 Fix for #67, Radix tree needs path style string 2016-01-25 22:22:56 +02:00
Sdogruyol 3b4cdd5323 Rename HTTP::WebSocketHandler::WebSocket to HTTP::WebSocket 2016-01-25 20:56:27 +02:00
Sdogruyol e223940e5e Replace beryl with f/radix 2016-01-24 20:51:04 +02:00
Fatih Kadir Akın c14fb3de96 Fix view rendering for Crystal 0.11.0 2016-01-24 19:13:10 +02:00
Sdogruyol 94a73e9ade Update built-in exception route handler 2016-01-24 18:25:21 +02:00
Sdogruyol 02af920a0f Make default content-type text/html 2016-01-24 17:52:24 +02:00
Sdogruyol fdf38b23c8 Update kemal.cr 2016-01-24 13:31:07 +02:00
Sdogruyol 17f944ef9d Move redirect macro to context def 2016-01-24 12:52:41 +02:00
Sdogruyol 4dd027eb96 Macros spec passing 2016-01-24 12:27:26 +02:00
Sdogruyol d1f95c0f39 All specs passing except macros 2016-01-24 12:22:25 +02:00
Fatih Kadir Akın 7d0d5add84 Implement radix algorithm for routing (thanks to beryl) 2016-01-22 23:06:13 +02:00
Luis Lavena df359d66c9 Build Route Regex once to reduce allocations
Right now every `match?` performed against the routes defined result
in a new Regex compiled for the exact same `@path`.

Since `@path` of the Route does not change on every request, we
pre-build it to avoid repeated allocations.

When testing this in release mode (against 0.10.2 [d1e3f0b]):

Before: 32408.48 req/s
After:  34862.07 req/s
2016-01-18 13:48:41 -03:00
Sdogruyol 788c7241d4 Handle cases when logger can be nil 2016-01-18 17:25:52 +02:00
Sdogruyol 0498801b0d Initialize logger in config 2016-01-17 14:22:47 +02:00
Sdogruyol 51092fbb91 Move logger to config 2016-01-17 14:18:18 +02:00
Sdogruyol 2af3648682 Make logger configurable 2016-01-17 13:08:12 +02:00
Sdogruyol 5fb5a4c6ae Small refactor 2016-01-16 12:56:01 +02:00
sdogruyol 7ffa6700de Update CLI to handle missing ssl_key and ssl_cert 2016-01-15 14:50:11 +02:00
Fatih Kadir Akın 37d40f4fbe Implement SSL handling, move option parser to another file to maintain
easier
2016-01-13 23:31:19 +02:00
sdogruyol b37dd29d4b Update router to handle method matching 2016-01-13 15:22:50 +02:00
sdogruyol 4c423e967f Refactor parse_url_params 2016-01-13 10:07:37 +02:00
Fatih Kadir Akın 3e8b2ae51c Implement parse_url_params 2016-01-13 00:06:19 +02:00
Sdogruyol 0b4a36953f Started reimplementing router 2016-01-12 21:37:12 +02:00
Sdogruyol aabfe4ff99 Add log macro 2016-01-08 18:44:37 +02:00
Serdar Dogruyol 2503bc4e3d Merge pull request #45 from aladagemre/master
Add 403 view
2016-01-05 19:24:42 +02:00
Ahmet Emre Aladağ 47f505ff76 Update view.cr 2016-01-05 17:35:07 +02:00
sdogruyol eb4c82043a Add add_handler macro 2016-01-05 14:20:40 +02:00
Sdogruyol 6a4ed2d9eb Add exception logging. Closes #41 2016-01-04 21:54:58 +02:00
Ahmet Emre Aladağ 87bbb2069f Realm added for Basic Authentication 2016-01-04 20:14:05 +02:00
sdogruyol 7ad319c70d v0.6.0 2016-01-03 22:13:10 +02:00
sdogruyol c21567fe17 Add macro specs 2016-01-03 13:22:43 +02:00
sdogruyol 211685ee74 Fix basic_auth 2015-12-31 14:03:11 +02:00
Serdar Dogruyol aaa2ee1e31 Add public_folder macro 2015-12-30 20:16:04 +02:00
Sdogruyol 24e2647ed7 Require middleware in bootstrap 2015-12-27 11:59:07 +02:00
Sdogruyol 743fd3682d Add HTTPBasicAuth middleware 2015-12-27 11:53:54 +02:00
Sdogruyol 8b6700695d Update delegate macro in context 2015-12-27 11:17:22 +02:00
Alfonso Uceda Pompa 8c0ea21d44 return raw json when we parse the request body 2015-12-24 17:09:33 +01:00
Alfonso Uceda Pompa e39770b433 Make compatyble with crystal 0.10.0 2015-12-24 16:25:00 +01:00
Sdogruyol fbc21b197a Rename to Kemal::WebSocketHandler 2015-12-22 20:51:27 +02:00
Sdogruyol 44af664748 Remove experimental fork mode 2015-12-19 10:00:29 +02:00
Sdogruyol 20ef2b2927 Add more documentation 2015-12-18 22:45:28 +02:00
Serdar Dogruyol 88c19f0051 Remove unnecessary handler 2015-12-16 17:06:06 +02:00
Sdogruyol 06ced7790b Adding websocket support :) 2015-12-15 23:11:21 +02:00
Sdogruyol 66c8b6d857 Move macros from view to macros 2015-12-14 20:05:46 +02:00
Sdogruyol 5c97942707 Add more documentation 2015-12-13 10:25:04 +02:00
Sdogruyol 8522fd2f56 Fix binding 2015-12-12 21:35:17 +02:00
Sdogruyol 58f9d8c590 Add read config from yml 2015-12-12 20:27:46 +02:00
Sdogruyol 85a383b328 Fix static file handler 2015-12-10 21:20:32 +02:00
Sdogruyol e4da65f1f2 Refactor static file handler 2015-12-10 21:15:28 +02:00
Sdogruyol 21a3c6ad3c Add static file handler 2015-12-10 20:40:39 +02:00
Serdar Dogruyol 12c6af7d79 Merge pull request #32 from ilatif/master
Removed env from redirect and changed redirect from method to macro.
2015-12-09 22:27:04 +02:00
Imran Latif 4d1e31cb41 Removed env from redirect and changed redirect from method to macro.
Removed `env.redirect` in-favor of `redirect` in-order to make Kemal's
API look more like Sinatra.

Thanks @sdogruyol and @f for introducing me to macros :-).

Binding HTTP::Server to 0.0.0.0
2015-12-10 01:24:49 +05:00
Serdar Dogruyol ef3c16b2c0 Merge pull request #31 from f/master
Add layout support for render macro.
2015-12-09 21:57:01 +02:00
Fatih Kadir Akın 9ade49ae20 Add layout support for render macro. It should be improved in the future. 2015-12-09 17:54:49 +02:00
Serdar Dogruyol c05db1f643 Remove unnecessary log on exit 2015-12-09 17:36:13 +02:00
Sdogruyol a67a8508cf Add worker support (experimental) 2015-12-08 22:15:13 +02:00
Serdar Dogruyol a2a082b58f Merge pull request #29 from askn/master
fix default log color
2015-12-07 10:27:16 +02:00
Sdogruyol bee7ce2452 Bind host to 0.0.0.0 2015-12-07 09:17:00 +02:00
Aşkın Gedik fd80fd2f1b fix default log color 2015-12-07 00:21:50 +02:00
Serdar Dogruyol 2ffb4dccdf Merge pull request #27 from f/master
Add render macro to kemal core.
2015-12-06 20:45:53 +02:00
Sdogruyol aa0d97aa42 Update .travis.yml 2015-12-06 17:56:04 +02:00
Fatih Kadir Akın 945fa59a6c Add render macro to kemal core to have dynamic rendering mechanism. It actually binds built-in ecr parser to the Kemal as a macro. 2015-12-06 16:55:35 +02:00
Imran Latif cd69a866d5 Adding method for doing browser redirection from inside any route.
Made some small changes
2015-12-05 02:23:18 +05:00
Imran Latif d25a611fbd Implemented HTTP `HEAD` method.
First I tried implementing this solution in such a way that it
explicitly clears body and set `Content-Length` header to body's size.
But for some reason, if I call the URL from cURL then `Content-Length`
header was blank which defeats the very purpose of `HEAD` requests.

I then later anticipated that since `HEAD` would be by-default
implemented by `HTTP::Server` module, there is no need to explicit
clears body and setting `Content-Length` but the way we have written
our previous specs were returning body as well. We could have used some
TestServer kind of thing but if we go to that route we explicitly need
to test non-existent route which I thought would create some
inconsistency among specs.

Crystal has clearly written specs for HEAD requests to make sure body
is not read for them. See
https://github.com/manastech/crystal/commit/acd0b6afb5af438a30529c36b11b
e7954336f23f. I decided to write simple specs which are easy to
maintain in long-run.

We are adding identical HEAD route for every GET route which will make
HEAD requests available for all defined GET requests.

https://github.com/sdogruyol/kemal/issues/19

Added comment for code line which is adding HEAD routes for defined GET routes.
2015-12-04 19:35:14 +05:00
Imran Latif c42f1f88e9 Added support for magic param `_method` just like Rails, Sinatra.
Following are the changes made in this commit:

- Added support for magic param `_method` just like Rails, Sinatra
etc.. Browsers which don't support `PUT`, `PATCH` and `DELETE` methods
can simulate them by sending `method` param in request body.

- The default Content-Type to parse request body submitted via forms
etc. is `application/x-www-form-urlencoded`. But if we send Ajax
request in Chrome ($.post) then by-default Content-Type is set to
`application/x-www-form-urlencoded; charset utf-8` which was not
getting matched. I changed the code from `==` to match against a
regular expression using `=~`.

- Print name and color of overridden HTTP method via Logger instead of
printing name and color or request's incoming HTTP method.

Making necessary changes as pointed by @sdogruyol

- Changed method name from`is_override_method_valid?` to
`override_method_valid?`.

- Refactored `if` condition in `override_method_valid?`.
2015-12-03 01:34:16 +05:00
Sdogruyol 171459eee9 Add 500 exception spec 2015-12-01 21:52:44 +02:00
Sdogruyol 7f198cab3b Remove unnecessary check 2015-12-01 21:47:49 +02:00
Sdogruyol 17fe691710 Add 500 template 2015-11-29 17:32:31 +02:00
Sdogruyol e1530f8fd5 Add built-in exception route 2015-11-28 12:39:58 +02:00
Sdogruyol 58013ba005 Add 404 2015-11-27 22:45:13 +02:00
Aşkın Gedik e284ba8196 add colorize for logger 2015-11-22 20:06:26 +02:00
Sdogruyol 9cb3cafa62 Add flush on newline Fixes #15 2015-11-21 22:53:06 +02:00
Sdogruyol 556247c4ad Revert back to File.write 2015-11-21 00:43:28 +02:00
Sdogruyol 485fed11af Added config env to startup message 2015-11-20 23:12:12 +02:00
Sdogruyol f66e9cd834 More logger specs 2015-11-20 23:07:10 +02:00
Sdogruyol 0e23e8d9a3 Be sure to close handlers 2015-11-19 20:54:58 +02:00
Sdogruyol 28d4d5167b Updated logger to be more robust 2015-11-18 22:45:49 +02:00
Sdogruyol bde69e1cdb Changed default mode to development 2015-11-17 21:43:05 +02:00
Sdogruyol 79ef2f30f7 Added environment 2015-11-16 23:55:02 +02:00
Sdogruyol 0e617dcfb6 Removed redundant code for more performant processing 2015-11-15 17:00:51 +02:00
Sdogruyol fb1d3c3a85 Added handlers to config 2015-11-12 22:48:22 +02:00
Aşkın Gedik 51708ce8e7 parse request body for array 2015-11-10 13:30:16 +02:00
Micah Geisel dea9b2f663 application/json GETs can have no request body. 2015-11-09 16:35:28 -08:00
Sdogruyol dc1e6ed4c2 Changed server initialize message 2015-11-08 17:43:53 +02:00
Sdogruyol 3687897005 Added JSON body parsing 2015-11-06 20:24:38 +02:00
Oleksii Fedorov f658fbe8af Parse request body params only if content type is application/x-www-form-urlencoded 2015-11-05 11:38:06 +01:00
Sdogruyol c49191e650 Fixed match bug 2015-10-31 09:28:25 +02:00
Sdogruyol a7cc498dca Refactored context 2015-10-30 22:34:44 +02:00
Sdogruyol 4ce1bc908f Added response and headers 2015-10-30 22:01:18 +02:00
Serdar Dogruyol ffdaecace4 Added headers to context 2015-10-30 17:06:25 +02:00
Sdogruyol 5892d900ff Added documentation for context, param_parser and route 2015-10-29 17:16:29 +02:00
Sdogruyol 2cbe54b624 Fixed samples url 2015-10-29 11:22:44 +02:00