#!/bin/bash
. /usr/share/debconf/confmodule
# Zimbra Talk - fetch domain data from ldap-host
# by Stefan Sänger <stefan.saenger@vnc.biz>
#set -x
function print_usage() {
   echo "
update / generate prosody configs from zimbra ldap
usage: update-prosody-conf

   "
   exit 1
}

function die_err() {
        echo "$0: $*" >&2
        exit 1
}


function initfetch() {
   [ "$(whoami)" = "root" ] || die_err "please run as root or with sudo"
   [ "$(which crudini)" ] || die_err "crudini not found in path - please install crudini (apt-get install crudini)"
   [ "$(which perl)" ] || die_err "perl not found in path - please install perl (apt-get install perl)"
   [ "$(which ldapsearch)" ] || die_err "ldapsearch not found in path - please install ldap-utils (apt-get install ldap-utils)"
   ldaphost=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'LDAPHOST')
   [ "$ldaphost" ] || die_err "ldap hostname not configured"

   ldappw=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'LDAPBINDPASS')
   [ "$ldappw" ] || die_err "ldap bind password not configured"

   ldapdn=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'LDAPBINDDN')
   [ "$ldapdn" ] || die_err "ldap BIND DN not configured"

   ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraGlobalConfig)" | grep "zimbraDefaultDomainName:"
   [ "$?" = "0" ] || die_err "could not connect to LDAP - aborting..."

   TURN_HOST=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'TURN_HOST')
   TURN_PORT=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'TURN_PORT')
   EXTERNAL_LOGIN_FULL_DOMAIN=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'EXTERNAL_LOGIN_FULL_DOMAIN')
   PROSODY_FULL_HOSTNAME=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'PROSODY_FULL_HOSTNAME')
   PROSODY_CONFERENCE_FULL_HOSTNAME=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'PROSODY_CONFERENCE_FULL_HOSTNAME')
   MIDDLEWARE_MIDDLEWARE_ZIMBRA_HOST=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'MIDDLEWARE_MIDDLEWARE_ZIMBRA_HOST')
   MIDDLEWARE_ZIMBRA_ADMIN_PASSWD=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'MIDDLEWARE_ZIMBRA_ADMIN_PASSWD')
   MIDDLEWARE_APPNAME=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'MIDDLEWARE_APPNAME')
   PROSODY_ADMIN1=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'PROSODY_ADMIN1')
   PROSODY_ADMIN2=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'PROSODY_ADMIN2')


   MIDDLEWARE_URL="http://$MIDDLEWARE_MIDDLEWARE_ZIMBRA_HOST/VNCMiddleware/rest"

   TalkServerDomain=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'TalkServerDomain')
   zimbraDefaultDomainName=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'zimbraDefaultDomainName')
   AUTHENTICATION_SHARED_SECRET=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'AUTHENTICATION_SHARED_SECRET')
   MUC_COMPONENT_SECRET=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'MUC_COMPONENT_SECRET')
   TURN_CREDENTIALS=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'TURN_CREDENTIALS')
   GlobalSOAPURL=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'ZIMBRA_URL')

}

function fetchDefaultDomain() {

   DefaultDomain=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraGlobalConfig)" | perl -p00e 's/\r?\n //g' | grep "zimbraDefaultDomainName:" | awk '{print $2}')
   [ "$?" = "0" ] || die_err "could not connect to LDAP - aborting..."
   if [ "$DefaultDomain" = "$CDefaultDomain" ]; then
      echo "dafult domain is still: $DefaultDomain"
   fi
   if [ -z "$CDefaultDomain" ]; then
      crudini --set /etc/ztalk/domains.cfg "GLOBAL" "DefaultDomain"
   fi
}

