From b888bfb204b64624bd7b51b292b9516b3fa6312d Mon Sep 17 00:00:00 2001
From: shirenn <shirenn@crans.org>
Date: Wed, 5 Aug 2020 00:15:02 +0200
Subject: [PATCH] [horde] configuration complete

---
 roles/horde/README.md                         | 26 ++++++++++++++++---
 roles/horde/handlers/main.yml                 |  6 +++++
 roles/horde/tasks/main.yml                    | 24 +++++++++++------
 roles/horde/templates/horde/horde/conf.php.j2 |  6 +++--
 .../horde/templates/horde/imp/backends.php.j2 | 19 ++++++++++++++
 .../templates/nginx/sites-available/horde.j2  | 17 ++++++++++++
 .../nginx/sites-available/webmail.j2          | 21 +++++++++++++++
 .../templates/nginx/snippets/php.conf.j2      | 26 +++++++++++++++++++
 8 files changed, 131 insertions(+), 14 deletions(-)
 create mode 100644 roles/horde/handlers/main.yml
 create mode 100644 roles/horde/templates/horde/imp/backends.php.j2
 create mode 100644 roles/horde/templates/nginx/sites-available/horde.j2
 create mode 100644 roles/horde/templates/nginx/sites-available/webmail.j2
 create mode 100644 roles/horde/templates/nginx/snippets/php.conf.j2

diff --git a/roles/horde/README.md b/roles/horde/README.md
index 9e964ba8..874a42e6 100644
--- a/roles/horde/README.md
+++ b/roles/horde/README.md
@@ -2,7 +2,25 @@
 Ce rôle ansible deploie une instance du webmail horde.
 
 ## Variables
-  - glob_horde.secret : le secret de horde
-  - glob_horde.imap : le serveur imap
-  - glob_horde.db : la bdd
-  - glob_horde.admins: la liste des admins de horde
+  - glob_horde. :
+    - secret : le secret de horde
+    - imap : le serveur imap
+    - smtp : le serveur smtp (il doit juste être contactable depuis le serveur
+      imap)
+    - maildomain : le nom de domaine depuis qui envoyé les mails
+    - db : la bdd
+    - admins : la liste des admins de horde
+    - redirection : ou rediriger les utilisateurs si il essaie de voir la racine
+      du site
+    - src_hostname : on utilise deux hostnames, le premier va rediriger vers le
+      second. Ici c'est le premier
+    - dest_hostname : Ici c'est le second
+    - admin_src_hostname : même chose mais sur le réseau d'administration. Ici
+      c'est le premier
+    - admin_dest_hostname : Ici c'est le second
+    - zone_ipv4 : la zone ipv4 du réseaux sur lequel le proxy discute avec le
+      serveur
+    - zone ipv6 : la zone ipv6 du réseaux sur lequel le proxy discute avec le
+      serveur
+  - loc_horde :
+    - ipv6 : l'ipv6 du serveur
diff --git a/roles/horde/handlers/main.yml b/roles/horde/handlers/main.yml
new file mode 100644
index 00000000..721ac462
--- /dev/null
+++ b/roles/horde/handlers/main.yml
@@ -0,0 +1,6 @@
+---
+
+- name: Restart nginx
+  service:
+    name: nginx.service
+    state: restarted
diff --git a/roles/horde/tasks/main.yml b/roles/horde/tasks/main.yml
index 78cc5d0e..55ab2891 100644
--- a/roles/horde/tasks/main.yml
+++ b/roles/horde/tasks/main.yml
@@ -12,26 +12,34 @@
 
 - name: Configure horde
   template:
-    src: horde/horde/conf.php.j2
-    dest: /etc/horde/horde/conf.php"
+    src: '{{ item }}.j2'
+    dest: '/etc/{{ item }}'
     owner: www-data
     group: www-data
+    mode: 0640
+  loop:
+    - horde/horde/conf.php
+    - horde/imp/backends.php
 
 - name: Configure nginx site
   template:
-    src: 'nginx/sites-available/{{ item }}.j2'
-    dest: '/etc/nginx/sites-available/{{ item }}'
-  notify: restart nginx
+    src: '{{ item }}.j2'
+    dest: '/etc/{{ item }}'
+    owner: root
+    group: root
+    mode: 0644
   loop:
-    - webmail
-    - horde
+    - nginx/sites-available/webmail
+    - nginx/sites-available/horde
+    - nginx/snippets/php.conf
+  notify: Restart nginx
 
 - name: Enable nginx site
   file:
     src: '/etc/nginx/sites-available/{{ item }}'
     dest: '/etc/nginx/sites-enabled/{{ item }}'
     state: link
-  notify: restart nginx
   loop:
     - webmail
     - horde
+  notify: Restart nginx
diff --git a/roles/horde/templates/horde/horde/conf.php.j2 b/roles/horde/templates/horde/horde/conf.php.j2
index ae0bba4e..6da1cbab 100644
--- a/roles/horde/templates/horde/horde/conf.php.j2
+++ b/roles/horde/templates/horde/horde/conf.php.j2
@@ -1,6 +1,7 @@
+{{ ansible_header | comment(decoration='// ') }} 
 <?php
 /* CONFIG START. DO NOT CHANGE ANYTHING IN OR AFTER THIS LINE. */
