#!/bin/bash

MAIN_ROUTER=odlyd
BACK_ROUTER=freebox

vpn_is_running () {
    if systemctl is-active openvpn@$1 &> /dev/null
    then return 0
    else return 1
    fi
}

vpn_start () {
    vpn_is_running $1 && exit 0
    # On n'envoie un mail que toutes les 5 minutes
    if ! [ -f /tmp/vpn_mail_sent ] || [ $((`date +%s` - `stat -c %X /tmp/vpn_mail_sent`)) -gt 300 ]
    then
        touch /tmp/vpn_mail_sent
        # On utilise restart pour être sûr de ne pas avec de VPN qui traîne
        if systemctl restart openvpn@$1
        then
        	echo "Lancement du vpn $(hostname)<->$1 reussi "'!'
        	exit 0
        else
        	echo "Echec de lancement du vpn $(hostname)<->$1 "'!'
        	exit 1
        fi
    else
        systemctl restart openvpn@$1 &> /dev/null
    fi
}

if vpn_is_running $MAIN_ROUTER && fping -q $MAIN_ROUTER.adm.crans.org; then
    # Le vpn vers odlyd est actif, tout va bien
    exit 0
fi

if fping -q $MAIN_ROUTER.crans.org; then
    # Si on peut atteindre odlyd, on repasse par odlyd
    if vpn_is_running $BACK_ROUTER
    then
        if ! [ -f /tmp/vpn_mail_sent ] || [ $((`date +%s` - `stat -c %X /tmp/vpn_mail_sent`)) -gt 300 ]
        then
            systemctl stop openvpn@$BACK_ROUTER
        else
            systemctl stop openvpn@$BACK_ROUTER &> /dev/null
        fi
    fi
    vpn_start $MAIN_ROUTER
fi

if vpn_is_running $BACK_ROUTER && fping -q $MAIN_ROUTER.adm.crans.org; then
    # On ne peut pas atteindre odlyd et on passe par la freebox, c'est
    # normal
    exit 0
fi

if fping -q $BACK_ROUTER.crans.org; then
    # On tente de passer par la freebox
    vpn_start $BACK_ROUTER
fi
