#!/usr/bin/env bash

set -eux

DIRECTORY="/tmp/test"


# FreeBSD NFSv4 ACLs:
# => https://docs.freebsd.org/en/books/handbook/security/#fs-acl
# => https://man.freebsd.org/cgi/man.cgi?query=setfacl&sektion=1&format=html


# ======Initialise ==========================================================
mkdir -p "${DIRECTORY}"
rm -rf "${DIRECTORY}/data" "${DIRECTORY}/good" "${DIRECTORY}/bad"
mkdir -p "${DIRECTORY}/data" "${DIRECTORY}/good" "${DIRECTORY}/bad"
sudo chown -R hipercontracer:hipercontracer "${DIRECTORY}/data" "${DIRECTORY}/good" "${DIRECTORY}/bad"
if [ "$(uname)" != "FreeBSD" ] ; then
   sudo setfacl -Rm d:u:hipercontracer:rwx,u:hipercontracer:rwx "${DIRECTORY}/data" "${DIRECTORY}/good" "${DIRECTORY}/bad"
else
   sudo setfacl -Rm u:hipercontracer:modify_set:file_inherit/dir_inherit:allow,g:hpct-nodes:read_set:file_inherit/dir_inherit:allow \
      "${DIRECTORY}/data" "${DIRECTORY}/good" "${DIRECTORY}/bad"
fi
for n in 9000 9001 9002 9003 ; do
   if [ "$(uname)" != "FreeBSD" ] ; then
      userdel "node$n" || true
   else
      pw userdel "node$n" || true
   fi
   rm -rf "${DIRECTORY}/data/node$n"
   mkdir "${DIRECTORY}/data/node$n"
   if [ "$(uname)" != "FreeBSD" ] ; then
      useradd -M -d "${DIRECTORY}/data/node$n" -s /bin/sh -c "Node $n" "node$n"
   else
      pw useradd "node$n" -d "${DIRECTORY}/data/node$n" -s /bin/sh -c "Node $n"
   fi

   chown "node$n:node$n" "${DIRECTORY}/data/node$n"
   chmod 700 "${DIRECTORY}/data/node$n"

   if [ "$(uname)" != "FreeBSD" ] ; then
      sudo setfacl -Rm d:u:hipercontracer:rwx,u:hipercontracer:rwx "${DIRECTORY}/data/node$n"
   else
      sudo setfacl -Rm u:hipercontracer:modify_set:file_inherit/dir_inherit:allow "${DIRECTORY}/data/node$n"
   fi

   sudo -u "node$n" mkdir -p "${DIRECTORY}/data/node$n/test"
   # sudo -u "node$n" chmod 770 "${DIRECTORY}/data/node$n/test"
   date | sudo -u "node$n" tee >/dev/null "${DIRECTORY}/data/node$n/test/x.txt"
   date | sudo -u "node$n" tee >/dev/null "${DIRECTORY}/data/node$n/test/y.txt"
   date | sudo -u "node$n" tee >/dev/null "${DIRECTORY}/data/node$n/test/z.txt"
done
grep "^node" /etc/passwd



# ====== Some testing =======================================================
for n in 9001 9002 9003 ; do
   if [ $n -eq 9001 ] ; then
      sudo -u "node$n" mkdir -p "${DIRECTORY}/data/node9001/test"
   else
      if sudo -u "node$n" mkdir -p "${DIRECTORY}/data/node9001/test" ; then
         echo "This command must fail, but it did not!"
         exit 1
      fi
   fi
done

for n in 9001 9002 9003 ; do
   sudo -u hipercontracer cat "${DIRECTORY}/data/node$n/test/x.txt"
   sudo -u hipercontracer rm -f "${DIRECTORY}/data/node$n/test/y.txt"
   date | sudo -u hipercontracer tee >/dev/null "${DIRECTORY}/data/node$n/test/h.txt"
   sudo -u hipercontracer mv "${DIRECTORY}/data/node$n/test/x.txt" "${DIRECTORY}/data/node$n/test/i.txt"
   sudo -u hipercontracer mv "${DIRECTORY}/data/node$n/test/i.txt" "${DIRECTORY}/good/i-$n.txt"
done

ls -al ${DIRECTORY}/data/


# ====== Clean up ===========================================================
# for n in 9000 9001 9002 9003 ; do
#   if [ "$(uname)" != "FreeBSD" ] ; then
#      userdel "node$n" || true
#   else
#      pw userdel "node$n" || true
#   fi
# done
