summaryrefslogtreecommitdiff
path: root/src/ejabberd_acme.erl
diff options
context:
space:
mode:
authorKonstantinos Kallas <konstantinos.kallas@hotmail.com>2017-08-02 21:10:49 +0300
committerKonstantinos Kallas <konstantinos.kallas@hotmail.com>2017-08-02 21:10:49 +0300
commite6e8e64f84ea30abd3f9c6c4e5a2be5a54df2a54 (patch)
treed3fd9fb63867fa930970d76cfd9e64e6a81df1ba /src/ejabberd_acme.erl
parentImplement verbose list_certificates option (diff)
Improve return format of get_certificates command
Diffstat (limited to 'src/ejabberd_acme.erl')
-rw-r--r--src/ejabberd_acme.erl41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/ejabberd_acme.erl b/src/ejabberd_acme.erl
index 230ce110..cf8e5bfa 100644
--- a/src/ejabberd_acme.erl
+++ b/src/ejabberd_acme.erl
@@ -56,7 +56,9 @@ is_valid_verbose_opt(_) -> false.
%% Needs a hell lot of cleaning
-spec get_certificates(url(), account_opt()) ->
- [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}] |
+ {'ok', [{'ok', bitstring(), 'saved'}]} |
+ {'error',
+ [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}]} |
{'error', _}.
get_certificates(CAUrl, NewAccountOpt) ->
try
@@ -71,7 +73,9 @@ get_certificates(CAUrl, NewAccountOpt) ->
end.
-spec get_certificates0(url(), account_opt()) ->
- [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}] |
+ {'ok', [{'ok', bitstring(), 'saved'}]} |
+ {'error',
+ [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}]} |
no_return().
get_certificates0(CAUrl, "old-account") ->
%% Get the current account
@@ -86,7 +90,9 @@ get_certificates0(CAUrl, "new-account") ->
get_certificates1(CAUrl, PrivateKey).
-spec get_certificates1(url(), jose_jwk:key()) ->
- [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}] |
+ {'ok', [{'ok', bitstring(), 'saved'}]} |
+ {'error',
+ [{'ok', bitstring(), 'saved'} | {'error', bitstring(), _}]} |
no_return().
get_certificates1(CAUrl, PrivateKey) ->
%% Read Config
@@ -100,7 +106,33 @@ get_certificates1(CAUrl, PrivateKey) ->
%% Format the result to send back to ejabberdctl
%% Result
- SavedCerts.
+ format_get_certificates_result(SavedCerts).
+
+-spec format_get_certificates_result([{'ok', bitstring(), 'saved'} |
+ {'error', bitstring(), _}]) ->
+ string().
+format_get_certificates_result(Certs) ->
+ Cond = lists:all(fun(Cert) ->
+ not is_error(Cert)
+ end, Certs),
+ FormattedCerts = lists:join($\n,
+ [format_get_certificate(C) || C <- Certs]),
+ case Cond of
+ true ->
+ Result = io_lib:format("Success:~n~s", [FormattedCerts]),
+ lists:flatten(Result);
+ _ ->
+ Result = io_lib:format("Error with one or more certificates~n~s", [lists:flatten(FormattedCerts)]),
+ lists:flatten(Result)
+ end.
+
+-spec format_get_certificate({'ok', bitstring(), 'saved'} |
+ {'error', bitstring(), _}) ->
+ string().
+format_get_certificate({ok, Domain, saved}) ->
+ io_lib:format(" Certificate for domain: \"~s\" acquired and saved", [Domain]);
+format_get_certificate({error, Domain, Reason}) ->
+ io_lib:format(" Error for domain: \"~s\", with reason: \'~s\'", [Domain, Reason]).
-spec get_certificate(url(), bitstring(), jose_jwk:key()) ->
{'ok', bitstring(), pem()} |
@@ -571,6 +603,7 @@ to_public(PrivateKey) ->
-spec is_error(_) -> boolean().
is_error({error, _}) -> true;
+is_error({error, _, _}) -> true;
is_error(_) -> false.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%