function update-ini-domains() {
   GlobalINIZURL=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg 'global' 'ZIMBRA_URL')

   zimbraPublicServiceHostname=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraGlobalConfig)" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServiceHostname" | awk '{print $2}')
   if [ -n "$zimbraPublicServiceHostname" ]; then
      zimbraPublicServiceProtocol=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraGlobalConfig)" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServiceProtocol" | awk '{print tolower($2)}')
      [ -n "$zimbraPublicServiceProtocol" ] || zimbraPublicServiceProtocol="https"
      zimbraPublicServicePort=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraGlobalConfig)" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServicePort" | awk '{print $2}')
   else
      zimbraPublicServiceHostname=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(&(objectClass=zimbraServer)(zimbraReverseProxyHttpEnabled=TRUE))" | perl -p00e 's/\r?\n //g' | grep "^cn:" | awk '{print $2}' | head -1)
      zimbraPublicServiceProtocol="https"
   fi

   if [ -z "$zimbraPublicServicePort" ]; then
      GlobalZURL="$zimbraPublicServiceProtocol://$zimbraPublicServiceHostname"
   else
      GlobalZURL="$zimbraPublicServiceProtocol://$zimbraPublicServiceHostname:$zimbraPublicServicePort"
   fi

   if [ "$GlobalINIZURL" != "$GlobalZURL" ]; then
      crudini --set /etc/zimbra-talk/talk.defaults.cfg 'global' 'ZIMBRA_URL' "$GlobalZURL"
   fi


   INIDOMAINS=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg | grep "^domain:" | awk -F ":" '{print $2}')
   LDAPDOMAINS=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(objectClass=zimbraDomain)" | perl -p00e 's/\r?\n //g' | grep "^zimbraDomainName:" |  awk '{print $2}')

   #for TDOMAIN in $INIDOMAINS; do
   #   if [[ "$TDOMAIN" != *"$LDAPDOMAINS"* ]]; then
   #      #delete domain from ini file
   #      crudini --del /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN"
   #   fi
   #done

   echo "updating domains in ini from ldap"
   echo "$LDAPDOMAINS" | cat -s | while IFS= read -r  TDOMAIN
   do
      rosterfilter=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" "RosterFilter" 2>/dev/null)
      if [ -z "$rosterfilter" ]; then
         rosterfilter="$DefaultRosterFilter"
      fi
      crudini --set /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" "RosterFilter" "$rosterfilter"
      echo "updated Rosterfilter for Domain $TDOMAIN"
      ZTEST=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(&(objectClass=zimbraDomain)(zimbraDomainName=$TDOMAIN))" | perl -p00e 's/\r?\n //g' | grep "^zimbraPreAuthKey:" | awk '{print $2}')
      if [ -n "$ZTEST" ]; then
         crudini --set /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" 'zimbraPreAuthKey' "$ZTEST"
         crudini --set /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" 'RosterFilter' "$rosterfilter"
      else
         #delete domain from ini file
         crudini --del /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN"
      fi

      IniDomainURL=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" 'ZIMBRA_URL') 2>/dev/null
      IniDomainURLMode=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" 'ZIMBRA_URL_MODE') 2>/dev/null
      if [ -z "$IniDomainURLMode" ]; then
         IniDomainURLMode="auto"
      fi
      zimbraPublicServiceHostname=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(&(objectClass=zimbraDomain)(zimbraDomainName=$TDOMAIN))" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServiceHostname" | awk '{print $2}')
      if [ -n "$zimbraPublicServiceHostname" ]; then
         zimbraPublicServiceProtocol=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(&(objectClass=zimbraDomain)(zimbraDomainName=$TDOMAIN))" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServiceProtocol" | awk '{print tolower($2)}')
         if [ -z "$zimbraPublicServiceProtocol" ]; then zimbraPublicServiceProtocol="https" ; fi
         zimbraPublicServicePort=$(ldapsearch -x -D "$ldapdn" -w "$ldappw" -H "ldap://$ldaphost:389" "(&(objectClass=zimbraDomain)(zimbraDomainName=$TDOMAIN))" | perl -p00e 's/\r?\n //g' | grep "zimbraPublicServicePort" | awk '{print $2}')
         if [ -n "$zimbraPublicServicePort" ]; then
            LDZURL="$zimbraPublicServiceProtocol://$zimbraPublicServiceHostname:$zimbraPublicServicePort"
         else
            LDZURL="$zimbraPublicServiceProtocol://$zimbraPublicServiceHostname"
         fi
      else
         LDZURL="$GlobalSOAPURL"
      fi
      if [ "$IniDomainURLMode" = "auto" ]; then
         if [ "$IniDomainURL" != "$LDZURL" ]; then
            crudini --set /etc/zimbra-talk/talk.defaults.cfg "domain:$TDOMAIN" 'ZIMBRA_URL' "$LDZURL"
         fi
      fi
   done
}

