<?xml version="1.0" encoding="utf-8"?>

<creole>

    <files>
        <file name='/etc/eole/ssl/certif-eole.conf' mkdir='True'/>
        <file name='/etc/eole/ssl/client-eole.conf'/>
        <file name='/etc/eole/ssl/ca-eole.conf'/>
        <file filelist='le_active' name='/etc/eole/ssl/nginx-minimal.conf' rm="True"/>
        <file filelist='le_active' name='/usr/share/eole/letsencrypt/hooks-post.d/00-copy' mode="755" source="le-00-copy"/>
    </files>

    <variables>
        <family name='général'>
            <variable name='cert_type' type='string' description='Certificat SSL' mode="basic">
                <value>autosigné</value>
            </variable>
            <variable name='server_cert' type='filename' description='Chemin du fichier contenant le certificat SSL' mandatory="True" mode="basic"/>
            <variable name='server_key' type='filename' description='Chemin du fichier contenant la clé privée du certificat SSL' mandatory="True" mode="basic">
                <value>/etc/ssl/private/eole.key</value>
            </variable>
            <variable name='server_pem' type='filename' description='Chemin du fichier contenant la clé privée et le certificat SSL' mandatory="True" mode="basic"/>
            <variable name='server_full_chain_pem' type='filename' description='Chemin du fichier contenant le certificat SSL et la chaîne' mandatory="True" mode="basic"/>
        </family>
        <family name='certificats ssl' mode='expert' icon='lock'>
            <variable name='ssl_default_key_bits' type='number' description='Taille de la clé'>
                <value>2048</value>
            </variable>
            <variable name='ssl_default_cert_time' type='number' description='Durée de validité du certificat (en jours)'>
                <value>1096</value>
            </variable>
            <variable name='ssl_country_name' type='string' description='Nom du pays (C=)'/>
            <variable name='ssl_organization_name' type='string' description="Nom de l'organisation (O=)">
                <value>Ministere Education Nationale (MENESR)</value>
            </variable>
            <variable name='ssl_organization_unit_name' type='string' description="Nom de l'unité de l'organisation (OU=)" multi='True'/>
            <variable name='ssl_server_name' type='domain_strict' description="Nom DNS du serveur (de la forme nom-serveur.ac-acad.fr) (CN=)"/>
            <variable name='ssl_subjectaltname' type='domain_strict' description="Nom DNS alternatif du serveur" multi='True'/>
            <variable name='eolesso_adresse_local' type='string' description="Nom de domaine du serveur SSO si il est local"/>
            <variable name='le_extra_names' description="Nom de domaines supplémentaires" type="domain_strict" multi='True'/>
            <variable name='le_config_dir' type='filename' description="Répertoire de configuration du client Let's Encrypt">
                <value>/etc/ssl/letsencrypt/conf</value>
            </variable>
            <variable name='le_work_dir' type='filename' description="Répertoire de travail du client Let's Encrypt">
                <value>/tmp/letsencrypt/work</value>
            </variable>
            <variable name='le_logs_dir' type='filename' description="Répertoire de journalisation du client Let's Encrypt">
                <value>/var/log/letsencrypt/</value>
            </variable>
            <variable name='le_server_addr' type='string' description="Adresse du serveur Let's Encrypt"/>
            <variable name='le_server_port' type='port' description="Port d'écoute du serveur Let's Encrypt"/>
            <variable name='le_client_mode' type='string' description="Mode de fonctionnement du client Let's Encrypt" mode='expert'>
                <value>webroot</value>
            </variable>
            <variable name='le_http_01_port' type='port' description="Port d'écoute pour la requête http-01">
                <value>80</value>
            </variable>
            <variable name='le_https_port' type='port' description="Port d'écoute pour la requêt HTTPS">
                <value>443</value>
            </variable>
            <variable name='le_ssl_cert' type='filename' description='Chemin du certificat SSL par défaut'/>
            <variable name='le_ssl_key' type='filename' description='Chemin de là clé privée SSL par défaut'/>
            <variable name='le_ssl_pem' type='filename' description='Chemin de la chaine complète SSL par défaut'/>
            <variable name='le_expire_delay' type='number' description="Nombre de jours avant qu'un reconfigure soit exécuté pour renouveller les certificats" mode="expert">
                <value>15</value>
            </variable>
        </family>

         <separators>
            <!-- certificats -->
            <separator name='cert_type'>Choix du certificat SSL</separator>
            <separator name='ssl_default_key_bits'>Paramètres SSL</separator>
            <separator name='ssl_country_name'>Subject (DN)</separator>
            <separator name='ssl_subjectaltname'>Nom Alternatif de la machine (SubjectAltName)</separator>
            <separator name='le_config_dir'>Paramètres du client Let's Encrypt</separator>
            <separator name='le_extra_names'>Certificats supplémentaires à demander</separator>
        </separators>
    </variables>

    <constraints>
        <check name='valid_enum' target='cert_type'>
            <param>['autosigné','letsencrypt','manuel']</param>
        </check>
        <check name='valid_enum' target='le_client_mode'>
            <param>['webroot','standalone']</param>
        </check>
        <check name='valid_country' target='ssl_country_name'>
        </check>
        <fill name='calc_ssl_country_name' target='ssl_country_name'>
            <param type='eole' name='valeur'>suffixe_domaine_academique</param>
        </fill>
        <fill name='calc_multi_val' target='ssl_organization_unit_name'>
            <param>110 043 015</param>
            <param type='eole' >nom_academie</param>
        </fill>
        <fill name='calc_multi_domains' target='ssl_subjectaltname'>
            <param type='eole'>nom_domaine_machine</param>
            <param type='eole' optional='True' hidden='False'>revprox_domainname</param>
            <param type='eole' optional='True' hidden='False'>eolesso_adresse_local</param>
            <param type='eole' optional='True' hidden='False'>web_url</param>
            <param type='eole' optional='True' hidden='False'>managerWebName</param>
            <param type='eole' optional='True' hidden='False'>authWebName</param>
            <param type='eole' optional='True' hidden='False'>reloadWebName</param>
            <param type='eole' optional='True' hidden='False'>ad_server_fullname</param>
        </fill>
        <fill name='calc_val' target='ssl_server_name'>
            <param type='eole'>nom_domaine_machine</param>
        </fill>
        <auto name='calc_eolesso_adresse_local' target='eolesso_adresse_local'>
            <param type='eole' optional='True'>activer_sso</param>
            <param type='eole' hidden='False' optional='True'>eolesso_adresse</param>
        </auto>

        <auto name='concat' target='le_ssl_cert'>
            <param type='eole'>le_config_dir</param>
            <param>/live/</param>
            <param type='eole'>nom_domaine_machine</param>
            <param>/cert.pem</param>
        </auto>

        <auto name='concat' target='le_ssl_key'>
            <param type='eole'>le_config_dir</param>
            <param>/live/</param>
            <param type='eole'>nom_domaine_machine</param>
            <param>/privkey.pem</param>
        </auto>

        <auto name='concat' target='le_ssl_pem'>
            <param type='eole'>le_config_dir</param>
            <param>/live/</param>
            <param type='eole'>nom_domaine_machine</param>
            <param>/fullchain.pem</param>
        </auto>

        <condition name='frozen_if_in' source='cert_type'>
            <param>letsencrypt</param>
            <param>autosigné</param>
            <target type='variable'>server_cert</target>
            <target type='variable'>server_key</target>
            <target type='variable'>server_pem</target>
            <target type='variable'>server_full_chain_pem</target>
        </condition>

        <condition name='frozen_if_in' source='cert_type'>
            <param>letsencrypt</param>
            <target type='variable'>ssl_default_key_bits</target>
            <target type='variable'>ssl_default_cert_time</target>
            <target type='variable'>ssl_country_name</target>
            <target type='variable'>ssl_organization_name</target>
            <target type='variable'>ssl_organization_unit_name</target>
        </condition>

        <condition name='disabled_if_not_in' source='cert_type'>
            <param>letsencrypt</param>
            <target type='variable'>le_server_addr</target>
            <target type='variable'>le_server_port</target>
            <target type='variable'>le_http_01_port</target>
            <target type='variable'>le_https_port</target>
            <target type='variable'>le_config_dir</target>
            <target type='variable'>le_work_dir</target>
            <target type='variable'>le_logs_dir</target>
            <target type='variable'>le_extra_names</target>
            <target type='variable'>le_client_mode</target>
            <target type='variable'>le_ssl_cert</target>
            <target type='variable'>le_ssl_key</target>
            <target type='variable'>le_ssl_pem</target>
            <target type='variable'>le_expire_delay</target>
            <target type='filelist'>le_active</target>
            <target type='servicelist'>le_active</target>
        </condition>

        <fill name='calc_multi_condition' target='server_cert'>
            <param>manuel</param>
            <param type='eole' name='condition_1'>cert_type</param>
            <param name='default_match'>None</param>
            <param name='mismatch'>/etc/ssl/certs/eole.crt</param>
        </fill>
        <fill name='calc_multi_condition' target='server_pem'>
            <param>manuel</param>
            <param type='eole' name='condition_1'>cert_type</param>
            <param name='default_match'>None</param>
            <param name='mismatch'>/etc/ssl/certs/eole.pem</param>
        </fill>
        <fill name='calc_multi_condition' target='server_full_chain_pem'>
            <param>letsencrypt</param>
            <param type='eole' name='condition_1'>cert_type</param>
            <param name='default_match'>/etc/ssl/certs/eole_fullchain.pem</param>
            <param name='mismatch' type="eole">server_cert</param>
        </fill>
    </constraints>

    <help>
        <family name='certificats ssl'>Paramétrage avancé des certificats SSL</family>
        <variable name='server_cert'>Le certificat SSL doit être au format PEM et est généralement fourni dans un fichier avec l'extension "crt"</variable>
        <variable name='server_key'>La clé privé doit être au format PEM et est généralement fournie dans un fichier avec l'extension "key"</variable>
        <variable name='server_pem'>La clé privé et le certificat doit être au format PEM et est généralement fournie dans un fichier avec l'extension "pem"</variable>
        <variable name='server_full_chain_pem'>Le certificat et la chaine de certification doivent être au format PEM et est généralement fournie dans un fichier avec l'extension "pem"</variable>
        <variable name='le_server_addr'>Adresse du serveur ACME utilisé pour la génération automatique des certificats </variable>
        <variable name='le_client_mode'>Mode de fonctionnement du client ACME pour la demande de certificat, (standalone ou webroot)</variable>
        <variable name='le_server_port'>Port d'écoute du serveur ACME utilisé pour la génération automatique des certificats</variable>
        <variable name='le_http_01_port'>Port d'écoute à ouvrir pour la vérification http 01 du serveur ACME lors de la demande de certificat</variable>
        <variable name='le_https_port'>Port d'écoute à ouvrir pour la vérification HTTPS du serveur ACME lors de la demande de certificat</variable>
        <variable name='le_config_dir'>Répertoire de configuration du client ACME (Let's Encrypt)</variable>
        <variable name='le_work_dir'>Répertoire de travail du client ACME</variable>
        <variable name='le_logs_dir'>Répertoire de journalisation du client ACME</variable>
        <variable name='le_extra_names'>Liste des noms de domaine pour les certificats supplémentaires a demander lors de la requête</variable>
    </help>
</creole>
