Browse Source

Add cow_http_hd:parse_access_control_request_method/1

Andrei Nesterov 9 years ago
parent
commit
6d84ddf189
1 changed files with 38 additions and 1 deletions
  1. 38 1
      src/cow_http_hd.erl

+ 38 - 1
src/cow_http_hd.erl

@@ -28,7 +28,7 @@
 % @todo -export([parse_access_control_expose_headers/1]). CORS
 % @todo -export([parse_access_control_max_age/1]). CORS
 -export([parse_access_control_request_headers/1]).
-% @todo -export([parse_access_control_request_method/1]). CORS
+-export([parse_access_control_request_method/1]).
 -export([parse_age/1]).
 -export([parse_allow/1]).
 % @todo -export([parse_alternates/1]). RFC2295
@@ -734,6 +734,43 @@ horse_parse_access_control_request_headers() ->
 	).
 -endif.
 
+%% @doc Parse the Access-Control-Request-Method header.
+
+-spec parse_access_control_request_method(binary()) -> binary().
+parse_access_control_request_method(Method) ->
+	true = <<>> =/= Method,
+	ok = validate_token(Method),
+	Method.
+
+validate_token(<< C, R/bits >>) when ?IS_TOKEN(C) -> validate_token(R);
+validate_token(<<>>) -> ok. 
+
+-ifdef(TEST).
+parse_access_control_request_method_test_() ->
+	Tests = [
+		<<"GET">>,
+		<<"HEAD">>,
+		<<"POST">>,
+		<<"PUT">>,
+		<<"DELETE">>,
+		<<"TRACE">>,
+		<<"CONNECT">>,
+		<<"whatever">>
+	],
+	[{V, fun() -> R = parse_access_control_request_method(V) end} || {V, R} <- Tests].
+
+parse_access_control_request_method_error_test_() ->
+	Tests = [
+		<<>>
+	],
+	[{V, fun() -> {'EXIT', _} = (catch parse_access_control_request_method(V)) end} || V <- Tests].
+
+horse_parse_access_control_request_method() ->
+	horse:repeat(200000,
+		parse_access_control_request_method(<<"POST">>)
+	).
+-endif.
+
 %% @doc Parse the Age header.
 
 -spec parse_age(binary()) -> non_neg_integer().