Skip to content

Instantly share code, notes, and snippets.

@dvv
Created January 13, 2013 10:39
Show Gist options
  • Select an option

  • Save dvv/4523495 to your computer and use it in GitHub Desktop.

Select an option

Save dvv/4523495 to your computer and use it in GitHub Desktop.
A draft of user agent determination
-spec user_agent_platform(binary()) -> undefined | atom().
user_agent_platform(Header) ->
user_agent(cowboy_bstr:to_lower(Header), [
{<<"windows">>, windows},
{<<"linux">>, linux},
{<<"os x ">>, osx},
{<<"android">>, android},
{<<"ipod">>, ipod},
{<<"iphone">>, iphone},
{<<"ipad">>, ipad}
]).
-spec user_agent(binary()) -> undefined | atom().
user_agent(Header) ->
user_agent(cowboy_bstr:to_lower(Header), [
{<<"msie">>, ie},
{<<"chrome">>, chrome},
{<<"firefox">>, firefox},
{<<"opera">>, opera},
{<<"safari">>, safari},
{<<"konqueror">>, konqueror},
{<<"curl">>, curl}
]).
user_agent(_Header, []) ->
undefined;
user_agent(Header, [{Pattern, UA} | Rest]) ->
case binary:match(Header, Pattern) of
nomatch -> user_agent(Header, Rest);
_ -> UA
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment