0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 04:30:25 +00:00
Commit graph

636 commits

Author SHA1 Message Date
Loïc Hoguin
a013becc66 Add protection against slowloris vulnerability
This changes the behavior of the `timeout` protocol option to
mean "Time in which the full request line and headers must be
received". The default of 5s should be fine for all normal uses.

This change has no noticeable impact on performance and is thus
enabled by default for everyone. It can be disabled by setting
`timeout` to `infinity` although that is definitely not encouraged.

Inspired by the contribution from @naryl on github.
2013-01-06 19:49:01 +01:00
Loïc Hoguin
638d0345d1 Merge pull request #359 from unix1/master
Fix examples to follow new env tuple standard
2013-01-06 04:15:03 -08:00
Unix1
33461ecdbd Fix examples to follow new env tuple standard
This brings examples in line with the recent Middleware change.
2013-01-05 19:19:14 -08:00
Loïc Hoguin
faeb37ed80 Add cowboy_req:set_resp_body_fun/2
This allows streaming a body without knowing the length in advance.
Also allows {stream, StreamFun} response body in the REST code.
2013-01-05 23:35:30 +01:00
Loïc Hoguin
6edea1c123 Fix a small warning in eunit_SUITE 2013-01-05 23:35:13 +01:00
Loïc Hoguin
c930327fbf Remove cowboy_req:transport/1
It was added to help with response body streaming functions.
But it was a clumsy solution that we discarded in favor of
passing socket and transport to said function. It was also
very odd compared to the rest of the cowboy_req interface.

If you used this function before, worry not, here's its
proper equivalent.

[Socket, Transport] = cowboy_req:get([socket, transport], Req)
2013-01-05 22:04:52 +01:00
Loïc Hoguin
58e89e2189 Change the response body streaming fun interface
Before we were required to get the socket and transport ourselves,
now they're passed to the function.
2013-01-05 20:19:43 +01:00
Loïc Hoguin
d8be610d4c Stop using rebar in the Makefile
First and foremost: yes, you can still use Cowboy as a rebar dependency.
This commit only removes the use of rebar when *developing* Cowboy, not
when *using* Cowboy.

Over the past two years I went from very happy with rebar to unsatisfied
and most recently found it counter productive in many ways, from having
insane default configuration to various unefficient operations. The earlier
reversal from 'rebar ct' to 'ct_run' made my workflow much more natural,
as I always needed to look at 'logs/raw.log' to find out what was wrong,
anyway. Why not let 'ct_run' output it directly instead? Removing rebar
made my life easier.

If you wonder why I don't patch rebar, there's two reasons. First is that
the direction taken by rebar isn't compatible with my views, and this
would be a huge fight to steer it in another direction. I got other,
more important fights to make. Second is that I'd rather patch OTP so
that everyone benefits from it, not just users of rebar.

Anyway this isn't my personal blog so I will stop babbling here. There's
a few important things to note relative to this commit:

 *  You don't need rebar to work on Cowboy anymore
 *  The eunit tests are now ran through common_test

Ping me if it doesn't work out for you.
2013-01-05 17:25:04 +01:00
Loïc Hoguin
4395c1b59d Use erl -eval instead of rebar for generating edoc documentation 2013-01-04 19:32:38 +01:00
Loïc Hoguin
7d2a481401 Use ct_run instead of rebar ct for running ct tests
Small tweak to the autobahn test file, we look for the python2
executable now. It'll make my life easier.
2013-01-04 17:56:49 +01:00
Loïc Hoguin
54063de2ff Hello 2013 2013-01-04 15:10:03 +01:00
Loïc Hoguin
1b3f510b7e Add middleware support
Middlewares allow customizing the request processing.

All existing Cowboy project are incompatible with this commit.
You need to change `{dispatch, Dispatch}` in the protocol options
to `{env, [{dispatch, Dispatch}]}` to fix your code.
2013-01-03 22:47:51 +01:00
Loïc Hoguin
73d86057f2 Fix small error in doc comment 2013-01-03 22:31:55 +01:00
Loïc Hoguin
398d3503c4 Salvage the README and move parts into the guide 2013-01-03 16:01:49 +01:00
Loïc Hoguin
06e74355c0 Add a skeleton of the guide to ease user contributions
Has some stuff that aren't in master yet, and lacks a lot more
that is already in master.
2013-01-01 18:27:41 +01:00
Loïc Hoguin
2690d1254c Remove cowboy_req:body/2
This function was badly thought out and would cause more harm
than good if used at all. Recommendation will be for people
who need to limit body length to check it beforehand or when
not possible to use the stream_body API.
2012-12-26 18:51:41 +01:00
Loïc Hoguin
f401a84be6 Update Ranch to 0.6.0 2012-12-26 01:57:45 +01:00
Loïc Hoguin
a3049f7100 Revert "Use lists:keyreplace/4 instead of lists:keydelete/3 + cons"
This reverts commit cc65a723d7.
2012-12-23 14:43:44 +01:00
Tom Burdick
13c28b8f58 use the original request when available for error_terminate
this change makes sure that once a request has been created
the error_terminate/3 function uses the original request instead
of making a new empty one with undefined values making the request
attributes easier to look at in many error cases

Conflicts:
	src/cowboy_protocol.erl
