#!/bin/sh

GREP=/bin/grep
ECHO="/bin/echo"
NECHO="/bin/echo -n"
CP="/bin/cp -p"
MV="/bin/mv"
RM=/bin/rm
AWK=/usr/bin/awk
gettext=/usr/bin/gettext
CUT=/usr/bin/cut
DATE=/bin/date
DOMAINNAME=/bin/domainname
SORT=/bin/sort
MKDIR="/bin/mkdir -p"
LOGDIR=/var/log
RPM=/bin/rpm
TAR=/bin/tar

PATCH_ID=122985-01
BKFILESUFFIX=-pre-$PATCH_ID
OPEN='('
CLOSE=')'
BACKUP_FILENAME="samlv2-1.0-backup$BKFILESUFFIX.gzip"
PRODUCT_DIR=identity
CONFIG_DIR=/etc/opt/sun/identity/config
AMCONFIG=$CONFIG_DIR/AMConfig.properties
LOGSUFFIX=`$DATE '+%m%d%H%M'`
LOG=$LOGDIR/Sun_Java_System_Access_Manager_upgrade_log.$LOGSUFFIX


############################################################
# check os . if not linux then exit script
############################################################
check_os() {
  OS=`uname`
  if [ "$OS" != "Linux" ]; then
    eval $ECHO "`$gettext 'This patch can be applied to Linux system only.'`"
    exit 1
  fi
}

############################################################
# test for root user
############################################################
check_root_user() {
  if test `id | $AWK '{print $1}'` != "uid=0(root)"
  then
    eval $ECHO "`$gettext 'You must be root user to run $0.'`"
    exit 1
  fi
}

############################################################
# get basedir
############################################################
get_base_dir() {
  if [ ! -f $AMCONFIG ]; then
    eval $ECHO "`$gettext 'ERROR: ${AMCONFIG} does not exist! can not apply patch'`"
    exit 1
  fi
 
  $CP $AMCONFIG /tmp/.
  BASEDIR=`grep com.iplanet.am.installdir= $AMCONFIG \
      | sed -e 's/\/identity//g' | sed -e 's/com.iplanet.am.installdir=//g'`
  INSTALL_DIR=$BASEDIR/$PRODUCT_DIR
}

############################################################
# get backup directory
############################################################
get_backup_dir() {
  eval $NECHO "`$gettext 'Enter directory to store back up files ${OPEN} $BACKUP_DIR ${CLOSE}: ${OMIT}'`"
  read BACKUP_DIR
  if [ "$BACKUP_DIR" = "" ]; then
    BACKUP_DIR="$BASEDIR"
    eval $ECHO "`$gettext 'Backup files will be stored in ${BASEDIR}'`"
  fi

  if [ ! -d $BACKUP_DIR ]; then
    $MKDIR $BACKUP_DIR
  elif [ $BACKUP_DIR != $BASEDIR ]; then
    eval $ECHO "`$gettext '${BACKUP_DIR} exists, content will be overwritten'`" 
  fi

  $ECHO BACKUP_DIR=$BACKUP_DIR >> $LOG
}

##############################################################
# copies the named file to a backup copy
##############################################################
backupFile() {
  file=$1

  if [ ! -f $file ]; then
    $ECHO "Can not backup $file as it does not exist!"
    return
  fi

  base=`basename $file`
  if [ ! -f $BACKUP_DIR/$base$BKFILESUFFIX ]; then
    $ECHO "Backing up $file"
    $CP $file $BACKUP_DIR/$base$BKFILESUFFIX
  fi
}

##############################################################
# backup all files that were modified by the patch
##############################################################
backup_files() {
  backupFile $INSTALL_DIR/saml2/locale/fmSAML2.properties
  backupFile $INSTALL_DIR/saml2/lib/version
  backupFile $INSTALL_DIR/saml2/lib/saml2util
  backupFile $INSTALL_DIR/saml2/lib/saml2.jar
  backupFile $INSTALL_DIR/saml2/idpdiscovery.war
  backupFile $INSTALL_DIR/saml2/docs/saml2_public_javadocs.jar
  backupFile $INSTALL_DIR/saml2/config/jsp/spSingleLogoutRedirect.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/spSingleLogoutInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/spSSOInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/spMNIRequestInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/spMNIRedirect.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/idpSingleLogoutRedirect.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/idpSingleLogoutInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/idpSSOInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/idpMNIRequestInit.jsp
  backupFile $INSTALL_DIR/saml2/config/jsp/idpMNIRedirect.jsp
  backupFile $INSTALL_DIR/saml2/bin/saml2setup
}

##############################################################
## main
##############################################################
check_os
check_root_user
get_base_dir
get_backup_dir
backup_files

## backup files under BASE_DIR
if [ -d $INSTALL_DIR ]; then
  $ECHO "Backing up whole $INSTALL_DIR/saml2 directory ..."
  $TAR cfzP $BACKUP_DIR/${BACKUP_FILENAME} $INSTALL_DIR/saml2
fi
