#!/bin/sh
######################################################################
#
# $Id: webjob-delete-profile,v 1.23 2012/01/07 08:01:17 mavrik Exp $
#
######################################################################
#
# Copyright 2007-2012 The WebJob Project, All Rights Reserved.
#
######################################################################
#
# Purpose: Delete one or more WebJob profiles.
#
######################################################################

IFS=' 	
'

PROGRAM=`basename ${0}`

######################################################################
#
# Usage
#
######################################################################

Usage()
{
  echo 1>&2
  echo "${PROGRAM} [-H webjob-home] [-S webjob-server-home] client [client ...]" 1>&2
  echo 1>&2
  exit 1
}

######################################################################
#
# Main
#
######################################################################

WEBJOB_SERVER_HOME="/var/webjob"

while getopts "H:S:" OPTION ; do
  case "${OPTION}" in
  H)
    WEBJOB_HOME="${OPTARG}"
    ;;
  S)
    WEBJOB_SERVER_HOME="${OPTARG}"
    ;;
  *)
    Usage
    ;;
  esac
done

shift `expr ${OPTIND} - 1`

if [ $# -lt 1 ] ; then
  Usage
fi

PATH=${WEBJOB_HOME=/usr/local/webjob}/bin:${PATH} ; export PATH

if [ ! -d "${WEBJOB_SERVER_HOME}" ] ; then
  echo "${PROGRAM}: Error='Server home directory (${WEBJOB_SERVER_HOME}) does not exist.'" 1>&2
  exit 2
fi

######################################################################
#
# Ensure that all prerequisites exist. Any error is considered fatal
# since it implies that the server's configuration is not complete.
#
######################################################################

HTUSERS_FILE="${WEBJOB_SERVER_HOME}/config/apache/ht-client"
if [ ! -f "${HTUSERS_FILE}" ] ; then
  echo "${PROGRAM}: Error='Password file (${HTUSERS_FILE}) does not exist.'" 1>&2
  exit 2
fi

NPH_CONFIG_CONFIG_DIR="${WEBJOB_SERVER_HOME}/config/nph-config"
if [ ! -d "${NPH_CONFIG_CONFIG_DIR}" ] ; then
  echo "${PROGRAM}: Error='Override directory (${NPH_CONFIG_CONFIG_DIR}) does not exist.'" 1>&2
  exit 2
fi

NPH_CONFIG_HOST_ACCESS_FILE="${WEBJOB_SERVER_HOME}/config/nph-config/nph-config-hosts.access"
if [ ! -f "${NPH_CONFIG_HOST_ACCESS_FILE}" ] ; then
  echo "${PROGRAM}: Error='Host access file (${NPH_CONFIG_HOST_ACCESS_FILE}) for nph-config.cgi does not exist.'" 1>&2
  exit 2
fi

NPH_WEBJOB_CONFIG_DIR="${WEBJOB_SERVER_HOME}/config/nph-webjob"
if [ ! -d "${NPH_WEBJOB_CONFIG_DIR}" ] ; then
  echo "${PROGRAM}: Error='Override directory (${NPH_WEBJOB_CONFIG_DIR}) does not exist.'" 1>&2
  exit 2
fi

NPH_WEBJOB_HOST_ACCESS_FILE="${WEBJOB_SERVER_HOME}/config/nph-webjob/nph-webjob-hosts.access"
if [ ! -f "${NPH_WEBJOB_HOST_ACCESS_FILE}" ] ; then
  echo "${PROGRAM}: Error='Host access file (${NPH_WEBJOB_HOST_ACCESS_FILE}) for nph-webjob.cgi does not exist.'" 1>&2
  exit 2
fi

WEBJOB_CLIENT_DB="${WEBJOB_SERVER_HOME}/db/mldbm/client.db"
if [ ! -f "${WEBJOB_CLIENT_DB}" ] ; then
  echo "${PROGRAM}: Error='Client DB (${WEBJOB_CLIENT_DB}) does not exist.'" 1>&2
  exit 2
fi

WEBJOB_DYNAMIC_DIR="${WEBJOB_SERVER_HOME}/dynamic"
if [ ! -d "${WEBJOB_DYNAMIC_DIR}" ] ; then
  echo "${PROGRAM}: Error='Dynamic directory (${WEBJOB_DYNAMIC_DIR}) does not exist.'" 1>&2
  exit 2
fi

WEBJOB_GROUP_FILE="${WEBJOB_SERVER_HOME}/config/jqd/groups"
if [ ! -f "${WEBJOB_GROUP_FILE}" ] ; then
  echo "${PROGRAM}: Error='Group file (${WEBJOB_GROUP_FILE}) does not exist.'" 1>&2
  exit 2
fi

WEBJOB_INCOMING_DIR="${WEBJOB_SERVER_HOME}/incoming"
if [ ! -d "${WEBJOB_INCOMING_DIR}" ] ; then
  echo "${PROGRAM}: Error='Incoming directory (${WEBJOB_INCOMING_DIR}) does not exist.'" 1>&2
  exit 2
fi

WEBJOB_JQD_DIR="${WEBJOB_SERVER_HOME}/spool/jqd"
if [ ! -d "${WEBJOB_JQD_DIR}" ] ; then
  echo "${PROGRAM}: Error='JQD directory (${WEBJOB_JQD_DIR}) does not exist.'" 1>&2
  exit 2
fi

WEBJOB_PROFILES_DIR="${WEBJOB_SERVER_HOME}/profiles"
if [ ! -d "${WEBJOB_PROFILES_DIR}" ] ; then
  echo "${PROGRAM}: Error='Profiles directory (${WEBJOB_PROFILES_DIR}) does not exist.'" 1>&2
  exit 2
fi

######################################################################
#
# Do some work.
#
######################################################################

for CLIENT_ID in ${@} ; do

  ####################################################################
  #
  # Do a sanity check on the client ID.
  #
  ####################################################################

  MY_CLIENT_ID_OK=`echo ${CLIENT_ID} | perl -n -e 'if ($_ =~ /^(?:[A-Za-z](?:(?:[0-9A-Za-z]|[_-](?=[^.]))){0,62})(?:[.][A-Za-z](?:(?:[0-9A-Za-z]|[_-](?=[^.]))){0,62}){0,127}$/) { print "pass\n"; } else { print "fail\n"; }'`

  if [ x"${MY_CLIENT_ID_OK}" != x"pass" ] ; then
    echo "${PROGRAM}: Error='Client ID (${CLIENT_ID}) does not pass muster. The profile will not be deleted.'" 1>&2
    continue
  fi

  ####################################################################
  #
  # Remove the client's password entry.
  #
  ####################################################################

  if [ -f "${HTUSERS_FILE}" ] ; then
    egrep "^${CLIENT_ID}:" ${HTUSERS_FILE} > /dev/null 2>&1 &&
    {
      MY_RESULT=`htpasswd -D ${HTUSERS_FILE} ${CLIENT_ID} 2>&1`
      if [ $? -ne 0 ] ; then
        MY_ERROR=`echo ${MY_RESULT} | tr -s -d '\n' ' '`
        echo "${PROGRAM}: Error='${MY_ERROR}'" 1>&2
      fi
    }
  fi

  ####################################################################
  #
  # Remove the client's profile directory.
  #
  ####################################################################

  MY_CLIENT_DIR="${WEBJOB_PROFILES_DIR}/${CLIENT_ID-unknown}"
  if [ -d ${MY_CLIENT_DIR} ] ; then
    rm -rf ${MY_CLIENT_DIR}
  fi

  ####################################################################
  #
  # Remove the client's dynamic directory.
  #
  ####################################################################

  MY_DYNAMIC_DIR="${WEBJOB_DYNAMIC_DIR}/${CLIENT_ID-unknown}"
  if [ -d ${MY_DYNAMIC_DIR} ] ; then
    rm -rf ${MY_DYNAMIC_DIR}
  fi

  ####################################################################
  #
  # Remove the client's incoming directory.
  #
  ####################################################################

  MY_INCOMING_DIR="${WEBJOB_INCOMING_DIR}/${CLIENT_ID-unknown}"
  if [ -d ${MY_INCOMING_DIR} ] ; then
    rm -rf ${MY_INCOMING_DIR}
  fi

  ####################################################################
  #
  # Remove the client's nph-config override directories.
  #
  ####################################################################

  for MY_NAME in "clients" ; do
    MY_OVERRIDE_DIR="${NPH_CONFIG_CONFIG_DIR}/${MY_NAME}/${CLIENT_ID-unknown}"
    if [ -d "${MY_OVERRIDE_DIR}" ] ; then
      rm -rf ${MY_OVERRIDE_DIR}
    fi
  done

  ####################################################################
  #
  # Remove the client's nph-webjob override directories.
  #
  ####################################################################

  for MY_NAME in "clients" "queues" ; do
    MY_OVERRIDE_DIR="${NPH_WEBJOB_CONFIG_DIR}/${MY_NAME}/${CLIENT_ID-unknown}"
    if [ -d "${MY_OVERRIDE_DIR}" ] ; then
      rm -rf ${MY_OVERRIDE_DIR}
    fi
  done

  ####################################################################
  #
  # Remove the client's host access list entries.
  #
  ####################################################################

  for HOST_ACCESS_FILE in ${NPH_CONFIG_HOST_ACCESS_FILE} ${NPH_WEBJOB_HOST_ACCESS_FILE} ; do
    if [ -f "${HOST_ACCESS_FILE}" ] ; then
      webjob-cfg-delete-list -f ${HOST_ACCESS_FILE} ${CLIENT_ID}
    fi
  done

  ####################################################################
  #
  # Remove the client from client.db.
  #
  ####################################################################

  if [ -f "${WEBJOB_CLIENT_DB}" ] ; then
    webjob-mldbm-delete-client -d ${WEBJOB_CLIENT_DB} ${CLIENT_ID}
  fi

  ####################################################################
  #
  # Remove the client's queue.
  #
  ####################################################################

  if [ -d "${WEBJOB_JQD_DIR}" ] ; then
    webjob-jqd-delete-queue -q -d ${WEBJOB_JQD_DIR} ${CLIENT_ID}
  fi

  ####################################################################
  #
  # Remove the client from all groups.
  #
  ####################################################################

  if [ -f ${WEBJOB_GROUP_FILE} ] ; then
    for CLIENT_GROUP in `webjob-jqd-list-groups -G ${WEBJOB_GROUP_FILE} ${CLIENT_ID} | sed 's/^.*[|]//; s/,/ /g;'` ; do
      webjob-jqd-update-group -G ${WEBJOB_GROUP_FILE} -m remove -g ${CLIENT_GROUP} ${CLIENT_ID}
    done
  fi

done
