From 8bc6bde62f92d77e44f649d82bc899f97a641c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 3 Dec 2012 15:57:27 +0100 Subject: Remove the dependency on httpd_util Add the function cowboy_clock:rfc1123/1 that formats the given date to the RFC1123 format. --- src/cowboy_clock.erl | 8 ++++++-- src/cowboy_rest.erl | 8 ++++---- test/http_SUITE.erl | 13 +++++++++++++ test/rest_expires.erl | 22 ++++++++++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 test/rest_expires.erl 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 date 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 set-cookie 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}. -- cgit v1.2.3