#!/bin/bash -e 

SLAPOS_CFG_PATH=/etc/opt/slapos/slapos.cfg

if [ -z "$COMPUTERNAME" ]; then
  if [ -z "$1" ]; then
    echo " [ERROR] Use re6st-setup.sh COMPUTERNAME or Please export COMPUTERNAME= variable, and rerun the script, it is mandatory for re6st setup script"
    exit 1
  fi
  export COMPUTERNAME=$1
fi


function re6st_conf_repos
{
    if [ ! -f /usr/bin/re6st-conf ]; then
      if [ -f /usr/bin/zypper ]; then
        zypper addrepo http://git.erp5.org/dist/rpm/ git.erp5.org
        zypper update
        zypper install re6stnet
      else
        if [ -f /usr/bin/apt-get ]; then
          if [ ! -f /etc/apt/sources.list.d/git.erp5.org.list ]; then 
            gpg --keyserver subkeys.pgp.net --recv-keys 1A716324
            gpg --export 1A716324 | apt-key add -

            echo "deb http://git.erp5.org/dist/deb ./" > /etc/apt/sources.list.d/git.erp5.org.list
          fi
          apt-get update
          apt-get install -y re6stnet
        else
          echo "[ERROR] Unable to install re6st package, no apt-get or zypper found"
          exit 1
        fi
      fi
    fi
}


function re6st_conf_generation
{
    if [ ! -f /etc/re6stnet/re6stnet.conf ]; then
      re6st_conf_repos
      # Generate re6st configuration
      REGISTRY="http://re6stnet.nexedi.com"
      re6st-conf -d /etc/re6stnet --registry $REGISTRY -r title $COMPUTERNAME --anonymous
      echo "File /etc/re6stnet/re6stnet.conf generated"
      echo "You now need to reboot your server manually for the changes to take\
effect"
    fi
}

function remove_VPN_conf
{
    # Remove VPN configuration
    if [ -e /etc/openvpn/vifib.conf ]; then
        mv /etc/openvpn/vifib.conf /etc/openvpn/vifib.conf.disabled`date`
        echo "Removed vifib OpenVPN configuration files"
    fi

    # Remove VPN configuration
    if [ -e /etc/openvpn/vifib.backup.conf ]; then
        mv /etc/openvpn/vifib.backup.conf /etc/openvpn/vifib.backup.conf.disabled`date`
        echo "Removed vifib OpenVPN configuration files"
    fi

    if [ -e /etc/opt/slapos/openvpn-needed ]; then
        rm /etc/opt/slapos/openvpn-needed
        echo "Removed /etc/opt/slapos/openvpn-needed"
    fi
    echo "###################################################################################################"
    echo "WARNING: RESTART OpenVPN can cut your access out, if you are connected via tapVPN IPv6 address!!!!!"
    echo "###################################################################################################"
}

function modify_interfaces_in_SlapOS_conf
{
    # Modify slapos.cfg to use lo
    cp $SLAPOS_CFG_PATH $SLAPOS_CFG_PATH.old
    echo "Copied old slapos.cfg to $SLAPOS_CFG_PATH.old"

    sed 's/\(interface_name =\).*/\1 lo/g' $SLAPOS_CFG_PATH.old > $SLAPOS_CFG_PATH.tmp
    sed 's/.*ipv6_interface =.*//g' $SLAPOS_CFG_PATH.tmp > $SLAPOS_CFG_PATH
    rm $SLAPOS_CFG_PATH.tmp
}

#XXX Vivien: fugly logic, feel free to modify it if you can do better
#            or if install/upgrade procedure was simplified
if [ ! -e /etc/re6stnet/re6stnet.conf ]; then
    if [ -e $SLAPOS_CFG_PATH ]; then
        # In case of an upgrade test for native ipv6 inside slapos.cfg
        # Only migrates if tapVPN is used.
        if grep -qe "ipv6_interface = tapVPN" $SLAPOS_CFG_PATH && ! grep -qe "#ipv6_interface" $SLAPOS_CFG_PATH; then
            # If using vifib VPN
            remove_VPN_conf

            modify_interfaces_in_SlapOS_conf

            re6st_conf_generation
        else
            # Manual configuration by user before upgrade
            echo "You seem to have no separate interface for ipv6, please proceed \
with the configuration of re6st and SlapOS Node by yourself."
        fi
    else
        # New node
        re6st_conf_generation
    fi
else
  echo "WARNING: /etc/re6stnet/re6stnet.conf is present on your system, skip to run. Please check your existing configuration."
fi