
#!/bin/sh
# File	: chk_e-bladmuziek.sh
# By	: MaartenDeBoer.nl, 200617, 230731
# Subject	: Script to check (and act) about e-bladmuziek
#
PGM=`basename $0|cut -d\. -f1`
VER="0.2"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
MAILTO="maarten@agrarix.nl"
MAIL=""
HOSTNAME=`hostname | cut -d\. -f1`
RCFILE="${HOME}/etc/${PGM}.rc"
ASC="/tmp/${PGM}.asc"
EXCLFILE="${BASEDIR}/etc/${PGM}.excl"
TOEGANGDIR="/toegang"
IFILTER="[?]*"
TFILTER="[?]*"
BFILTER="[?]*"
UFILTER="[?]*"
CSV="/tmp/${PGM}_`date +%Y-%m-%d`.csv"

APPLDIR="${HOME}/e-bladmuziek"
RPT_HTPWD=""
RPT_TITLES=""
RPT_UNAMES=""
CHK_E_DIRS=""
REMOVE_E_DIR=""
CHK_USER_PWD=""
FIX_USER_PWD=""

HTPDIR="${APPLDIR}/htpwd"
SRCDIR="/mnt/nas/DATA/e-bladmuziek/src"
DATADIR="${APPLDIR}/data"
DATACSV="${DATADIR}/name2mail2instrument.csv"

USAGE() 
{ 
  echo "Usage: ${PGM} <options>"
  echo "Options                 : "
  echo "     -e | --empty-dirs  : check Empty-directories"
  echo "     --remove_e_dirs    : REMOVE Empty-directories"
  echo "     --user-pwd         : check User and htpasswd"
  echo "     --fix-user-pwd     : Fix (copy) user htpasswd"
  echo "     -u | --user        : User-filter (${UFILTER})"
  echo "     -b | --band        : Band-filter (${BFILTER})"
  echo "     -i | --instrument  : Instrument-filter (${IFILTER})"
  echo "     -t | --title         : Title-filter (${TFILTER})"
  echo "     -h | --help        : This help"
  echo "     -m | --mail        : Mail the reports"
  echo "     -r | -rc           : change RCfile (${RCFILE}) (used after options)"
  echo "     --mailto           : change MAILTO address (${MAILTO})"
  echo "     --srcdir           : change SouRCeDIRectory (${SRCDIR})"
  echo "     -V                 : Version"
}                                                            
# If no options, then exit
if [ ${#} -lt 1 ]; then
  USAGE; exit 1
fi
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. So, reading ..."|tee -a ${LOG}
  . ${RCFILE}
  sleep 1
fi  # RCFILE 
while [ ${#} -gt 0 ]
do 
  case "${1}" in
    --srcdir)  SRCDIR=${2}; shift ;;
    -h|--help)  USAGE; exit 1 ;;
    -b|--band)  BFILTER="${2}"; shift ;;
    -i|--instrument) IFILTER="${2}"; shift ;;
    -t|--titel) TFILTER="${2}"; shift ;;
    -e|--empty-dirs) CHK_E_DIRS=1 ;;
    --remove_e_dirs) REMOVE_E_DIRS=1 ;;
    --user-pwd) CHK_USER_PWD=1 ;;
    --fix-user-pwd) FIX_USER_PWD=1 ;;
    -u|--user)  UFILTER="${2}"; shift ;;
    -m|--mail)  MAIL=1 ;;
    --mailto)  MAIL=1; MAILTO="${2}";shift ;;
    -r|--rc)  RCFILE="${2}";shift ;;
    -x)  set -x ;;
    -V)  echo "Version=${VER}"; exit 0 ;;
    *) echo "Option ${1} not found." ; USAGE; exit 2 ;;
  esac
  shift
done


echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}                                                                                           
echo "RCFILE=${RCFILE}"
echo "BFILTER=${BFILTER}"
echo "IFILTER=${IFILTER}"
echo "TFILTER=${TFILTER}"
echo "EXCLFILE=${EXCLFILE}"
echo "DATADIR=${DATADIR}"
echo "HTPWDDIR=${HTPWDDIR}"
echo "MAIL=${MAIL}"
echo "MAILTO=${MAILTO}"
echo "NAMEFILE=${NAMEFILE}"
echo "TOEGANGDIR=${TOEGANGDIR}"
echo "SRCDIR=${SRCDIR}"
#echo "RPT_HTPWD=${RPT_HTPWD}"
#echo "RPT_UNAMES=${RPT_UNAMES}"
#echo "RPT_TITLES=${RPT_TITLES}"
echo "CHK_E_DIRS=${CHK_E_DIRS}"
echo "REMOVE_E_DIRS=${REMOVE_E_DIRS}"
echo "CHK_USER_PWD=${CHK_USER_PWD}"
echo "UFILTER=${UFILTER}"

sleep 1

