From 7736071a84caf1da71bcd9973b4fa06930406a22 Mon Sep 17 00:00:00 2001
From: Thijs Kinkhorst <thijs@kinkhorst.com>
Date: Wed, 24 Aug 2022 14:54:59 +0000
Subject: [PATCH] Add ETag and check for modifiedness of metadata

---
 modules/saml/src/Controller/Metadata.php        | 5 +++++
 modules/saml/src/Controller/ServiceProvider.php | 5 +++++
 2 files changed, 10 insertions(+)

diff --git a/modules/saml/src/Controller/Metadata.php b/modules/saml/src/Controller/Metadata.php
index 97f4d8780..ceae302e0 100644
--- a/modules/saml/src/Controller/Metadata.php
+++ b/modules/saml/src/Controller/Metadata.php
@@ -106,6 +106,11 @@ class Metadata
             $metaxml = substr($metaxml, 0, $i ? $i + 22 : 0);
 
             $response = new Response();
+            $response->setEtag(hash('sha256', $metaxml));
+            $response->setPublic();
+            if ($response->isNotModified($request)) {
+                return $response;
+            }
             $response->headers->set('Content-Type', 'application/samlmetadata+xml');
             $response->headers->set('Content-Disposition', 'attachment; filename="idp-metadata.xml"');
             $response->setContent($metaxml);
diff --git a/modules/saml/src/Controller/ServiceProvider.php b/modules/saml/src/Controller/ServiceProvider.php
index b7fd83580..bd5d579fd 100644
--- a/modules/saml/src/Controller/ServiceProvider.php
+++ b/modules/saml/src/Controller/ServiceProvider.php
@@ -607,6 +607,11 @@ class ServiceProvider
         $metaxml = substr($metaxml, 0, $i ? $i + 22 : 0);
 
         $response = new Response();
+        $response->setEtag(hash('sha256', $metaxml));
+        $response->setPublic();
+        if ($response->isNotModified($request)) {
+            return $response;
+        }
         $response->headers->set('Content-Type', 'application/samlmetadata+xml');
         $response->headers->set('Content-Disposition', 'attachment; filename="' . basename($sourceId) . '.xml"');
         $response->setContent($metaxml);
-- 
GitLab