#!/bin/bash
#-------------------------------------------------------------------------------
# charon_menu_VEc2v
#-------------------------------------------------------------------------------
# Copyright (C) 2013-2023 STROMASYS.
# All rights reserved.
# Products: AXP/VAX + PAR
#-------------------------------------------------------------------------------
#
VERSION=2.0

. /opt/charon/utils/charon_common
. /opt/charon/utils/charon_common_menu
EXCODE=0

function check_and_send_mail
{
  echo
  tput sgr0
  while test 1
  do
    printf "Do you want to send file via mail (y/n) ? "
    read CH
    case "${CH}"
    in
      y|Y)
        select_mailto
        if test -s ${MAILRECIPFILE}
        then
          MAILTO=$(cat ${MAILRECIPFILE})
          echo
          echo "Sending mail to ${MAILTO}..."
          TMPMAIL=/tmp/charon_menu_c2v.$$

          MAILFROM=`cat ${MAILFRFILE} 2>/dev/null`
          if test -z "${MAILFROM}"
          then
            echo "From: `whoami`@`hostname`" >${TMPMAIL}
          else
            if test -n "`echo ${MAILFROM} | grep '@'`"
            then
              echo "From: ${MAILFROM}" >${TMPMAIL}
            else
              echo "From: ${MAILFROM}<`whoami`@`hostname`>" >${TMPMAIL}
            fi
          fi

          echo "To: ${MAILTO}" >>${TMPMAIL}

          if test "${LICMOD}" = "Regular"
          then
            echo "Subject: [${MAILTAG:-CHARON}] C2V file / VE license" >>${TMPMAIL}
          else
            echo "Subject: [${MAILTAG:-CHARON}] C2V file / AutoVE license" >>${TMPMAIL}
          fi

          BOUNDARY="$$CHARONSENDMAIL`basename $0`$$"
          echo "Mime-Version: 1.0;" >>${TMPMAIL}
 
          C2VFIL=${OUTC2V}

          echo "Content-Type: multipart/mixed; boundary=${BOUNDARY}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "Please find attached C2V files: ${C2VFIL}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "License keyid(s): ${LICENSEKEYIDS}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "--${BOUNDARY}" >>${TMPMAIL}
          echo "Content-Type: text/plain; charset=\"ISO-8859-1\";" >>${TMPMAIL}
          echo "Content-Disposition: inline;" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "Please find attached C2V file: ${C2VFIL}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "License keyid(s): ${LICENSEKEYIDS}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "--${BOUNDARY}" >>${TMPMAIL}
          echo "Content-Type: application/octet-stream; name=`basename ${C2VFIL}`;" >>${TMPMAIL}
          echo "Content-Transfer-Encoding: base64;" >>${TMPMAIL}
          echo "Content-Disposition: Attachment; filename=${C2VFIL}" >>${TMPMAIL}
          echo "" >>${TMPMAIL}

          test -e ${C2VFIL} && rm -f ${C2VFIL}
          zip -j ${C2VFIL} ${C2VLIST}

          base64 ${C2VFIL} >>${TMPMAIL}
          echo "" >>${TMPMAIL}
          echo "--${BOUNDARY}--" >>${TMPMAIL}

          sendmail -t -i <${TMPMAIL}
          if test $? = 0
          then
            echo "Done."
            rm -f ${TMPMAIL} ${C2VFIL}
          else
            echo "${FGORANGE}Failed![0m"
          fi
        fi
        break
        ;;
      n|N)
        break
        ;;
      *)
        tput cuu1;tput ed
        ;;
    esac
  done
}


while test 1
do
  display_header "Collect the fingerprint data (c2v)"
  if test $(id -u) -ne 0
  then
    echo "[31mERROR[0m: must be root !"
    EXCODE=1
    break
  fi

  if test -x /opt/license-server/c2v
  then
    unset availplatforms 2>/dev/null
    declare -a availplatforms
    while test 1
    do
      #--- Ask for license mode
      echo -n "${FGBLUE}License mode (1=Regular VE, 2=AutoVE, q to quit):[0m "
      read LICMOD
      case "${LICMOD}"
      in
        1)
          LICMOD="Regular"
          ARGMOD=""
          availplatforms=(physical aws oci gcp azure ibm nutanix esxi)
          break
          ;;
        2)
          LICMOD="AutoVE"
          ARGMOD="-a"
          availplatforms=(aws oci gcp azure)
          break
          ;;
        q|Q)
          break 2
          ;;
        *)
          tput cuu1;tput ed
          ;;
      esac
    done
    tput cuu1;tput ed
    echo "${FGBLUE}License mode:[0m ${LICMOD}"

    #--- Ask for platform
    declare -i N=0
    for item in "${availplatforms[@]}"
    do
      N=N+1
      if test $N -eq 1
      then
        echo "${FGBLUE}Available platforms:[0m ${N}=${item}"
      else
        echo "                     ${N}=${item}"
      fi      
    done
    while test 1
    do
      echo -n "${FGBLUE}Platform selected (q to quit):[0m "
      read PLATFO
      test "${PLATFO}" = "q" && break 2
      test "${PLATFO}" = "Q" && break 2
      if test -n "$(echo ${PLATFO} | tr -d [:digit:])"
      then
        echo "Numeric value only..."
        sleep 2
        tput cuu1;tput cuu1;tput ed
      else
        PLATFO=$(echo ${PLATFO} | tr -dc [:digit:])
        if test ${PLATFO} -eq 0
        then
          echo "Incorrect value..."
          sleep 2
          tput cuu1;tput cuu1;tput ed
        else
          N=${PLATFO}-1
          if test -z "${availplatforms[${N}]}"
          then
            echo "Incorrect value..."
            sleep 2
            tput cuu1;tput cuu1;tput ed
          else
            PLATFO=${availplatforms[${N}]}
            break
          fi
        fi
      fi
    done
    tput cup 4 0;tput ed
    echo "${FGBLUE}Platform selected:[0m ${PLATFO}"

    echo
    while test 1
    do
      echo -n "${FGBLUE}Confirm (y/n):[0m "
      read ANS
      case "${ANS}"
      in
        y|Y)
          #--- Define C2V file name
          OUTC2V="/tmp/$(hostname -s)_$(date +%Y%m%d_%H%M%S).c2v"
          echo
          echo "Creating C2V file '${OUTC2V}' ..."
          rm -f ${OUTC2V} 2>/dev/null

          /opt/license-server/c2v ${ARGMOD} --filename ${OUTC2V} --platform ${PLATFO}
          if test -s ${OUTC2V}
          then
            echo "[1mSuccess.[0m"
            check_and_send_mail
            Press_Enter
          else
            echo "${FGORANGE}Failed.[0m"
            Press_Enter
          fi
          break 2
          ;;
        n|N)
          break
          ;;
        *)
          tput cuu1;tput ed
          ;;
      esac
    done    
  else
    echo
    echo "${FGORANGE}WARNING[0m: License server package is not installed (VE license) !"
    echo "         Please ensure you are running this utility on the license server."
    EXCODE=2
    break
  fi
done

echo
exit ${EXCODE:-0}
