#!/bin/bash
# usage: no argument silent (daemon) mode
# -f: force update
# -c: check: creates all logins missing from /www/wiki/pub/ldap-wikinames

set -a

cd /www/wiki/pub
f=ldap-wikinames
wp=/www/wiki/data/Intranet/LdapWikiNamesTable.txt
xmlp=ldap-wikinames.xml
url=Zone2:Intranet.WebcoreDaemons
log=/var/log/ldap-ilog-update-wikinames
email_log='XXX'

if test "x$1" = "x-f"; then force=true; else force=false; fi
if test "x$1" = "x-c"; then check=true; else check=false; fi

generate_page () {
  echo "---+ ILOG LDAP accounts"
  echo "This page is generated automatically every 4 hours, do not edit."
  echo "See ldap-ilog-update-wikinames at $url"
  echo "|*Wiki account*|*ILOG account*|*email*|*full name*|*comments*|"

  echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><ldapusers>" >$xmlp
  while read w l m c;do       
    c="${c#*#}"
    echo "| Main.$w | <a href='http://people-directory.ilog.fr/employee-$l'>$l</a> | $m |${c%%,*}    |${c#*,}      |"
    fn="${c%%,*}"; comments="${c#*,}"
    echo "<ldapuser wikiaccount='$w' account='$l' email='$m' fullname=\"${fn#* }\" comments=\"${comments#* }\" />" >>$xmlp
  done <$1
  echo "</ldapusers>" >>$xmlp
}

# $1 (optional: do only this host)
create_new_logins () {
  while read marker wikiname uid email nc; do
    name="${nc#\#*( )}"
    comments="${name#*,}"
    name="${name%%,*}"
    comments="${comments##+( )}"
    if test ! -e /www/wiki/data/Main/$wikiname.txt; then
      echo "`date +'%Y-%m-%d.%T'` Creating account for $wikiname"
      if test -z "$1"; then
      hostname=wiki1 wiki-register $wikiname $uid $email "$name" "$comments"
      hostname=wiki wiki-register $wikiname $uid $email "$name" "$comments"
      else
      hostname="$1" wiki-register $wikiname $uid $email "$name" "$comments"
      fi
    fi
  done >>$log 2>&1
}

if $check; then 
  diff /dev/null /www/wiki/pub/ldap-wikinames | grep '^>' | create_new_logins `hostname`
  exit 0
fi

ldap-ilog-dump-wikiname >$f.new
if $force; then
  mv $f.new $f
  echo "# forced full dump" | ci -q -l /www/wiki/pub/ldap-wikinames
  generate_page $f >$f.txt
else
  if ! cmp -s $f $f.new; then
    diff $f $f.new >$f.diffs
    mv $f.new $f
    ci -q -l /www/wiki/pub/ldap-wikinames <$f.diffs
    grep '^>' $f.diffs | create_new_logins
    (echo "Changes to the ILOG LDAP: see http://wiki.ilog.fr/wiki/bin/view/Intranet/LdapWikiNamesTable"; echo; cat $f.diffs) |\
    mail -s "LDAP logins changes" "$email_log"
    rm -f $f.diffs
    generate_page $f >$f.txt
  else
    rm -f $f.new
  fi
fi

rsync -az ${f}* wiki:/www/wiki/pub/

if ! cmp -s $f.txt $wp; then
  cp $f.txt $wp
  ssh wiki cp /www/wiki/pub/$f.txt $wp
fi
