Skip to content

Commit

Permalink
Fixes match_media_type in cowboy_http_rest
Browse files Browse the repository at this point in the history
Based on the patch from Heinz N. Gies. The main change is that his
patch accept values such as */plain which we do not want.

Fixes issue ninenines#105.
  • Loading branch information
Loïc Hoguin committed Dec 12, 2011
1 parent a37dd71 commit f445f16
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/cowboy_http_rest.erl
Original file line number Diff line number Diff line change
Expand Up @@ -247,18 +247,26 @@ choose_media_type(Req, State=#state{content_types_p=CTP},

match_media_type(Req, State, Accept, [], _MediaType) ->
choose_media_type(Req, State, Accept);
match_media_type(Req, State, Accept, CTP,
MediaType = {{<<"*">>, <<"*">>, _Params_A}, _QA, _APA}) ->
match_media_type_params(Req, State, Accept, CTP, MediaType);
match_media_type(Req, State, Accept,
[Provided = {{Type, SubType_P, Params_P}, _Fun}|Tail],
MediaType = {{Type, SubType_A, Params_A}, _Quality, _AcceptParams})
CTP = [{{Type, SubType_P, _PP}, _Fun}|_Tail],
MediaType = {{Type, SubType_A, _PA}, _QA, _APA})
when SubType_P =:= SubType_A; SubType_A =:= <<"*">> ->
match_media_type_params(Req, State, Accept, CTP, MediaType);
match_media_type(Req, State, Accept, [_Any|Tail], MediaType) ->
match_media_type(Req, State, Accept, Tail, MediaType).

match_media_type_params(Req, State, Accept,
[Provided = {{_TP, _STP, Params_P}, _Fun}|Tail],
MediaType = {{_TA, _STA, Params_A}, _QA, _APA}) ->
case lists:sort(Params_P) =:= lists:sort(Params_A) of
true ->
languages_provided(Req, State#state{content_type_a=Provided});
false ->
match_media_type(Req, State, Accept, Tail, MediaType)
end;
match_media_type(Req, State, Accept, [_Any|Tail], MediaType) ->
match_media_type(Req, State, Accept, Tail, MediaType).
end.

%% languages_provided should return a list of binary values indicating
%% which languages are accepted by the resource.
Expand Down

0 comments on commit f445f16

Please sign in to comment.