Commit Graph

213 Commits

Author SHA1 Message Date
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 09d9e708f1 Introduce Kemal::InitHandler to initialize HTTP::Server::Context with defaults 2016-07-17 18:11:26 +03:00
Sdogruyol 4edebcf8eb Format 2016-07-17 14:31:45 +03:00
Sdogruyol 09d82ed74b Add context store 2016-07-14 21:56:01 +03:00
Sdogruyol 24e0824a9b Better view_specs for layout variables 2016-07-12 00:09:01 +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 20a174b66e Add extra_options from CLI 2016-07-04 20:23: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 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
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 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 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 40ab34c63d All specs passing 2016-04-12 20:00:37 +03:00
sdogruyol 05e44e68c6 Updating to instance types 2016-04-12 14:41:09 +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
Sdogruyol 87df71a89a Refactor specs 2016-03-21 18:29:48 +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 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
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 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
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 f7975d917d decoupled errors from route-handler 2016-02-14 12:52:32 +01: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
Sdogruyol 850af8819e Start decoupling logger 2016-02-11 23:26:47 +02: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
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
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
Sdogruyol 2af3648682 Make logger configurable 2016-01-17 13:08:12 +02:00
sdogruyol efcf591581 Remove some unnecessary specs 2016-01-13 10:09:12 +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
sdogruyol eb4c82043a Add add_handler macro 2016-01-05 14:20:40 +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
Serdar Dogruyol aaa2ee1e31 Add public_folder macro 2015-12-30 20:16:04 +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
Sdogruyol fbc21b197a Rename to Kemal::WebSocketHandler 2015-12-22 20:51:27 +02:00
Fatih Kadir Akın 2d4edc83dc Add test to make custom renderer macros for projects.
Add documentation
2015-12-18 10:44:47 +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
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
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 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 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
Sdogruyol 9a5934811d Set to development before_each spec 2015-11-25 23:35:04 +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 f66e9cd834 More logger specs 2015-11-20 23:07:10 +02:00
Sdogruyol 28d4d5167b Updated logger to be more robust 2015-11-18 22:45:49 +02:00
Sdogruyol 79ef2f30f7 Added environment 2015-11-16 23:55:02 +02:00
Sdogruyol dcba72c891 Added config spec 2015-11-14 23:45:20 +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 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 da23d397c6 Formatted 2015-10-31 08:53:49 +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 a0c909621c Renamed all occurrences of ctx to env 2015-10-29 11:49:58 +02:00
Sdogruyol 1c53321026 Changed default content-type to text/html 2015-10-28 21:55:17 +02:00
Sdogruyol 5376eb8bb2 Added context specs 2015-10-28 20:52:34 +02:00
Sdogruyol ad6baba12b Added param_parser specs 2015-10-28 20:38:24 +02:00
Sdogruyol 3cc50e0a7e Added param parser 2015-10-28 20:30:27 +02:00
Sdogruyol a8ad95aa67 Removing redundant code 2015-10-28 18:09:45 +02:00
Sdogruyol be58e009af Created logger 2015-10-27 21:01:36 +02:00
Sdogruyol 4a6fb6cf66 Now supports multiple query strings 2015-10-26 20:49:28 +02:00
Sdogruyol efe75196f7 Added request body parsing 2015-10-26 20:25:10 +02:00
Sdogruyol 459f602645 Renamed spec 2015-10-24 19:17:24 +03:00
Sdogruyol 5ca84fea4c Renamed all occurrences to Kemal 2015-10-23 21:33:26 +03:00
Juan Wajnerman 77356f7f43 Route parameters have more precedence than query string arguments 2015-05-29 18:24:31 -03:00
Juan Wajnerman 8b1447b68d Accepts requests with query string 2015-05-29 18:21:15 -03:00
Zamith 8cf04b58ca
Move static file handler to be called after the instance handler
This way only routes that are not caught by the instance handler will go
through to the static file handler.
2015-01-31 14:39:50 +00:00
Ary Borenszweig 889debfd59 Receive Frank::Context and allow setting content-type 2014-07-30 20:50:14 -03:00
Ary Borenszweig fc4f648c1a Handle POST request, and some refactors 2014-07-30 19:58:48 -03:00
Juan Wajnerman 2eaf44195e Initial commit 2014-06-11 20:41:02 -03:00