2012-12-22 21:20:39 +01:00
Loïc Hoguin
f7929d323c Merge branch 'undefined_url' of git://github.com/treetopllc/cowboy 2012-12-22 21:14:20 +01:00
Loïc Hoguin
31c7bf7234 Merge branch 'fix-websocket-timeout' of git://github.com/jeremyong/cowboy 2012-12-22 18:32:35 +01:00
Jeremy Ong
5f122d9fa6 Cancel timer only on websocket_data receives or sends
This commit prevents erlang messages from keeping a websocket connection
alive. Previously, the timer was canceled upon any activity. Now, the
timeout is only canceled when actual data is sent from the client. The
handler_loop_timeout/1 function is called from websocket_data/4 instead
of handler_before_loop/4. It is also called after every successful reply
in handler_call/4.
2012-12-22 18:32:15 +01:00
Loïc Hoguin
7ff2a62585 Make sure an incorrect port returns a 400 error 2012-12-22 16:45:04 +01:00
Loïc Hoguin
cc65a723d7 Use lists:keyreplace/4 instead of lists:keydelete/3 + cons 2012-12-22 16:37:11 +01:00
Loïc Hoguin
a07d063fd8 Add cookie example 2012-12-20 14:40:22 +01:00
Loïc Hoguin
659ca05c54 We accept iodata() when setting cookies; fix that 2012-12-20 14:36:40 +01:00
Loïc Hoguin
8858ca240f Fix parsing of the Cookie header
This should be equivalent to what we do in Set-Cookie. Real-world
testing is needed to confirm it works as intended.
2012-12-20 14:19:39 +01:00
Loïc Hoguin
f48902cee7 Improve errors when the path provided is incorrect 2012-12-18 15:59:34 +01:00
Loïc Hoguin
06ab46c868 Merge branch 'master' of git://github.com/Menirad/cowboy 2012-12-17 15:49:54 +01:00
Loïc Hoguin
859d915d9c Add #ninenines IRC channel to the README + support options 2012-12-17 12:41:04 +01:00
Loïc Hoguin
f077c711a8 Fix cowboy_http:cookie_to_iodata/3
No more trying to quote, this is still completely broken everywhere.
2012-12-17 12:32:17 +01:00
Thomas Nordström
143ed80486 Fix multipart parser when the boundary is not fully read yet 2012-12-14 15:43:22 +01:00
Loïc Hoguin
1851032482 Improve Markdown for the examples README 2012-12-14 10:50:26 +01:00
Loïc Hoguin
d761a34380 Merge branch 'adt-consistent-errors' of git://github.com/Vagabond/cowboy 2012-12-13 17:08:06 +01:00
Loïc Hoguin
6074ce4a39 Add missing quotes to quoting for cookie values 2012-12-13 16:57:58 +01:00
Andrew Thompson
d916d739d4 Make the arguments to error_logger more consistent
The purpose of this patch is to make the arguments cowboy passes to
error_logger more consistent. With this patch there's only 3 variations
on the error_logger argument list; a 5 element list, an 8 element list
and a 10 element list. In all cases, the first 3 arguments are the
Module, Function and Arity of the function being called and the
second-to-last argument is always the Request. Additionally, for lists
longer than 5 elements, the last argument is always the stack-trace.

The added consistency of the argument ordering makes it much easier to
write code in lager's error_logger handler to catch these messages and
write a pretty one-liner (while writing the full message to the
crash.log).
2012-12-13 03:38:38 -05:00
Loïc Hoguin
ea7af4b724 Merge pull request #335 from derdesign/master
Fix broken 'make docs'
2012-12-10 15:32:48 -08:00
derdesign
0ed805439a Fix broken 'make docs' 2012-12-10 19:30:30 -04:00
Loïc Hoguin
08a4975c34 Fix charset not working properly for REST 2012-12-11 00:05:42 +01:00
Loïc Hoguin
6d4e15705f Add {close, StatusCode, Payload} and fix {close, Payload} 2012-12-08 19:11:56 +01:00
Loïc Hoguin
d2ccd2e090 Merge branch 'websocket_terminate_not_called' of git://github.com/dergraf/cowboy 2012-12-07 16:35:40 +01:00
Loïc Hoguin
181d0edc52 Small Markdown fixes to better follow the specs 2012-12-07 16:19:08 +01:00
Loïc Hoguin
fb07493279 Update CHANGELOG 2012-12-07 16:09:07 +01:00
Loïc Hoguin
27da09282d Make cookies use universal time instead of local time
Includes:
  * cowboy_clock:rfc2109/1 now expects UTC datetime
  * Rewrite of the cookie code to cowboy_http
  * Removal of cowboy_cookies
  * Add type cowboy_req:cookie_opts/0

Cookies should now be set using cowboy_req:set_resp_cookie/3.
Code calling cowboy_cookies directly will need to be updated.
2012-12-07 15:13:35 +01:00
Andre Graf
ae2a6cfb68 call websocket_terminate in case of a handshake error 2012-12-06 23:02:15 +01:00
Loïc Hoguin
db6b1596ae Make a few more missing headers lowercase 2012-12-05 13:43:25 +01:00
Loïc Hoguin
8bc6bde62f Remove the dependency on httpd_util
Add the function cowboy_clock:rfc1123/1 that formats the given
date to the RFC1123 format.
2012-12-03 15:57:27 +01:00
Loïc Hoguin
5ef4a15b48 Allow passing the Req and an updated Opts when upgrading protocols 2012-12-03 15:52:09 +01:00
Loïc Hoguin
067958abd2 Add more frame types available in websocket replies
We can now reply empty close, ping and pong frames, or close
frames with a payload.

This means that we can send a frame and then close the connection
in a single operation.

If a close packet is sent, the connection is closed immediately,
even if there was frames that remained to be sent. Cowboy will
silently drop any extra frames in the list given as a reply.
2012-12-02 21:37:24 +01:00
Magnus Klaar
3e0e507311 Return full packet as multipart body if possible 2012-12-01 14:11:21 +01:00