aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2012-12-03 15:57:27 +0100
committerLoïc Hoguin <[email protected]>2012-12-03 15:57:27 +0100
commit8bc6bde62f92d77e44f649d82bc899f97a641c06 (patch)
tree415ca201e52595507542589644bfad48bf927c05
parent5ef4a15b48bfc1b5ca867b893b7cbd1b535175f7 (diff)
downloadcowboy-8bc6bde62f92d77e44f649d82bc899f97a641c06.tar.gz
cowboy-8bc6bde62f92d77e44f649d82bc899f97a641c06.tar.bz2
cowboy-8bc6bde62f92d77e44f649d82bc899f97a641c06.zip
Remove the dependency on httpd_util
Add the function cowboy_clock:rfc1123/1 that formats the given date to the RFC1123 format.
-rw-r--r--src/cowboy_clock.erl8
-rw-r--r--src/cowboy_rest.erl8
-rw-r--r--test/http_SUITE.erl13
-rw-r--r--test/rest_expires.erl22
4 files changed, 45 insertions, 6 deletions
diff --git a/src/cowboy_clock.erl b/src/cowboy_clock.erl
index 5e2bf44..f851211 100644
--- a/src/cowboy_clock.erl
+++ b/src/cowboy_clock.erl
@@ -25,6 +25,7 @@
-export([start_link/0]).
-export([stop/0]).
-export([rfc1123/0]).
+-export([rfc1123/1]).
-export([rfc2109/1]).
%% gen_server.
@@ -61,12 +62,15 @@ stop() ->
gen_server:call(?SERVER, stop).
%% @doc Return the current date and time formatted according to RFC-1123.
-%%
-%% This format is used in the <em>date</em> header sent with HTTP responses.
-spec rfc1123() -> binary().
rfc1123() ->
ets:lookup_element(?TABLE, rfc1123, 2).
+%% @doc Return the given date and time formatted according to RFC-1123.
+-spec rfc1123(calendar:datetime()) -> binary().
+rfc1123(DateTime) ->
+ update_rfc1123(<<>>, undefined, DateTime).
+
%% @doc Return the current date and time formatted according to RFC-2109.
%%
%% This format is used in the <em>set-cookie</em> header sent with
diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl
index 721acb9..f7bcfb8 100644
--- a/src/cowboy_rest.erl
+++ b/src/cowboy_rest.erl
@@ -778,9 +778,9 @@ set_resp_body(Req, State=#state{handler=Handler, handler_state=HandlerState,
LastModified when is_atom(LastModified) ->
Req3;
LastModified ->
- LastModifiedStr = httpd_util:rfc1123_date(LastModified),
+ LastModifiedBin = cowboy_clock:rfc1123(LastModified),
cowboy_req:set_resp_header(
- <<"last-modified">>, LastModifiedStr, Req3)
+ <<"last-modified">>, LastModifiedBin, Req3)
end,
{Req5, State4} = set_resp_expires(Req4, State3),
case call(Req5, State4, Fun) of
@@ -831,9 +831,9 @@ set_resp_expires(Req, State) ->
Expires when is_atom(Expires) ->
{Req2, State2};
Expires ->
- ExpiresStr = httpd_util:rfc1123_date(Expires),
+ ExpiresBin = cowboy_clock:rfc1123(Expires),
Req3 = cowboy_req:set_resp_header(
- <<"expires">>, ExpiresStr, Req2),
+ <<"expires">>, ExpiresBin, Req2),
{Req3, State2}
end.
diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl
index 797be0d..dfb9496 100644
--- a/test/http_SUITE.erl
+++ b/test/http_SUITE.erl
@@ -49,6 +49,7 @@
-export([onresponse_reply/1]).
-export([pipeline/1]).
-export([rest_bad_accept/1]).
+-export([rest_expires/1]).
-export([rest_keepalive/1]).
-export([rest_keepalive_post/1]).
-export([rest_missing_get_callbacks/1]).
@@ -97,6 +98,7 @@ groups() ->
nc_zero,
pipeline,
rest_bad_accept,
+ rest_expires,
rest_keepalive,
rest_keepalive_post,
rest_missing_get_callbacks,
@@ -261,6 +263,7 @@ init_dispatch(Config) ->
{[<<"missing_put_callbacks">>], rest_missing_callbacks, []},
{[<<"nodelete">>], rest_nodelete_resource, []},
{[<<"resetags">>], rest_resource_etags, []},
+ {[<<"rest_expires">>], rest_expires, []},
{[<<"loop_timeout">>], http_handler_loop_timeout, []},
{[], http_handler, []}
]}
@@ -664,6 +667,16 @@ rest_bad_accept(Config) ->
Client),
{ok, 400, _, _} = cowboy_client:response(Client2).
+rest_expires(Config) ->
+ Client = ?config(client, Config),
+ {ok, Client2} = cowboy_client:request(<<"GET">>,
+ build_url("/rest_expires", Config), Client),
+ {ok, 200, RespHeaders, _} = cowboy_client:response(Client2),
+ {_, Expires} = lists:keyfind(<<"expires">>, 1, RespHeaders),
+ {_, LastModified} = lists:keyfind(<<"last-modified">>, 1, RespHeaders),
+ Expires = LastModified = <<"Fri, 21 Sep 2012 22:36:14 GMT">>,
+ ok.
+
rest_keepalive(Config) ->
Client = ?config(client, Config),
URL = build_url("/simple", Config),
diff --git a/test/rest_expires.erl b/test/rest_expires.erl
new file mode 100644
index 0000000..4209041
--- /dev/null
+++ b/test/rest_expires.erl
@@ -0,0 +1,22 @@
+-module(rest_expires).
+
+-export([init/3]).
+-export([content_types_provided/2]).
+-export([get_text_plain/2]).
+-export([expires/2]).
+-export([last_modified/2]).
+
+init(_Transport, _Req, _Opts) ->
+ {upgrade, protocol, cowboy_rest}.
+
+content_types_provided(Req, State) ->
+ {[{{<<"text">>, <<"plain">>, []}, get_text_plain}], Req, State}.
+
+get_text_plain(Req, State) ->
+ {<<"This is REST!">>, Req, State}.
+
+expires(Req, State) ->
+ {{{2012, 9, 21}, {22, 36, 14}}, Req, State}.
+
+last_modified(Req, State) ->
+ {{{2012, 9, 21}, {22, 36, 14}}, Req, State}.