#!/bin/sh
#
# linbo_register
# thomas@linuxmuster.net
# 20250423
#


usage(){
  RC="$1"
  echo "Registers current client on the server."
  echo
  echo "Usage:"
  echo "  linbo_register <password> <room> <name> <ip> <group> [role] | [help]"
  echo
  echo "Default value for role is \"classroom-studentcomputer\". <clientip> can be"
  echo "\"DHCP\". The username is fixed to \"linbo\"."
  echo
  exit "$RC"
}


# print help
[ -z "$1" -o "$1" = "help" ] && usage 0

# get environment
source /usr/share/linbo/shell_functions

# check variables
if [ "$MACADDR" = "OFFLINE" -o -z "$MACADDR" ]; then
  echo "Client is offline!"
  usage 1
fi

# check params with legacy compatibility (serverip user password room ...)
if [ -z "$1" ] || validip "$1"; then shift; fi
[ -z "$1" -o "$1" = "linbo" ] && shift
USERNAME="linbo"
export RSYNC_PASSWORD="$1"
shift
echo "### $timestamp $(basename "$0") $@ ###"
[ "$1" = "linbo" ] && shift                                                        
[ "$1" = "$LINBOSERVER" ] && shift                                                 
if validhostname "$1"; then                                                        
  ROOM="$1"                                                                        
  shift                                                                            
else                                                                               
  echo "Room name $1 is not valid!"                                                
  usage 1                                                                          
fi                                                                                 
if validhostname "$1"; then                                                        
  CLIENTNAME="$1"                                                                  
  shift                                                                            
else                                                                      
  echo "Client name $1 is not valid!"                                     
  usage 1                                                                 
fi                                                                        
if [ "$1" = "DHCP" ] || validip "$1"; then                                
  CLIENTIP="$1"                                                           
  shift                                                                   
else                                                                      
  echo "Client ip $1 is not valid!"                                       
  usage 1                                                                 
fi                                                                        
if validhostname "$1"; then                                               
  HOSTGROUP="$1"                                                          
  shift                                                                   
else                                                                      
  echo "Hostgroup name $1 is not valid!"                                  
  usage 1                                                                 
fi                                                                        
if validhostname "$1"; then                                               
  ROLE="$1"                                                               
else                                                                      
  ROLE="classroom-studentcomputer"             
fi                                             

csvline="$ROOM;$CLIENTNAME;$HOSTGROUP;$MACADDR;$CLIENTIP;;;;$ROLE;;1"

echo "$csvline" > "/tmp/${CLIENTNAME}.new"

echo "Uploading ${CLIENTNAME}.new to $LINBOSERVER ..."
interruptible rsync --skip-compress="$RSYNC_SKIP_COMPRESS" --progress -HaP "/tmp/${CLIENTNAME}.new" "${USERNAME}@${LINBOSERVER}::linbo-upload/${CLIENTNAME}.new"

exit "$?"
