#!/bin/sh
########################################################################
#
# $Id: webjob-setup-cfgfiles,v 1.12 2012/01/07 08:01:23 mavrik Exp $
#
########################################################################
#
# Copyright 2003-2012 The WebJob Project, All Rights Reserved.
#
########################################################################
#
# Purpose: Deploy/Remove WebJob config files.
#
########################################################################

IFS=' 	
'

PATH=/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin

PROGRAM=`basename $0`

umask 077

######################################################################
#
# MakeCasFile
#
######################################################################

MakeCasFile()
{
  [ -n "$1" ] && cat > $1 <<EOF
REPLACE_WITH_REAL_CAS_FILE_DATA
EOF
}

######################################################################
#
# MakeCrtFile
#
######################################################################

MakeCrtFile()
{
  [ -n "$1" ] && cat > $1 <<EOF
REPLACE_WITH_REAL_CRT_FILE_DATA
EOF
}

######################################################################
#
# MakeKeyFile
#
######################################################################

MakeKeyFile()
{
  [ -n "$1" ] && cat > $1 <<EOF
REPLACE_WITH_REAL_KEY_FILE_DATA
EOF
}

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

Usage()
{
  echo 1>&2
  echo "Usage: ${PROGRAM} [-Cc] [-H webjob-home] [-n common-name] [-P passphrase] [-p password] [-u username] -a {deploy|remove} -i client-id -s server" 1>&2
  echo 1>&2
  exit 1
}

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

ACTION=

USE_CERTIFICATES=Y

CLIENT_ID=

COMMON_NAME=

PASSPHRASE=

PASSWORD=webjob_config

SERVER=

USERNAME=webjob_config

while getopts "a:CcH:i:n:P:p:s:u:" OPTION ; do
  case "${OPTION}" in
  a)
    case `echo "${OPTARG}" | tr '[:upper:]' '[:lower:]'` in
    deploy) ACTION=deploy ;;
    remove) ACTION=remove ;;
    *) Usage ;;
    esac
    ;;
  C)
    USE_CERTIFICATES=N
    ;;
  c)
    USE_CERTIFICATES=Y
    ;;
  H)
    WEBJOB_HOME="${OPTARG}"
    ;;
  i)
    CLIENT_ID="${OPTARG}"
    ;;
  n)
    COMMON_NAME="${OPTARG}"
    ;;
  P)
    PASSPHRASE="${OPTARG}"
    ;;
  p)
    PASSWORD="${OPTARG}"
    ;;
  s)
    SERVER="${OPTARG}"
    ;;
  u)
    USERNAME="${OPTARG}"
    ;;
  *)
    Usage
    ;;
  esac
done

if [ ${OPTIND} -le $# ] ; then
  Usage
fi

if [ -z "${ACTION}" -o -z "${CLIENT_ID}" -o -z "${SERVER}" ] ; then
  Usage
fi

if [ -z "${COMMON_NAME}" ] ; then
  COMMON_NAME=${SERVER}
fi

if echo "${CLIENT_ID}" | egrep '[^0-9A-Za-z_-]' ; then
  echo "${PROGRAM}: Error='ClientId (${CLIENT_ID}) contains invalid characters.'" 1>&2
  exit 2
fi

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

CAS_FILE=${WEBJOB_HOME}/run/webjob_config_cas.pem
CRT_FILE=${WEBJOB_HOME}/run/webjob_config_crt.pem
KEY_FILE=${WEBJOB_HOME}/run/webjob_config_key.pem

if [ ${USE_CERTIFICATES} = "Y" ] ; then
  trap "rm -f ${CAS_FILE} ${CRT_FILE} ${KEY_FILE} ; exit 2" 1 2 15
  MakeCasFile "${CAS_FILE}"
  MakeCrtFile "${CRT_FILE}"
  MakeKeyFile "${KEY_FILE}"
  PEM_ERRORS=0
  for PEM_FILE in "${CAS_FILE}" "${CRT_FILE}" "${KEY_FILE}" ; do
    if [ ! -r ${PEM_FILE} ] ; then
      PEM_ERRORS=1
      echo "${PROGRAM}: Error='PEM file (${PEM_FILE}) does not exist or is not accessible.'" 1>&2
    fi
  done
  if [ ${PEM_ERRORS} -eq 1 ] ; then
    rm -f ${CAS_FILE} ${CRT_FILE} ${KEY_FILE}
    exit 2
  fi
fi

webjob -e -f - webjob-${ACTION}-config --${ACTION} -C ${WEBJOB_HOME}/etc <<EOF
ClientId=${CLIENT_ID}
URLGetURL=https://${SERVER}/cgi-client/nph-webjob.cgi
URLPutURL=https://${SERVER}/cgi-client/nph-webjob.cgi
URLAuthType=basic
URLUsername=${USERNAME}
URLPassword=${PASSWORD}
OverwriteExecutable=Y
TempDirectory=${WEBJOB_HOME}/run
UnlinkExecutable=Y
UnlinkOutput=Y
GetTimeLimit=14400
RunTimeLimit=14400
PutTimeLimit=14400
SSLUseCertificate=${USE_CERTIFICATES}
SSLPublicCertFile=${CRT_FILE}
SSLPrivateKeyFile=${KEY_FILE}
SSLVerifyPeerCert=${USE_CERTIFICATES}
SSLBundledCAsFile=${CAS_FILE}
SSLExpectedPeerCN=${COMMON_NAME}
SSLMaxChainLength=2
SSLPassPhrase=${PASSPHRASE}
EOF

if [ ${STATUS=$?} -ne 0 ] ; then
  case "${STATUS}" in
    1) FAILURE="XER_Usage" ;;
    2) FAILURE="XER_Abort" ;;
    3) FAILURE="XER_BootStrap" ;;
    4) FAILURE="XER_ProcessArguments" ;;
    5) FAILURE="XER_ReadProperties" ;;
    6) FAILURE="XER_CheckDependencies" ;;
    7) FAILURE="XER_Configure" ;;
    8) FAILURE="XER_GetStage" ;;
    9) FAILURE="XER_RunStage" ;;
   10) FAILURE="XER_PutStage" ;;
   11) FAILURE="XER_MultiStage" ;;
    *) FAILURE="${STATUS}" ;;
  esac
  echo "${PROGRAM}: Error='WebJob failed (${FAILURE}).'" 1>&2
  if [ ${USE_CERTIFICATES} = "Y" ] ; then
    rm -f ${CAS_FILE} ${CRT_FILE} ${KEY_FILE}
  fi
  exit 2
fi

if [ ${USE_CERTIFICATES} = "Y" ] ; then
  rm -f ${CAS_FILE} ${CRT_FILE} ${KEY_FILE}
fi

exit 0

