
#!/bin/sh
# File	: proc_webcheck.sh
# By	: MaartenDeBoer.nl, 190311
# Subject	: Script to process A(actions)P(oints) send by mail
#(0.2)	: Add -a 
#(0.3)	: Check is URL exists
#(0.4)  : Added WEBURL, MAIL
#(0.5)	: Added HOST info
PGM=`basename $0|cut -d\. -f1`
VER="0.5"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
CHKSITES=""
TITLE="${PGM}"
SUBJECT=""
ADDURL=""
FROM=""
MAIL=""
MAILTO="webcheck@agrarix.nl"
HOSTNAME=`hostname $0|cut -d\. -f1`

WEBURL="webcheck.agrarix.it"
PAGEDIR="/var/www/vhosts/${WEBURL}/html"
PAGE="${PAGEDIR}/index.html"
TITLE="WEBCHECK"
FONT="Verdana"
SIZE="3"
FONT_H="Verdana"
SIZE_H="1"

DATADIR="${HOME}/data/"
SITELIST="${DATADIR}/sitelist.asc"

USAGE()
{
  echo "Usage: ${PGM} [<options>]"
  echo "  Version: ${VER}"
  echo "  options              :"
  echo "    -a | --add         : Add <URL>"
  echo "    -c | --chk         : Check websites and update WEBURL (${WEBURL})"
  echo "    -f | --from        : From address"
  echo "    -h | --help        : this help"
  echo "    -m | --mail        : Mail when updated"
  echo "    -V                 : Version"
  echo "    -x                 : set -x"
}
if [ ${#} -lt 1 ]; then
  echo "  Do NOT know what to do. Exiting ..."
  USAGE
  exit 1
fi
while [ ${#} -ge 1 ]
  do
  case ${1} in
    -a | --add) ADDURL=1; URL="${2}"; shift ;;
    -c | --chk) CHKSITES=1 ;;
    -f | --from) FROM="${2}"; shift ;;
    -h | --help) USAGE; exit 1 ;;
    -m | --mail) MAIL=1 ;;
    -V) echo "${PGM}: v${VER}"; exit 1 ;;
    -x)  set -x ;;
    *)  echo "Option ${1} not known."; USAGE; exit 1 ;;
  esac
    shift
done

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
touch ${TMP}

if [ ! -d ${DATADIR} ]; then
  mkdir ${DATADIR}
  echo "  Dir. ${DATADIR} created."|tee -a ${LOG}
fi
if [ ! -f ${SITELIST} ]; then
  echo "   Site-list (${SITELIST}) file NOT found. Exiting ..."|tee -a ${LOG}
  exit 2
fi
if [ ! -f ${PAGE} ]; then
  echo "   Web-Page (${PAGE}) file NOT found. Exiting ..."|tee -a ${LOG}
  exit 3
fi

# Add (-a) URL
if [ ${ADDURL} ]; then
  if [ "${URL}" = "" ]; then
    echo "  URL is empty. Exiting ..."|tee -a ${LOG}
    exit 4
  else
# Remove https:// or http:// and www. from URL
    URL2=`echo ${URL}|sed 's,https://,,g'|sed 's,http://,,g'|sed 's,www.,,g'`
    echo "  Adding URL ${URL} (${URL2}) ..."
    URL="${URL2}"
# Check if URL already exists (not empty).
    ANSW=`grep "${URL}" ${SITELIST}`
    if [ "${ANSW}" != "" ]; then
      echo "  URL already exists in sitelist (${SITELIST}). NOT adding."|tee -a ${LOG}
      if [ "${FROM}" != "" ]; then
# If FROM is not empty, then address is know and mail can be send
        echo "  URL already exists in sitelist. NOT adding."|mailx -s "WebCheck: URL already exists in sitelist [${PGM} v${VER}]" ${FROM}
        echo "  Mailed (URL already exists) to ${FROM}"|tee -a ${LOG}
      fi  # FROM
    else
      host ${URL}
      EC=${?}
      if [ ${EC} -eq 0 ]; then
# URL is valide. So can be added
        echo "  URL ($URL) is valid. Adding and CHECK will be done."|tee -a ${LOG}
        echo "${URL}" >> ${SITELIST} 
        CHKSITES=1
        if [ "${FROM}" != "" ]; then
# If FROM is not empty, then address is know and mail can be send
          echo "  URL (${URL}) is added. And CHECK will be done. See ${WEBURL}"|mailx -s "WebCheck: URL is added [${PGM} v${VER}]" ${FROM}
          echo "  Mailed (URL is added) to ${FROM}"|tee -a ${LOG}
          MAIL=1
        fi  # FROM
      else
        echo "  URL (${URL}) is not valid. NOT adding"|tee -a ${LOG}
        if [ "${FROM}" != "" ]; then
# If FROM is not empty, then address is know and mail can be send
          echo "  URL (${URL}) is not valid. NOT adding"|mailx -s "WebCheck: URL is not valid [${PGM} v${VER}]" ${FROM}
          echo "  Mailed (URL is not valid) to ${FROM}"|tee -a ${LOG}
        fi  # FROM
      fi # EC=0

    fi  # ANSW

  fi  # SUBJECT 

