Skip to content

Instantly share code, notes, and snippets.

@betawaffle
Created April 10, 2012 12:59
Show Gist options
  • Save betawaffle/2351185 to your computer and use it in GitHub Desktop.
Save betawaffle/2351185 to your computer and use it in GitHub Desktop.
-spec permission_name(binary()) -> atom() | binary().
permission_name(<<"create_note">>) -> create_note;
permission_name(<<"installed">>) -> installed;
permission_name(<<"manage_pages">>) -> manage_pages;
permission_name(<<"offline_access">>) -> offline_access;
permission_name(<<"photo_upload">>) -> photo_upload;
permission_name(<<"publish_stream">>) -> publish_stream;
permission_name(<<"read_insights">>) -> read_insights;
permission_name(<<"read_stream">>) -> read_stream;
permission_name(<<"share_item">>) -> share_item;
permission_name(<<"status_update">>) -> status_update;
permission_name(<<"video_upload">>) -> video_upload;
permission_name(Other) -> Other.
-spec permissions_decoder() -> fun((iolist()) -> list(atom() | binary())).
permissions_decoder() ->
Perm = fun ({Bin, 1}) -> permission_name(Bin) end,
Hook = fun ({struct, [{<<"data">>, [Perms]}]}) -> Perms;
({struct, [{<<"data">>, _Data}]}) ->
error(badarg);
({struct, PropList}) ->
lists:map(Perm, PropList)
end,
mochijson2:decoder([{object_hook, Hook}]).
-spec permissions_url(iolist(), iolist(), iolist) -> iolist();
(iolist(), iolist(), binary) -> binary();
(iolist(), iolist(), string) -> string().
permissions_url(UserId, Token, iolist) ->
[?GRAPH_BASE_URL, "/permissions?id=", UserId, "&access_token=", Token];
permissions_url(UserId, Token, binary) ->
IoList = permissions_url(UserId, Token, iolist),
iolist_to_binary(IoList);
permissions_url(UserId, Token, string) ->
Binary = permissions_url(UserId, Token, binary),
binary_to_list(Binary).
-spec check_permissions(iolist(), iolist()) -> list(atom() | binary()).
check_permissions(UserId, Token) ->
Decoder = permissions_decoder(),
util:http({get, {permissions_url(UserId, Token, string), []}},
fun (Err) -> error(Err) end,
fun ({{_, 200, _}, _Headers, Body}) ->
Decoder(Body);
({200, Body}) ->
Decoder(Body);
(Other) ->
error({unhandled_response, Other})
end).
@betawaffle
Copy link
Author

Example: (Run from ./load.sh)

crypto:start(), ssl:start(), inets:start().

fb:check_permissions("725401531", "AAACm40OVqbsBAGuUzQKVR...PfRCUvv9o2vFPykZD").
% => [installed,status_update,photo_upload,video_upload,
%     offline_access,create_note,share_item,read_stream,
%     publish_stream,read_insights,manage_pages]

% Cah-Chow!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment