From 63d36e79301df3d8874572cd2bef3c59d2e82e8f Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen.haas@lakedrops.com>
Date: Fri, 16 Feb 2024 15:14:05 +0100
Subject: [PATCH] composer/plugin/drupal-environment#14 Add webserver response
 headers by traefik labels

---
 src/Handler.php                   | 10 ++++++++++
 templates/docker-compose.yml.twig | 29 +++++++++++++----------------
 2 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/Handler.php b/src/Handler.php
index 7457e49..5ea429a 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -120,6 +120,16 @@ class Handler extends BaseHandler {
       'webserver' => [
         'type' => 'apache',
         'overwriteconfig' => FALSE,
+        'responseheader' => [
+          'server' => '',
+          'strict_transport_security' => 'max-age=31536000; includeSubDomains',
+          'referrer_policy' => 'same-origin',
+          'permissions_policy' => 'accelerometer=(), camera=(), geolocation=(), gyroscope=(), microphone=(), payment=(), usb=()',
+          'cross_origin_embedder_policy' => 'unsafe-none',
+          'cross_origin_opener_policy' => 'same-origin',
+          'cross_origin_resource_policy' => 'cross-origin',
+          'x_permitted_cross_domain_policies' => 'none',
+        ],
       ],
       'mailhog' => [
         'enable' => 0,
diff --git a/templates/docker-compose.yml.twig b/templates/docker-compose.yml.twig
index 6faa1de..a4dffcb 100644
--- a/templates/docker-compose.yml.twig
+++ b/templates/docker-compose.yml.twig
@@ -49,10 +49,8 @@ services:
     restart: unless-stopped
 {% endif %}
     environment:
-{% if mailhog.enable %}
-      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
-{% elseif mailpit.enable %}
-      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailpit:1025
+{% if mailhog.enable or mailpit.enable %}
+      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S {% if mailhog.enable %}mailhog{% else %}mailpit{% endif %}:1025
 {% endif %}
       DB_HOST: mariadb
       DB_USER: drupal
@@ -153,6 +151,17 @@ services:
     labels:
       traefik.enable: 'true'
       traefik.docker.network: traefik-public
+      traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-middleware
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-middleware.chain.middlewares: {{ webserver.type }}-{{ projectname }}-headers@docker{% if basicauth.enable %},{{ webserver.type }}-{{ projectname }}-auth@docker{% endif %}{% for domain in extradomains %},{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}@docker{% endfor %}
+
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.server: '{{ webserver.responseheader.server }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.strict-transport-security: '{{ webserver.responseheader.strict_transport_security }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.referrer-policy: '{{ webserver.responseheader.referrer_policy }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.permissions-policy: '{{ webserver.responseheader.permissions_policy }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-embedder-policy: '{{ webserver.responseheader.cross_origin_embedder_policy }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-opener-policy: '{{ webserver.responseheader.cross_origin_opener_policy }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-resource-policy: '{{ webserver.responseheader.cross_origin_resource_policy }}'
+      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.x-permitted-cross-domain-policies: '{{ webserver.responseheader.x_permitted_cross_domain_policies }}'
 {% if basicauth.enable %}
       traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-auth.basicauth.users: {{ basicauth.code }}
 {% endif %}
@@ -162,18 +171,6 @@ services:
       traefik.http.routers.{{ webserver.type }}-{{ projectname }}.tls: 'true'
       traefik.http.routers.{{ webserver.type }}-{{ projectname }}.tls.certresolver: lakedrops
 {% endif %}
-{% if extradomains|default([]) and basicauth.enable %}
-      traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-middleware
-      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-middleware.chain.middlewares: {% for domain in extradomains %}{% if loop.index > 1 %},{% endif %}{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}@docker{% endfor %},{{ webserver.type }}-{{ projectname }}-auth@docker
-{% elseif extradomains|default([])|length == 1 %}
-      traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-redirectregex1@docker
-{% elseif extradomains|default([]) %}
-      traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-middleware
-      traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-middleware.chain.middlewares: {% for domain in extradomains %}{% if loop.index > 1 %},{% endif %}{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}@docker{% endfor %}
-
-{% elseif basicauth.enable %}
-      traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-auth@docker
-{% endif %}
 {% for domain in extradomains|default([]) %}
       traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}.redirectRegex.regex: "^https://{{ domain }}/(.*)"
       traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}.redirectRegex.replacement: "https://{{ projectdomain }}/$${1}"
-- 
GitLab