function update-prosody-from-ini() {
   #handle default domain
   cp /usr/share/ztalk/conf.templates/prosody-virtual-host.cfg.lua.template "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/XMPP_FULL_DOMAIN/$zimbraDefaultDomainName/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/PROSODY_ADMIN1/$PROSODY_ADMIN1/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/PROSODY_ADMIN2/$PROSODY_ADMIN2/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/LDAP_SERVER/$ldaphost/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/LDAP_BINDPASS/$ldappw/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/LDAP_BINDDN/$ldapdn/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   rosterfilter=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$zimbraDefaultDomainName" "RosterFilter")
   sed -i "s/LDAP_FILTER/$rosterfilter/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/LDAP_FILTER/\&/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/TURN_CREDENTIALS/$TURN_CREDENTIALS/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/TURN_HOST/$TURN_HOST/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/TURN_PORT/$TURN_PORT/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/EXTERNAL_LOGIN_FULL_DOMAIN/$EXTERNAL_LOGIN_FULL_DOMAIN/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/PROSODY_CONFERENCE_FULL_HOSTNAME/$PROSODY_CONFERENCE_FULL_HOSTNAME/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   sed -i "s/MUC_COMPONENT_SECRET/$MUC_COMPONENT_SECRET/g" "/tmp/$zimbraDefaultDomainName.cfg.lua"
   cp "/tmp/$zimbraDefaultDomainName.cfg.lua" "/etc/prosody/conf.d/$zimbraDefaultDomainName.cfg.lua"


   cp /usr/share/ztalk/conf.templates/vnc_hybrid_authenticator.cfg.template "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'AUTH' 'UserAuthentication_Shared_Secret' "$AUTHENTICATION_SHARED_SECRET"
   zimbraPreAuthKey=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$zimbraDefaultDomainName" 'zimbraPreAuthKey') 2>/dev/null
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'ZIMBRA_SOAP' 'zimbra_soap_preauth_key' "$zimbraPreAuthKey"
   ZURL=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$zimbraDefaultDomainName" 'ZIMBRA_URL') 2>/dev/null
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'ZIMBRA_SOAP' 'zimbra_soap_url' "$ZURL/service/soap"

   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'LDAP' 'Server' "$ldaphost"
   DLdapBase=$(echo "ou=people,dc=$zimbraDefaultDomainName" | sed 's/\./,dc=/g' )
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'LDAP' 'Base' "$DLdapBase"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'LDAP' 'BindPass' "$ldappw"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'LDAP' 'BindDN' "$ldapdn"

   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'middleware_url' "$ZURL/VNCMiddleware/rest"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'middleware_appname' "$MIDDLEWARE_APPNAME"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'zimbra_admin_passwd' "$MIDDLEWARE_ZIMBRA_ADMIN_PASSWD"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'zimbra_host' "$MIDDLEWARE_MIDDLEWARE_ZIMBRA_HOST"
   crudini --set "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" 'EXTERNAL_USER' 'external_domain' "$EXTERNAL_LOGIN_FULL_DOMAIN"
   sed -i "s/ = /=/g" "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg"
   cp "/tmp/$zimbraDefaultDomainName-vnc_hybrid_authenticator.cfg" /etc/zimbra-talk/

   INIDOMAINS=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg | grep "^domain:" | awk -F ":" '{print $2}' | grep -v "^$zimbraDefaultDomainName$")
   for domain in $INIDOMAINS; do
      cp /usr/share/ztalk/conf.templates/prosody-virtual-host.cfg.lua.template "/tmp/$domain.cfg.lua"
      sed -i "s/XMPP_FULL_DOMAIN/$domain/g" "/tmp/$domain.cfg.lua"
      sed -i "s/PROSODY_ADMIN1/$PROSODY_ADMIN1/g" "/tmp/$domain.cfg.lua"
      sed -i "s/PROSODY_ADMIN2/$PROSODY_ADMIN2/g" "/tmp/$domain.cfg.lua"
      sed -i "s/LDAP_SERVER/$ldaphost/g" "/tmp/$domain.cfg.lua"
      sed -i "s/LDAP_BINDPASS/$ldappw/g" "/tmp/$domain.cfg.lua"
      sed -i "s/LDAP_BINDDN/$ldapdn/g" "/tmp/$domain.cfg.lua"
      rosterfilter=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$domain" "RosterFilter")
      sed -i "s/LDAP_FILTER/$rosterfilter/g" "/tmp/$domain.cfg.lua"
      sed -i "s/LDAP_FILTER/\&/g" "/tmp/$domain.cfg.lua"
      sed -i "s/TURN_CREDENTIALS/$TURN_CREDENTIALS/g" "/tmp/$domain.cfg.lua"
      sed -i "s/TURN_HOST/$TURN_HOST/g" "/tmp/$domain.cfg.lua"
      sed -i "s/TURN_PORT/$TURN_PORT/g" "/tmp/$domain.cfg.lua"
      sed -i "s/EXTERNAL_LOGIN_FULL_DOMAIN/$EXTERNAL_LOGIN_FULL_DOMAIN/g" "/tmp/$domain.cfg.lua"
      sed -i "s/PROSODY_CONFERENCE_FULL_HOSTNAME/conference.$domain/g" "/tmp/$domain.cfg.lua"
      sed -i "s/MUC_COMPONENT_SECRET/$MUC_COMPONENT_SECRET/g" "/tmp/$domain.cfg.lua"
      cp "/tmp/$domain.cfg.lua" "/etc/prosody/conf.d/$domain.cfg.lua"

      cp /usr/share/ztalk/conf.templates/vnc_hybrid_authenticator.cfg.template "/tmp/$domain-vnc_hybrid_authenticator.cfg"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'AUTH' 'UserAuthentication_Shared_Secret' "$AUTHENTICATION_SHARED_SECRET"
      zimbraPreAuthKey=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$domain" 'zimbraPreAuthKey') 2>/dev/null
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'ZIMBRA_SOAP' 'zimbra_soap_preauth_key' "$zimbraPreAuthKey"
      ZURL=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg "domain:$domain" 'ZIMBRA_URL') 2>/dev/null
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'ZIMBRA_SOAP' 'zimbra_soap_url' "$ZURL/service/soap"

      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'LDAP' 'Server' "$ldaphost"
      DLdapBase=$(echo "ou=people,dc=$domain" | sed 's/\./,dc=/g' )
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'LDAP' 'Base' "$DLdapBase"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'LDAP' 'BindPass' "$ldappw"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'LDAP' 'BindDN' "$ldapdn"

      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'middleware_url' "$ZURL/VNCMiddleware/rest"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'middleware_appname' "$MIDDLEWARE_APPNAME"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'zimbra_admin_passwd' "$MIDDLEWARE_ZIMBRA_ADMIN_PASSWD"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'MIDDLEWARE' 'zimbra_host' "$MIDDLEWARE_MIDDLEWARE_ZIMBRA_HOST"
      crudini --set "/tmp/$domain-vnc_hybrid_authenticator.cfg" 'EXTERNAL_USER' 'external_domain' "$EXTERNAL_LOGIN_FULL_DOMAIN"
      cp "/tmp/$domain-vnc_hybrid_authenticator.cfg" /etc/zimbra-talk/

      mkdir -p /etc/zimbra-talk/dns.d

      echo "txt-record=_xmppconnect.$domain,\"_xmpp-client-xbosh=https://$PROSODY_FULL_HOSTNAME:443/http-bind\"
