#!/bin/bash
#scvusermigrate 2022/09/01
#Copyright J's Communication Co., Ltd.
#========================================
PROGNAME="scvusermigrate"
PROGVER="4.0.1"
DB_DIR="/var/www/html/scv/.env"
SQL="scvsqle -exec "
LOG_DIR="/home/scvadmin/scvusermigrate"
LOG_FILE="usermigratelog`date "+%Y%m%d"`.log"
BCK_DIR="/home/scvadmin/scvusermigrate/ORG"
FLG=0

#----------------------------------------
usage(){
cat << EOF
$PROGNAME $PROGVER
This program is a program for shifting from the
old authentication mode to the new authentication mode.
Usage:
  $PROGNAME -migration [none/1/2]   #Transition from old authmode to new authmode(1=Kerberos, 2=Ldap)
  $PROGNAME -v                      #show verion of this
EOF

#  echo "$PROGNAME $PROGVER"
#  echo "This program is a program for shifting from the old authentication mode to the new authentication mode."
#  echo "Usage:"
#  echo "  $PROGNAME -migration   #Transition from old authmode to new authmode"
#  echo "  $PROGNAME -v           #show verion of this"
exit 1
}

#----------------------------------------
sure() {
  echo "Are you sure to continue? [y/N]"
  read ANSWER
  case $ANSWER in
    "Y" | "y" | "yes" | "Yes" | "YES" )  : ;;
    * ) echo "command canceled!"; exit 0 ;;
  esac
}

#----------------------------------------
logdircheck() {
  if [ ! -e "$LOG_DIR" ];then
    mkdir /home/scvadmin/scvusermigrate
    errcheck $? "mkdir(scvusermigrate)"
  fi
  if [ ! -e "$LOG_DIR/LOG" ];then
    mkdir $LOG_DIR/LOG
    errcheck $? "mkdir(scvusermigrate/LOG)"
  fi
  if [ ! -e "$BCK_DIR" ];then
    mkdir $BCK_DIR
    errcheck $? "mkdir(scvusermigrate/ORG)"
  fi
  LOG_DIR="$LOG_DIR/LOG"
}

#----------------------------------------
homedir() {
  IDDIR=`echo $(($1 / 10000))`
  CMD_OPT=""
#rootでなければ以下通らない(/home/scvrun/.scvusers/$IDDIR が見えない)
  if [ -e "$2" ];then
    if [ ! -e "/home/scvrun/.scvusers/$IDDIR" ];then
      mkdir /home/scvrun/.scvusers/$IDDIR
      errcheck $? "mkdir(.scvusers/$IDDIR)" "log"
    fi
    CMD="cp -aT $2 /home/scvrun/.scvusers/$IDDIR/$1"
    eval $CMD
    errcheck $? "cp(.scvusers/$IDDIR/$1)" "log"

    chown -R scvrun:scvrun /home/scvrun/.scvusers/$IDDIR/$1
    errcheck $? "chown(scvrun:scvrun)" "log"

    sudo mv "$2" "$BCK_DIR"
    errcheck $? "backup(mv,$2,$BCK_DIR)" "log"
  fi
}

#----------------------------------------
errcheck() {
  if [ $1 -eq 1 ];then
    if [ -z "$3" ];then
      echo "ERROR : $2" ; continue
    else
      echo "ERROR : $2" | tee -a "$LOG_DIR/$LOG_FILE"
    fi
  elif [ $1 -eq 0 ];then
    if [ -z "$3" ];then
      echo "OK : $2"
    else
      echo "OK : $2" | tee -a "$LOG_DIR/$LOG_FILE"
    fi
  fi
}

#----------------------------------------
#ここからスタート
#----------------------------------------

if [ `echo "\`whoami\`"` = "root" ];then
  :
else
  echo "Please sudo : sudo ./scvusermigrate";exit
fi

if [ $# -ne 0 ];then
  if [ $1 = "-v" ];then
    echo $PROGVER
    exit 0
  elif [ $1 = "-migration" ];then    
    sure
    logdircheck

    scvbackup scvrestore

    if [ ! -z "$2" ];then
      if [ "$2" == "1" ];then
        FLG=1
      elif [ "$2" == 2 ];then
        FLG=2
      fi
    fi

    echo "-------------------------------------------------------" | tee -a "$LOG_DIR/$LOG_FILE"
    echo "usermigrate.log $PROGVER  `date "+%Y/%m/%d %H:%M:%S"`" | tee -a "$LOG_DIR/$LOG_FILE"
    echo "-------------------------------------------------------" | tee -a "$LOG_DIR/$LOG_FILE"

    SQL_NULL="$SQL \"select id,name from scv.scvusers where password is null or password=''\""
    PWD_NULL=`eval "$SQL_NULL" 2>/dev/null | sed -e '1d' | grep -v 'scvtemplate'`

    # 1.DB Check
    if [ -z "$PWD_NULL" ];then
      echo "command complete!!(scvusers not null(DB))" | tee -a "$LOG_DIR/$LOG_FILE"
      exit
    fi
    echo "$PWD_NULL" | while read LINE
    do
      USRID=`echo "$LINE" | awk '{print$1}'`
      USRNAME=`echo "$LINE" | awk '{print$2}'`

      if [ $FLG -eq 1 -o $FLG -eq 2 ];then
        homedir "$USRID" "/home/$USRNAME"
        homedir "$USRID"  "/home/scvrun/.scvusers/$USRNAME"
        if [ $FLG -eq 1 ];then
          userdel -r $USRNAME 2>/dev/null
        fi
        errcheck $? "deleteuser($USRNAME)" "log"
      else
        PWD_HASH_CMD="cat /etc/shadow | grep -w \"$USRNAME\" | cut -d ':' -f 2"
        PWD_HASH=`eval "$PWD_HASH_CMD"`

        # 2.shadow Check
        if [ ! -z "$PWD_HASH" ];then
          MGR_USR=`cat "$DB_DIR" | grep 'DB_USERNAME' | sed -e 's/DB_USERNAME=//g' | tr -d "'"`
          MGR_PWD=`cat "$DB_DIR" | grep 'DB_PASSWORD' | sed -e 's/DB_PASSWORD=//g' | tr -d "'"`

         mysql -u "$MGR_USR" -p"$MGR_PWD" -e "update scv.scvusers set password='$PWD_HASH' where name='$USRNAME'" 2>/dev/null
         errcheck $? "mysql(password_update-$USRNAME)" "log"

          # 3.dir Check
          if [ $? -eq 0 ];then
            homedir "$USRID" "/home/$USRNAME"
            homedir "$USRID"  "/home/scvrun/.scvusers/$USRNAME"
            userdel -r $USRNAME 2>/dev/null
            errcheck $? "deleteuser($USRNAME)" "log"
          else
            echo "ERROR : DB(update_error-$USRNAME)" | tee -a "$LOG_DIR/$LOG_FILE"
          fi
        else
          echo "ERROR : HASH(is_NULL-$USRNAME:$PWD_HASH)" | tee -a "$LOG_DIR/$LOG_FILE"
        fi
      fi
      echo "=  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =" | tee -a "$LOG_DIR/$LOG_FILE"
    done
    echo "command complete!!(success)" | tee -a "$LOG_DIR/$LOG_FILE"
    exit
  else
    usage
  fi
else
  usage
fi

#eof
