Linux_frogg-profile.d/inc/mail_connect.sh

80 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
################
### LOG MAIL ###
################
env > /tmp/env_login.txt
USERIP=$(echo ${SSH_CONNECTION%% *})
# On ne check la géo que si l'IP n'est pas locale (RFC1918)
if [[ $USERIP =~ ^192\.168\. || $USERIP =~ ^10\. || $USERIP =~ ^172\. ]]; then
LOC_INFO="Local Network (LAN)"
else
# On récupère tout en un seul appel JSON pour économiser l'API et éviter les erreurs
GEO=$(curl -s ipinfo.io/$USERIP/json)
CITY=$(echo "$GEO" | grep '"city"' | cut -d'"' -f4)
COUNTRY=$(echo "$GEO" | grep '"country"' | cut -d'"' -f4)
ORG=$(echo "$GEO" | grep '"org"' | cut -d'"' -f4)
LOC_INFO="$CITY, $COUNTRY (ISP: $ORG)"
fi
# Détection du backend mail (une seule fois)
if command -v mail >/dev/null 2>&1; then
MAIL_BACKEND="mail"
elif command -v sendmail >/dev/null 2>&1; then
MAIL_BACKEND="sendmail"
elif command -v msmtp >/dev/null 2>&1; then
MAIL_BACKEND="msmtp"
else
echo "ERROR: No mail system available" >&2
MAIL_BACKEND="none"
fi
send_mail() {
local to="$1"
local subject="$2"
local body="$3"
case "$MAIL_BACKEND" in
mail)
echo "$body" | mail -v -s "$subject" "$to"
;;
sendmail)
{
echo "To: $to"
echo "Subject: $subject"
echo ""
echo "$body"
} | sendmail -t
;;
msmtp)
{
echo "To: $to"
echo "Subject: $subject"
echo ""
echo "$body"
} | msmtp "$to"
;;
*)
echo "No mail backend available" >&2
return 1
;;
esac
}
SUBJECT="[INFO] $USER connected on $FULLNAME"
BODY="$USER connected on $FULLNAME from $USERIP - $LOC_INFO"
send_mail "$ADMIN_MAIL" "$SUBJECT" "$BODY"