#! /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_code
from creole.utils 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/"
    if system_code(['/usr/bin/cheetah-compile', 'template.tmpl', '--idir' , template_dir, '--odir', '/usr/share/sso', '--nobackup']) != 0:
        print_red('\nErreur lors de la compilation du template /usr/share/sso/authform.tmpl\n\n')
        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/eole-sso.log)")
        sys.exit(1)

def reload_conf():
    import xmlrpclib
    from creole.parsedico import parse_dico
    compile_template()
    port_sso = parse_dico().get('eolesso_port', '8443')
    proxy=xmlrpclib.ServerProxy('https://localhost:%s/xmlrpc' % port_sso)
    res=proxy.reload_configuration()
    if not res:
        print_red("Erreur lors du rechargement de la configuration (consulter /var/log/eole-sso.log)")
        sys.exit(1)

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