<?xml version='1.0' encoding='UTF-8'?>
<rougail version="0.10">
  <services>
    <service name="postfix" target="multi-user">
      <override engine="none"/>
      <certificate format="pem" authority="External" type="server" domain="submission_domainname" provider="mail_crt_provider" certificate_type="variable">submission_domainname</certificate>
      <certificate format="pem" server="last_server_name" domain="last_server_name" authority="InternalMail" owner="postfix" type="server">postfixlocal</certificate>
      <certificate authority="Mail" owner="postfix" type="server">postfix</certificate>
      <certificate authority="LDAP" owner="postfix" server="ldap_server_address">postfix_ldap_client</certificate>
      <file engine="none" source="sysuser-postfix.conf">/sysusers.d/1postfix.conf</file>
      <file engine="none" source="tmpfile-postfix.conf">/tmpfiles.d/0postfix.conf</file>
      <file engine="ansible">/etc/postfix/main.cf</file>
      <file engine="none">/etc/postfix/master.cf</file>
      <file engine="ansible">/etc/postfix/relay_passwd</file>
      <file engine="ansible">/etc/postfix/ldapsource.cf</file>
      <file engine="ansible">/etc/postfix/sni</file>
      <file engine="ansible" mode="700">/sbin/risotto_backup</file>
    </service>
    <service name='dovecot-init'>
      <override engine="none"/>
      <file engine="none">/etc/nginx/default.d/autoconfig.conf</file>
    </service>
    <service name='nginx'>
      <file engine="ansible" source='config-v1.1.xml' file_type="variable" variable="mail_domains">well_known_filenames</file>
    </service>
    <service name="dovecot" target="multi-user">
      <certificate authority="External" type="server" domain="imap_domainname" provider="mail_crt_provider" certificate_type="variable">imap_domainname</certificate>
      <certificate authority="IMAP" domain="last_server_name" owner="dovecot" type="server">dovecot</certificate>
      <file engine="none" source="sysuser-dovecot.conf">/sysusers.d/1dovecot.conf</file>
      <file engine="none" source="tmpfile-dovecot.conf">/tmpfiles.d/0dovecot.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/10-logging.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/10-auth.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/10-mail.conf</file>
      <file engine="ansible">/etc/dovecot/conf.d/10-master.conf</file>
      <file engine="ansible">/etc/dovecot/conf.d/10-ssl.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/15-ldap.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/30-service-stats.conf</file>
      <file engine='none'>/etc/dovecot/conf.d/00-risotto.conf</file>
      <!--plain authentification-->
      <file engine="none">/etc/dovecot/conf.d/auth-ldap.conf.ext</file>
      <file engine="ansible">/etc/dovecot/dovecot-ldap.conf.ext</file>
      <!--oauth2 authentification-->
      <file engine="none">/etc/dovecot/conf.d/auth-oauth2.conf.ext</file>
      <file engine="ansible">/etc/dovecot/dovecot-oauth2.conf.ext</file>
      <!--internal authentification-->
      <file engine="ansible" filelist="copy_tests">/tests/imap.yml</file>
    </service>
  </services>
  <variables>
    <family name="network">
      <variable name="incoming_ports" redefine="True">
        <value>587</value>
        <value>993</value>
      </variable>
    </family>
    <family name="ldap">
      <family name="client">
        <variable name='ldapclient_family' redefine="True">
          <value>all</value>
        </variable>
        <variable name="ldap_key_file_owner" redefine="True">
          <value>dovecot</value>
        </variable>
      </family>
    </family>
    <family name="mail" description="Mail configuration">
      <family name="domain" description="Mail domain" leadership="True">
        <variable name="mail_domains" type="domainname" description="Domaine de courriel géré localement" mandatory="True" multi="True" supplier="LMTP:criteria"/>
        <variable name="mail_domains_calc" type="domainname" hidden="True"/>
        <variable name="imap_domainname" type="domainname" mandatory="True"/>
        <variable name="submission_domainname" type="domainname" mandatory="True"/>
      </family>
      <variable name="mail_crt_provider" type="choice" description="Autorité de certification signant les certificats des domaines extérieurs" mandatory="True">
        <value>autosigne</value>
        <choice>autosigne</choice>
        <choice>letsencrypt</choice>
      </variable>
    </family>
    <family name="dovecot" description="IMAP mail server">
      <variable name="imap_internal_address" type="domainname" description="Adresse interne du serveur IMAP" mandatory="True" provider="IMAP"/>
      <variable name="well_known_filenames" type="filename" hidden='True' multi="True"/>
    </family>
    <family name="revprox">
      <family name="revprox_client">
        <variable name="revprox_client_external_domainnames" redefine="True"/>
        <variable name="revprox_client_web_address" redefine="True"/>
      </family>
    </family>
    <family name="nginx">
      <variable name="nginx_root" redefine='True'>
        <value>/var/www/html</value>
      </variable>
    </family>
  </variables>
  <constraints>
    <fill name="calc_value">
      <param type="variable">domain_name_eth0</param>
      <target>imap_internal_address</target>
    </fill>
    <fill name="calc_value">
      <param type="variable">mail_domains</param>
      <target>mail_domains_calc</target>
    </fill>
    <fill name="calc_value">
      <param>/var/www/html/mail/</param>
      <param type="variable">mail_domains</param>
      <param>/autodiscover/autodiscover.xml</param>
      <!--param>/config-v1.1.xml</param-->
      <param name="join"></param>
      <param name="multi" type="boolean">True</param>
      <target>well_known_filenames</target>
    </fill>
    <fill name="calc_well_known">
      <param type="index"/>
      <param type="variable">domain_name_eth0</param>
      <param type="variable">mail_domains</param>
      <target>revprox_client_web_address</target>
    </fill>
    <fill name="calc_domains">
      <param type="variable">mail_domains</param>
      <target>revprox_client_external_domainnames</target>
    </fill>
    <fill name="calc_locations">
      <param type="variable">revprox_client_external_domainnames</param>
      <param type="index"/>
      <target>revprox_client_location</target>
    </fill>
  </constraints>
</rougail>