62 lines
1.5 KiB
Erlang
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.
|