#! /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 subprocess import Popen
from os.path import isfile
from os import chdir, environ
import sys

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/"
    proc = Popen(['/usr/bin/cheetah-compile', 'template.tmpl', '--idir' , template_dir, '--odir', '/usr/share/sso', '--nobackup'])
    proc.wait()
    if proc.returncode != 0:
        print('\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():
    for env_variable in ('http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY'):
        environ.pop(env_variable, None)
    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:
        # lancement du service
        from twisted.scripts.twistd import run
        run()
    except:
        import traceback
        traceback.print_exc()
        print("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
    if port_sso == 443:
        port_sso = 8443
    proxy=xmlrpclib.ServerProxy('https://localhost:%s/xmlrpc' % port_sso, transport=transport)
    res=proxy.reload_configuration()
    if not res:
        print("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()