-// $Id: 78acbab5980b3b1531db0732c3611a17deae7c83 $
+// $Id: 08fc885cd91fbae2d752e274b554c5f1645129c8 $
 $conf['vhosts'] = false;
 $conf['debug_level'] = E_ALL & ~E_NOTICE;
 $conf['max_exec_time'] = 0;
@@ -27,10 +28,11 @@ $conf['sql']['protocol'] = 'tcp';
 $conf['sql']['database'] = 'horde5';
 $conf['sql']['charset'] = 'utf-8';
 $conf['sql']['splitread'] = false;
+$conf['sql']['logqueries'] = false;
 $conf['sql']['phptype'] = 'pgsql';
 $conf['nosql']['phptype'] = false;
 $conf['ldap']['useldap'] = false;
-$conf['auth']['admins'] = array({{ glob_horde.admins | map('quote') | join(', ')}});
+$conf['auth']['admins'] = array({{ glob_horde.admins | join(', ')}});
 $conf['auth']['checkip'] = false;
 $conf['auth']['checkbrowser'] = true;
 $conf['auth']['resetpassword'] = false;
diff --git a/roles/horde/templates/horde/imp/backends.php.j2 b/roles/horde/templates/horde/imp/backends.php.j2
new file mode 100644
index 00000000..b03fc3de
--- /dev/null
+++ b/roles/horde/templates/horde/imp/backends.php.j2
@@ -0,0 +1,19 @@
+{{ ansible_header | comment(decoration='// ') }}
+<?php
+$servers['imp'] = array(
+    // Disabled by default
+    'disabled' => false,
+    'name' => 'IMAP Cr@ns',
+    'hostspec' => '{{ glob_horde.imap }}',
+    'hordeauth' => true,
+    'protocol' => 'imap',
+    'port' => 143,
+    'secure' => 'tls',
+    'maildomain' => '{{ glob_horde.maildomain }}',
+    'smtp' => array(
+        'host' => '{{ glob_horde.smtp }}',
+        'port' => 25,
+    ),
+    'cache' => false,
+);
+?>
diff --git a/roles/horde/templates/nginx/sites-available/horde.j2 b/roles/horde/templates/nginx/sites-available/horde.j2
new file mode 100644
index 00000000..cbf84402
--- /dev/null
+++ b/roles/horde/templates/nginx/sites-available/horde.j2
@@ -0,0 +1,17 @@
+{{ ansible_header | comment }}
+server {
+        listen {{ glob_horde.admin_src_hostname }}:80;
+        listen {{ loc_horde.ipv6 }}:80 ipv6only=on;
+        server_name {{ glob_horde.admin_src_hostname }} {{ glob_horde.src_hostname }};
+
+        root /usr/share/;
+        location / {
+            return 302 https://{{ glob_horde.dest_hostname }}/horde;
+        }
+        include "snippets/php.conf";
+
+        set_real_ip_from {{ glob_horde.zone_ipv4 }};
+        set_real_ip_from {{ glob_horde.zone_ipv6 }};
+        real_ip_header P-Real-Ip;
+}
+
diff --git a/roles/horde/templates/nginx/sites-available/webmail.j2 b/roles/horde/templates/nginx/sites-available/webmail.j2
new file mode 100644
index 00000000..71270f89
--- /dev/null
+++ b/roles/horde/templates/nginx/sites-available/webmail.j2
@@ -0,0 +1,21 @@
+{{ ansible_header | comment }}
+server {
+        listen {{ glob_horde.admin_dest_hostname }}:80;
+        listen {{ loc_horde.ipv6 }}:80;
+        server_name {{ glob_horde.dest_hostname }} {{ glob_horde.admin_dest_hostname }};
+
+        root /usr/share/;
+        location / {
+            return 302 {{ glob_horde.redirection }};
+        }
+        location /horde {
+                try_files $uri $uri/ /horde/rampage.php?$args;
+                index index.php index.htm index.html;
+        }
+        include "snippets/php.conf";
+
+        set_real_ip_from {{ glob_horde.zone_ipv4 }};
+        set_real_ip_from {{ glob_horde.zone_ipv6 }};
+        real_ip_header P-Real-Ip;
+}
+
diff --git a/roles/horde/templates/nginx/snippets/php.conf.j2 b/roles/horde/templates/nginx/snippets/php.conf.j2
new file mode 100644
index 00000000..144ec410
--- /dev/null
+++ b/roles/horde/templates/nginx/snippets/php.conf.j2
@@ -0,0 +1,26 @@
+{{ ansible_header | comment }}
+
+location ~ .+\.php {
+        fastcgi_split_path_info ^(.+\.php)(/.+)$;
+        if (!-e $document_root$fastcgi_script_name) {
+                return 404;
+        }
+        fastcgi_buffer_size   128k;
+        fastcgi_buffers   4 256k;
+        fastcgi_busy_buffers_size   256k;
+        fastcgi_pass   unix:/var/run/php/php7.3-fpm.sock;
+        fastcgi_index  index.php;
+        fastcgi_param  PATH_INFO          $fastcgi_path_info;
+        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
+        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
+        include fastcgi_params;
+}
+
+location ~ ^/php_(ping|status)$ {
+        access_log     off;
+        allow          127.0.0.1;
+        deny           all;
+        root           /usr/share/nginx/html;
+        fastcgi_pass   unix:/var/run/php/php7.3-fpm.sock;
+        include        fastcgi_params;
+}
-- 
GitLab