txt-record=_xmppconnect.external.$domain,\"_xmpp-client-xbosh=https://$PROSODY_FULL_HOSTNAME:443/http-bind\"
srv-host=_xmpp-client._tcp.$domain,$PROSODY_FULL_HOSTNAME,5222
srv-host=_xmpp-server._tcp.$domain,$PROSODY_FULL_HOSTNAME,5269
" > "/etc/zimbra-talk/dns.d/$domain.dnsmasq.conf"

      echo "_xmppconnect.$domain.       300     IN      TXT     \"_xmpp-client-xbosh=https://$PROSODY_FULL_HOSTNAME:443/http-bind\"
_xmppconnect.external.$domain.            300     IN      TXT     \"_xmpp-client-xbosh=https://$PROSODY_FULL_HOSTNAME:443/http-bind\"
_xmpp-client._tcp.$domain.                   300     IN      SRV 0       5       5222    $PROSODY_FULL_HOSTNAME.
_xmpp-server._tcp.$domain.                   300     IN      SRV 0       5       5269    $PROSODY_FULL_HOSTNAME.
" > "/etc/zimbra-talk/dns.d/$domain.bind.conf"

   done

}

function remove_unused_configs() {
   PROSODYCFGS=$(find /etc/prosody/conf.d/ -iname "*cfg.lua" -printf '%f\n' | grep -v "vnctalk-jitsi-meet.cfg.lua" | grep -v "localhost.cfg.lua")
   echo "$PROSODYCFGS" | sed 's/\.cfg.lua//g'| while IFS= read -r cfgfiledomain
   do
      TDOMAIN=$(crudini --get /etc/zimbra-talk/talk.defaults.cfg | grep "^domain:" | awk -F ":" '{print $2}' | grep -c "$cfgfiledomain" )
      if [ "$TDOMAIN" = "0" ]; then
         rm "/etc/prosody/conf.d/$cfgfiledomain.cfg.lua"
      fi
   done
   #TODO cleanup hybrid auth configs
}

initfetch
update-ini-domains
update-prosody-from-ini
remove_unused_configs
cat -s /etc/zimbra-talk/talk.defaults.cfg > /tmp/talk.defaults.swap
mv /tmp/talk.defaults.swap /etc/zimbra-talk/talk.defaults.cfg
