# Created by Pasindu Epa <pasindu.epa@monash.edu> on 16/08/2021
# Modified by Pasindu Epa <pasindu.epa@monash.edu> on 20/07/2025
#!/bin/bash
PROJECT_NAME="A1-PortScanning"
PROJECT_SAVE_AS=${PROJECT_NAME}
DOWNLOAD_AS="/opt/gns3/projects/${PROJECT_NAME}.tar.xz"
PROJECTS_DIR="/opt/gns3/projects"
GDOWN_LOCATION="/home/gns3/.local/bin/gdown"
CURRENT_PID="50CDABAAF29E"	# The last 12 hex digits of the project ID
PROJECT_URL="https://sniffnrun.com/A1-PortScanning.tar.xz"

# Increment project directory name if exists
n=1
if [ -d "${PROJECTS_DIR}/${PROJECT_NAME}" ]
then
while [ -d "${PROJECTS_DIR}/${PROJECT_NAME}_${n}" ] ; do
n=$(($n+1))
done
PROJECT_SAVE_AS="${PROJECT_NAME}_${n}"
fi

#Download Project
echo "Downloading project:"
wget ${PROJECT_URL} -O ${DOWNLOAD_AS} -q --show-progress --progress=bar:force --no-check-certificate
#sudo -u gns3 bash -c wget "${PROJECT_URL}' -O '${DOWNLOAD_AS}' --show-progress --no-check-certificate"

#Extracting project
echo "Extracting project:"
mkdir "${PROJECTS_DIR}/${PROJECT_SAVE_AS}"
tar -xf ${DOWNLOAD_AS} -C "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/" --checkpoint=.1000 --warning=no-timestamp

#Move Files
mv "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_NAME}"/* "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/"
rmdir "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_NAME}/" 
mv "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_NAME}.gns3" "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_SAVE_AS}.gns3"
rm ${DOWNLOAD_AS}
#Change project permissions and ownership
chmod 775 -R "${PROJECTS_DIR}/${PROJECT_SAVE_AS}"
chown -R $SUDO_USER:$SUDO_USER "${PROJECTS_DIR}/${PROJECT_SAVE_AS}"

#Update Project ID
NEW_PID=$(xxd -u -l 6 -p /dev/urandom)
sed -i "s/${CURRENT_PID}/${NEW_PID}/" "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_SAVE_AS}.gns3"
sed -i "s/${PROJECT_NAME}/${PROJECT_SAVE_AS}/" "${PROJECTS_DIR}/${PROJECT_SAVE_AS}/${PROJECT_SAVE_AS}.gns3"
printf '%s\n'
echo "${PROJECT_NAME} project was successfully installed as ${PROJECT_SAVE_AS}."
printf '%s\n'

#Restart GNS3 Service
service gns3 stop
service gns3 start

#Deleting the script itself"
rm "$0"
