#!/bin/bash

### Include ymclibnettools
. /usr/lib/lib-fliwi/ymc-networktools.bash

### Load some configs
. /etc/fliwi-vhost/base.conf

conserver_config_file="/etc/conserver/conserver.cf.fliwi"

my_own_short_hostname=$(hostname -s)

### We always trust ourself
trusted_hosts='127.0.0.1'

## We trust our console-access-hosts
for console_access_host in $(fliwi-get-services --as-hostnames console-access)
do
  if [ $(ymc_contains $console_access_host $trusted_hosts) -eq 0 ]; then
    trusted_hosts=$trusted_hosts' '$console_access_host
  fi
done

### Remove trailing ' '
trusted_hosts=$(echo $trusted_hosts | sed -r 's/[ ]+$//')

### Replace ' ' with ','
trusted_hosts=$(echo $trusted_hosts | sed -r 's/[ ]+/,/g')

### Generate a proper /etc/conserver/conserver.cf.fliwi
echo "# Dynamic conserver.cf(5) file generated by $(basename $0)" > $conserver_config_file
echo "#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" >> $conserver_config_file
cat >> $conserver_config_file <<EOF
config *
{
  sslrequired no;
}

default *
{
  logfile /var/log/conserver/&.log;
  timestamp "";
  rw *;
  master localhost;
  type uds;
  motd "Press '^a c' to toggle between serial- and qemu-console";
}

access * {
        trusted $trusted_hosts;
        limited *;
}

console FLIWI-INFO-$my_own_short_hostname
{
  type noop;
  motd "This is $my_own_short_hostname serving...";
}

EOF


for vserver_config_file in $(find /etc/fliwi-vhost/machines/*.conf)
do
  vserver_name=$(basename $vserver_config_file | sed -r 's/\.conf$//')
  use_conserver=$(cat $vserver_config_file | grep -c -E -e '^fliwi-conserver=enabled')
  if [ $use_conserver -ne 1 ]; then
    echo "NOTE: Skipping conserver-setup '$vserver_name', as usage of conserver is not enabled for it..." 1>&2
    continue
  fi

  serial_console_socket="/var/run/fliwi-vhost/$vserver_name.serial"
  if [ ! -S "$serial_console_socket" ]; then
    echo "NOTE: Skipping conserver-setup '$vserver_name', as no serial socket exists for it..." 1>&2
    continue
  fi

  echo "console $vserver_name" >> $conserver_config_file
  echo '{' >> $conserver_config_file

  services_on_host="$(echo $(fliwi-get-services $vserver_name))"
  if [ -n "$services_on_host" ]; then
    echo "  aliases $(echo $services_on_host | sed -r 's/[[:space:]]+/,/g');" >> $conserver_config_file
  fi

  echo "  uds $serial_console_socket;" >> $conserver_config_file
  echo '}' >> $conserver_config_file
  echo '' >> $conserver_config_file

  echo "NOTE: Added conserver-setup for '$vserver_name'" 1>&2
done

