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

import sys
from pwd import getpwuid
from grp import getgrgid
from os.path import join
from creole.utils import run_bash_function

def register_ead():
    """
        Enregistrement de l'EAD local
    """
    from creole.client import CreoleClient
    sys.path.insert(1, '/usr/share')
    from ead2.frontend.web.lib.servers import servers
    from ead2.lib.libead import EadKeyParser
    from ead2.lib.crypto import create_key as create_magicnb
    from ead2.backend.config.config import CONFIG_DIR, FRONTEND_KEYS_FILE, NOBODY_UID, NOBODY_GID
    from ead2.config.config import BACKEND_LISTEN_PORT, SSL_dir, certname
    nom_machine = CreoleClient().get_creole('nom_machine')
    nom_domaine = CreoleClient().get_creole('ssl_server_name')
    if nom_domaine is None:
        nom_domaine = CreoleClient().get_creole('nom_domaine_machine')
    # Install SSL directories and files
    username = getpwuid(NOBODY_UID).pw_name
    groupname = getgrgid(NOBODY_GID).gr_name
    ret = run_bash_function("/usr/lib/eole/utils.sh", "InstallSSLFiles", "{0} {1} {2} {3}".format(certname, username, groupname, SSL_dir))
    ead = EadKeyParser()
    ead.parse_file(join(CONFIG_DIR, FRONTEND_KEYS_FILE))
    ead_keys = ead.get_key_dict()
    if "127.0.0.1" in ead_keys:
        # Remplacement de 127.0.0.1 avec le nom complet DNS (valide dans le certif SSL)
        srvLst = servers().get_server()
        for key, value in srvLst.items():
            if value[0] == 'https://127.0.0.1':
                servers().del_server(key)
            break
    if nom_domaine not in ead_keys:
        key = create_magicnb('admin', 'admin')
        dic = {nom_domaine: key}
        # ecriture clé ead-serveur
        ead.write_file(join(CONFIG_DIR, FRONTEND_KEYS_FILE), dic)
        # ecriture clé ead-web
        servers().add_server('https://{0}'.format(nom_domaine),
                             str(BACKEND_LISTEN_PORT),
                             nom_machine,
                             str(key))

register_ead()
