XENOS/src/users_local_check.erl

62 lines
1.5 KiB
Erlang

%% users_local_check.erl
-module(users_local_check).
-export([
fqdn_is_local/1,
user_exists/1,
user_is_local/1,
has_local_recipient/1,
check_ENV/0
]).
check_ENV() ->
case os:getenv("AP_FQDN") of
false ->
io:format("Errore: la variabile di ambiente AP_FQDN non è settata!~n"),
erlang:halt(1);
_ ->
ok
end.
get_fqdn() ->
logger:notice("Chiamata get_fqdn()~n"),
case os:getenv("AP_FQDN") of
false ->
logger:notice("Errore: la variabile di ambiente AP_FQDN deve essere settata!~n"),
exit({error, ap_fqdn_not_set});
FQDN ->
logger:notice("FQDN settata correttamente: ~p", [FQDN]),
list_to_binary(FQDN)
end.
%% Controlla se il dominio è locale
fqdn_is_local(FQDN) when is_binary(FQDN) ->
FQDN =:= get_fqdn().
%% Controlla se l'utente esiste nel DB
user_exists(UserAtFqdn) when is_binary(UserAtFqdn) ->
user_db:get_user(UserAtFqdn) =/= not_found.
%% Controlla se un user@fqdn è locale
user_is_local(UserAtFqdn) when is_binary(UserAtFqdn) ->
case binary:split(UserAtFqdn, <<"@">>, [global]) of
[_, Domain] ->
fqdn_is_local(Domain) andalso user_exists(UserAtFqdn);
_ ->
false
end;
user_is_local(_) ->
false.
%% Controlla se almeno uno dei destinatari è locale
has_local_recipient(To) when is_list(To) ->
lists:any(fun user_is_local/1, To);
has_local_recipient(To) when is_binary(To) ->
user_is_local(To);
has_local_recipient(_) ->
false.