#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
 Eole NG - 2012
 Copyright Pole de Competence Eole  (Ministere Education - Academie Dijon)
 Licence CeCill  cf /root/LicenceEole.txt
 eole@ac-dijon.fr

 script de lancement du service eole-sso

 usage:: %prog [OPTIONS]

"""

from pyeole.process import system_out
from pyeole.ihm import print_red
from os.path import isfile
from os import chdir
import sys
from optparse import OptionParser

def compile_template():
    # Compilation du template au lancement/reload du service pour gain de perf :)
    if isfile('/usr/share/sso/interface/theme/template.tmpl'):
        template_dir = "/usr/share/sso/interface/theme/"
    else:
        template_dir = "/usr/share/sso/interface/"
    res = system_out(['/usr/bin/cheetah-compile', 'template.tmpl', '--idir' , template_dir, '--odir', '/usr/share/sso', '--nobackup'])
    if res[0] != 0:
        print_red('\nErreur lors de la compilation du template /usr/share/sso/authform.tmpl : \n')
        print " * stdout : ", res[1].strip()
        print " * stderr : ", res[2].strip()
        print ""
        sys.exit(1)

def start_service():
    compile_template()
    chdir('/usr/share/sso')
    sys.path.append('.')
    from check_certs import run_check
    # vérification du certificat serveur XXX FIXME : à déplacer dans diagnose ?
    run_check()
    try:
        from update_conf import run_update
        # mise à jour des configurations si nécessaire
        run_update()
        # lancement du service
        from twisted.scripts.twistd import run
        run()
    except:
        print_red("Une erreur s'est produite lors du lancement du service (consulter /var/log/syslog)")
        sys.exit(1)

def reload_conf():
    import xmlrpclib
    import ssl
    from creole.client import CreoleClient
    compile_template()
    conf = CreoleClient()
    port_sso = conf.get_creole('eolesso_port', 8443)
    # désactive la vérification du certificat (localhost n'est pas valide)
    local_ctx = ssl._create_unverified_context()
    transport = xmlrpclib.SafeTransport(context=local_ctx)
    # appel de la fonction reload_configuration via xmlrpc
    proxy=xmlrpclib.ServerProxy('https://localhost:%s/xmlrpc' % port_sso, transport=transport)
    res=proxy.reload_configuration()
    if not res:
        print_red("Erreur lors du rechargement de la configuration (consulter /var/log/syslog)")
        sys.exit(1)

if __name__ == '__main__':
    if "--reload" in sys.argv:
        reload_conf()
    else:
        start_service()
