%% 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.