fi  # ADDURL


# Check (-c) sites
if [ ${CHKSITES} ]; then

touch ${PAGE}

echo "<HTML>" > ${PAGE}
echo "  <HEAD>" >> ${PAGE}
echo "    <TITLE> ${TITLE} </TITLE>" >> ${PAGE}
echo "    <META NAME=\"generator\" content=\"${PGM} v${VER}\"  />" >> ${PAGE}
echo "  </HEAD>" >> ${PAGE}
echo "  <BODY>" >> ${PAGE}

echo "<H1> ${TITLE} </H1>" >> ${PAGE}

echo "  <TABLE BORDER=${BORDER}>" >> ${PAGE}

echo "   <TR> " >> ${PAGE}
echo "    <TD> <FONT face=${FONT} size=${SIZE}><B>Site</B> </FONT> </TD> " >> ${PAGE}
echo "    <TD> <FONT face=${FONT} size=${SIZE}><B>Generators</B> </FONT> </TD> " >> ${PAGE}
echo "    <TD> <FONT face=${FONT} size=${SIZE}><B>Elapsed</B> </FONT> </TD> " >> ${PAGE}
echo "    <TD> <FONT face=${FONT_H} size=${SIZE_H}><B>Host (DNS) info</B> </FONT> </TD> " >> ${PAGE}
#echo "    <TD><B>Stylesheet</B></TD> " >> ${PAGE}
echo "   </TR> " >> ${PAGE}

cat ${SITELIST}|sort -u|grep -v ^#|while read SITE REST
do
  echo "${SITE} ..."
  cp /dev/null ${TMP}
# Get website info in TMP and time in TMP.t
  time -o ${TMP}.t wget -O ${TMP} ${SITE} 1> /dev/null 2>&1

#  cat ${TMP}.t 
  ELAP=`grep -i elapsed ${TMP}.t|awk '{print $3}'|cut -d\. -f2|cut -d\e -f1`

#<meta name="generator" content="WordPress 4.7.2" />
  STR=`grep -i generator ${TMP}|grep -i content`
#  POS="`expr index \"${STR}\" \"c\" `"
#  VER="`expr substr \"${STR}\" ${POS} 100 |cut -d\= -f2| awk '{print $2}'|sed 's/\"//g'`"
# CONT=content
  CONT=`echo ${STR}|awk -F\" '{print $4}'`
  if [ "${CONT}" = "" ]; then
    CONT=`echo ${STR}|awk -F\' '{print $4}'`
  fi
## HOSTinfo
  HOSTINFO=""
  if [ -f /usr/bin/host ]; then
    HOST_A=`/usr/bin/host -t a ${SITE}`
    HOST_NS=`/usr/bin/host -t ns ${SITE}`
    HOST_MX=`/usr/bin/host -t mx ${SITE}`
    HOSTINFO="<B>A:</B>${HOST_A}<BR> <B>NS:</B>${HOST_NS}<BR> <B>MX:</B>${HOST_MX}<BR>"
  fi  # host

## Stylesheet
#  STYLESHEET=`grep 'rel="stylesheet"' ${TMP}|cut -d\= -f5-`

#  echo "${POS}|${STR}|${STR2}|${CONT} "
  echo "  STR=${STR} CONT=${CONT} ELAP=${ELAP} HOSTINFO=${HOSTINFO} STYLESHEET=${STYLESHEET}"
#  sleep 1

  echo "   <TR> " >> ${PAGE}
  echo "    <TD> <FONT face=${FONT} size=${SIZE}> <A HREF=\"//${SITE}\" target="_blank"> ${SITE} </A> </FONT> </TD> " >> ${PAGE}
  echo "    <TD> <FONT face=${FONT} size=${SIZE}>${CONT} </FONT> </TD> " >> ${PAGE}
  echo "    <TD> <FONT face=${FONT} size=${SIZE}>${ELAP} </FONT> </TD> " >> ${PAGE}
  echo "    <TD> <FONT face=${FONT_H} size=${SIZE_H}>${HOSTINFO} </FONT> </TD> " >> ${PAGE}
#  echo "    <TD>${STYLESHEET}</TD> " >> ${PAGE}
  echo "   </TR> " >> ${PAGE}

done  # cat

echo "  </TABLE>" >> ${PAGE}

echo "  <BR>" >> ${PAGE}

echo "<H6> Last update `date` by ${PGM} v${VER} at ${HOSTNAME}</H6>" >> ${PAGE}

echo "  </BODY>" >> ${PAGE}
echo "</HTML>" >> ${PAGE}


  rm${TMP}.t

  if [ ${MAIL} ]; then
# When FROM is used (not empty), then use FROM address for MAILTO
    if [ "${FROM}" != "" ]; then
      MAILTO="${FROM}"
    fi  # FROM != ""
    echo "  Check is done. See ${WEBURL}"|mailx -s "WebCheck: Check done [${PGM} v${VER}]" ${MAILTO}
    echo "  Mailed (check is done) to ${MAILTO}"|tee -a ${LOG}
  fi  # MAIL
fi  # CHKSITES



rm ${TMP}
echo "`date` ${PGM} v${VER} finished."|tee -a ${LOG}
exit 0

