Packages
rebar3_hex
7.0.2
7.1.0
7.0.11
7.0.10
7.0.9
7.0.8
7.0.7
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.11.9
6.11.8
6.11.7
6.11.6
6.11.5
6.11.4
6.11.3
6.11.2
6.11.1
6.11.0
6.10.3
6.10.2
6.10.1
6.10.0
6.9.6
6.9.5
6.9.4
6.9.3
6.9.2
6.9.1
6.9.0
6.8.0
6.7.0
6.6.0
6.5.0
6.4.0
6.3.0
6.2.0
6.1.0
6.0.0
4.1.0
4.0.0
3.1.0
3.0.0
2.5.1
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.0
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.3
1.6.1
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Hex.pm plugin for rebar3
Current section
Files
Jump to
Current section
Files
src/rebar3_hex_client.erl
%% @private
-module(rebar3_hex_client).
-export([ is_success/1
, create_user/4
, delete_release/3
, me/1
, key_add/3
, key_get/2
, key_delete/2
, key_delete_all/1
, key_list/1
, publish/3
, publish_docs/4
, delete_docs/3
, test_key/2
, member_of/1
, pretty_print_status/1
, pretty_print_errors/1
, reset_password/2
, retire/5
, unretire/3
]).
-include("rebar3_hex.hrl").
-define(is_success(N), N >= 200 andalso N =< 299).
create_user(HexConfig, Username, Password, Email) ->
Res = hex_api_user:create(HexConfig, Username, Password, Email),
response(Res).
reset_password(HexConfig, User) ->
Res = hex_api_user:reset_password(HexConfig, User),
response(Res).
me(HexConfig) ->
Res = hex_api_user:me(HexConfig),
response(Res).
key_add(HexConfig, <<KeyName/binary>>, Perms) ->
Res = hex_api_key:add(HexConfig, KeyName, Perms),
response(Res);
key_add(HexConfig, KeyName, Perms) ->
key_add(HexConfig, to_binary(KeyName), Perms).
key_get(HexConfig, <<KeyName/binary>>) ->
Res = hex_api_key:get(HexConfig, KeyName),
response(Res);
key_get(HexConfig, KeyName) ->
key_get(HexConfig, to_binary(KeyName)).
member_of(HexConfig) ->
Res = hex_api_organization:list(HexConfig),
response(Res).
key_list(HexConfig) ->
Res = hex_api_key:list(HexConfig),
response(Res).
key_delete(HexConfig, <<KeyName/binary>>) ->
Res = hex_api_key:delete(HexConfig, KeyName),
response(Res);
key_delete(HexConfig, KeyName) ->
key_delete(HexConfig, to_binary(KeyName)).
key_delete_all(HexConfig) ->
Res = hex_api_key:delete_all(HexConfig),
response(Res).
test_key(HexConfig, Perms) ->
Res = hex_api_auth:test(HexConfig, Perms),
response(Res).
publish(HexConfig, Tarball, Opts) ->
Res = hex_api_release:publish(HexConfig, Tarball, Opts),
response(Res).
delete_release(HexConfig, Name, Version) ->
Res = hex_api_release:delete(HexConfig, Name, Version),
response(Res).
publish_docs(Config, Name, Version, Tarball) ->
TarballContentType = "application/octet-stream",
Headers = maps:get(http_headers, Config, #{}),
Headers1 = maps:put(<<"content-length">>, integer_to_binary(byte_size(Tarball)), Headers),
Config2 = maps:put(http_headers, Headers1, Config),
Path = hex_api:build_repository_path(Config2, ["packages", Name, "releases", Version, "docs"]),
Body = {TarballContentType, Tarball},
Res = hex_api:post(Config2, Path, Body),
response(Res).
delete_docs(Config, Name, Version) ->
Res = hex_api:delete(Config, ["packages", Name, "releases", Version, "docs"]),
response(Res).
retire(Config, Package, Version, Reason, Message) ->
Msg = #{<<"reason">> => Reason,
<<"message">> => Message
},
Res = hex_api_release:retire(Config, Package, Version, Msg),
response(Res).
unretire(Config, Package, Version) ->
Res = hex_api_release:unretire(Config, Package, Version),
response(Res).
response({ok, {201, _Headers, Res}}) ->
{ok, Res};
response({ok, {204, _Headers, Res}}) ->
{ok, Res};
response({ok, {N, _Headers, Res}}) when ?is_success(N) ->
{ok, Res};
response({ok, {401, _Headers, Res}}) ->
{error, Res};
response({ok, {403, _Headers, Res}}) ->
{error, Res};
response({ok, {404, _Headers, Res}}) ->
{error, Res};
response({ok, {422, _Headers, #{<<"message">> := <<"Validation error(s)">>} = Res}}) ->
{error, Res};
response({ok, {422, _Headers, Res}}) ->
{error, Res};
response({ok, {500, _Headers, Res}}) ->
{error, Res};
response({_, _} = Unknown) ->
Unknown.
is_success(N) when ?is_success(N) -> true;
is_success(_N) -> false.
pretty_print_status(401) -> "Authentication failed (401)";
pretty_print_status(403) -> "Forbidden (403)";
pretty_print_status(404) -> "Entity not found (404)";
pretty_print_status(422) -> "Validation failed (422)";
pretty_print_status(Code) -> io_lib:format("HTTP status code: ~p", [Code]).
pretty_print_errors(Errors) ->
L = maps:fold(fun(K,V,Acc) ->
case is_map(V) of
true ->
Acc ++ [pretty_print_errors(V)];
false ->
Acc ++ [<<K/binary, " ", V/binary>>]
end
end,
[],
Errors),
binary:list_to_bin(join_lists(", ", L)).
-ifdef(POST_OTP_18).
join_lists(Sep, List) -> lists:join(Sep, List).
-else.
join_lists(_Sep, []) -> [];
join_lists(Sep, List) ->
[Last | AllButLast] = lists:reverse(List),
lists:foldl(fun (Elem,Acc) -> [Elem,Sep|Acc] end, [Last], AllButLast).
-endif.
to_binary(Subject) ->
rebar_utils:to_binary(Subject).