#if [ ! -d ${SRCDIR} ]; then
#  echo "  NO SRCDIR (${SRCDIR}). Exiting ..."|tee -a ${LOG}
#  exit 3
#fi
# When EXLCudeFILE found. Copy this to TMP-file. Otherwise use an empty one (otherwise grep -vf will fail)
if [ -f ${EXCLFILE} ]; then
  echo "  Exclude-file (${EXCLFILE}) found. Using this."|tee -a ${LOG}
  cp ${EXCLFILE} ${TMP}.excl
  sleep 1
else
  touch ${TMP}.excl
fi

touch ${TMP}

# Check Empty dir's (and remove)
if [ ${CHK_E_DIRS} ]; then
  echo "  Checking Empty Directories ..."|tee -a ${LOG}
  cd "${SRCDIR}"
  ls -1d */|egrep -i "${BFILTER}"|grep -v ${TOEGANGDIR}|sed 's|/||g'|grep -ivf ${TMP}.excl|while read BAND
  do
    echo "    B:${BAND}"
    cd "${SRCDIR}/${BAND}"
    ls -1d */|sed 's|/||g'|grep -i "${IFILTER}"|grep -v ".htm"|grep -ivf ${TMP}.excl|while read INSTR
    do
      echo "      I:${INSTR}"
      cd "${SRCDIR}/${BAND}/${INSTR}"
      ls -1d */|sed 's|/||g'|grep -i "${TFILTER}"|grep -v ".htm"|grep -ivf ${TMP}.excl|while read TITLE
      do
        cd "${SRCDIR}/${BAND}/${INSTR}/${TITLE}"
# Partiture/PDF/MP3 CNT
        PCNT=`ls -1 *.[PpMm][DdPp][Ff3] 2>/dev/null | wc -l`
        echo "        T:${TITLE} (${PCNT})"
        if [ ${PCNT} -eq 0 ]; then
          echo "        Has 0 PDFs : ${SRCDIR}/${BAND}/${INSTR}/${TITLE}"|tee -a ${LOG}
          sleep 1
          if [ ${REMOVE_E_DIRS} ]; then
            cd "${SRCDIR}/${BAND}/${INSTR}"
            rmdir "${TITLE}" 
            EC=${?}
            echo "          DIR ${SRCDIR}/${BAND}/${INSTR}/${TITLE} removed (${EC})"|tee -a ${LOG}
            sleep 1
          fi  # REMOVE_E_DIRS
        fi  # 0
      done  # TITLE
    done  # INTRS
  done  # DIRS
fi  # CHK_E_DIR


# Check users and HTpasswords
if [ ${CHK_USER_PWD} ]; then
  echo "  Checking Users and htPassWD ..."|tee -a ${LOG}
  cat ${DATACSV}|grep -v ^#|awk -F\; '{print $1}'|sort -u|grep "${UFILTER}"|while read USERNAME
  do
    echo "    U:${USERNAME}"
    grep "^${USERNAME}" ${DATACSV}|grep -v ^#|awk -F\; '{print $3}'|while read DIR
    do
#      echo "    D:${DIR}"
      BAND=`echo "${DIR}"|cut -d\/ -f1`
      INSTR=`echo "${DIR}"|cut -d\/ -f2`
      CHK_USER_HTPWD=`grep "${USERNAME}" ${HTPDIR}/htpasswd.${BAND}.${INSTR}|cut -d\: -f2`
      CHK=`grep "${USERNAME}" ${HTPDIR}/htpasswd.${BAND}.${INSTR} 1> /dev/null 2>&1`
      EC=${?}
      if [ ${EC} -eq 0 ] && [ "${CHK_USER_HTPWD}" != "" ]; then
        USER_HTPWD=`grep "${USERNAME}" ${HTPDIR}/htpasswd.${BAND}.${INSTR}|cut -d\: -f2`
#        echo "    U:${USERNAME} B:${BAND} I:${INSTR} = ${EC} (${USER_HTPWD})"
      fi 
      if [ ${EC} -ne 0 ] || [ "${CHK_USER_HTPWD}" = "" ]; then
        echo "    U:${USERNAME} B:${BAND} I:${INSTR} = ${EC} (${USER_HTPWD})"
        echo "    U:${USERNAME} B:${BAND} I:${INSTR} = ${EC}" >> ${LOG}
        if [ ${FIX_USER_PWD} ] && [ "${USER_HTPWD}" != "" ]; then
          echo "      Write ${USERNAME}:${USER_HTPWD}"
          echo "      Fix-user-passwd ${USERNAME}" >> ${LOG}
          echo "${USERNAME}:${USER_HTPWD}" >> ${HTPDIR}/htpasswd.${BAND}.${INSTR}
        fi   # FIX_USER_PWD
      fi # <> 0
    done # DIR
  done  # USERNAME
fi  # CHK_USER_PWD


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

