#!/bin/bash
# Rescapp Sudoers run script
# Copyright (C) 2012,2013,2014,2015,2016,2017,2018,2019,2020 Adrian Gibanel Lopez
#
# Rescapp is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Rescapp is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Rescapp.  If not, see <http://www.gnu.org/licenses/>.

source ${RESCAPP_LIB_FILE}

set -x
set -v

# Define a default sudoers file
# 1 parametre = Selected partition
# 2 parametre = Selected user
function rtux_Sudoers () {

  local EXIT_VALUE=1 # Error by default
  local SELECTED_PARTITION="$1"
  local SELECTED_USER="$2"

  local SUDOERS_BACKUP_SUFIX="$(date +%Y_%m_%d_%H_%M_%S)"
  local DEFAULT_SUDOERS_FILE="/etc/sudoers"

  local n_partition=${SELECTED_PARTITION}

  local TMP_MNT_PARTITION=${RESCATUX_ROOT_MNT}/${n_partition}
  local TMP_DEV_PARTITION=/dev/${n_partition}
  local SUDOERS_DIRECTORY="sudoers"
  local SUDOERS_TEMPLATE_FILENAME=\
"${RESCAPP_PLUGINS_PATH}/${SUDOERS_DIRECTORY}/sudoers_template"
  mkdir --parents ${TMP_MNT_PARTITION}
  if $(mount -t auto ${TMP_DEV_PARTITION} ${TMP_MNT_PARTITION} 2> /dev/null)
    then
    if [[ -e ${TMP_MNT_PARTITION}${LINUX_OS_DETECTOR} ]] ; then

      # Backup sudoers - BEGIN
      cp ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE} \
      ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE}_${SUDOERS_BACKUP_SUFIX}
      # Backup sudoers - END
      
      cp ${SUDOERS_TEMPLATE_FILENAME} ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE}
      echo -e -n "\n${SELECTED_USER}\tALL=(ALL:ALL)\tALL\n" >> \
      ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE}
      chmod 440 ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE}
      chown root:root ${TMP_MNT_PARTITION}${DEFAULT_SUDOERS_FILE}
      EXIT_VALUE=$?
	  
    fi # Linux detector was found
    umount ${TMP_MNT_PARTITION};
  fi # Partition was mounted ok

  return ${EXIT_VALUE}

} # function rtux_Chpasswd ()

# TODO: Program check runtime (Maybe to be stolen from bootinfoscript)

# MAIN PROGRAM

SUDOERS_CHANGED_OK_STR="Success! The sudoers file was changed OK! :)"
SUDOERS_NOT_CHANGED_STR="The sudoers file was not changed. Something went wrong! :("
SUDOERS_RUNNING_STR="Regenerating the sudoers file."
WHICH_USER_SUDOERS_STR="Which user do you wish to be the sudo admin?"
SUDOERS_PARTITIONS_NOT_FOUND="No partitions were found or chosen."
SUDOERS_USERS_NOT_FOUND="No GNU/Linux users were found or chosen."

SELECTED_PARTITION=$(rtux_Choose_Linux_partition);

if [ "x${SELECTED_PARTITION}" != "x" ] ; then
  TMP_MNT_PARTITION=${RESCATUX_ROOT_MNT}/${SELECTED_PARTITION}
  TMP_DEV_PARTITION=/dev/${SELECTED_PARTITION}
  mkdir --parents ${TMP_MNT_PARTITION}
  mount -t auto ${TMP_DEV_PARTITION} ${TMP_MNT_PARTITION} 2> /dev/null
    SYSTEM_USERS=$(rtux_User_List "${TMP_MNT_PARTITION}/etc/passwd")
  umount ${TMP_MNT_PARTITION};

  SELECTED_USER=$(rtux_Choose_User ${SYSTEM_USERS});
  if [ "x${SELECTED_USER}" != "x" ] ; then
    if rtux_Run_Show_Progress "${SUDOERS_RUNNING_STR}" rtux_Sudoers ${SELECTED_PARTITION} ${SELECTED_USER}; then
      rtux_Message_Success ${SUDOERS_CHANGED_OK_STR}
    else
      rtux_Message_Failure ${SUDOERS_NOT_CHANGED_STR}
    fi
  else
    rtux_Message_Warning ${SUDOERS_USERS_NOT_FOUND}
    rtux_Message_Failure ${SUDOERS_NOT_CHANGED_STR}
  fi
else
  rtux_Message_Warning ${SUDOERS_PARTITIONS_NOT_FOUND}
  rtux_Message_Failure ${SUDOERS_NOT_CHANGED_STR}
fi

