From ddd7d8bfdd57407362f825172d9695b1c5c744b0 Mon Sep 17 00:00:00 2001
From: Tim van Dijen <tvdijen@gmail.com>
Date: Fri, 26 Jan 2018 22:57:30 +0100
Subject: [PATCH] Add parseNameIdPolicy method

---
 lib/SimpleSAML/Utils/Config/Metadata.php | 34 ++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/lib/SimpleSAML/Utils/Config/Metadata.php b/lib/SimpleSAML/Utils/Config/Metadata.php
index 632ec04cc..ad20c4c74 100644
--- a/lib/SimpleSAML/Utils/Config/Metadata.php
+++ b/lib/SimpleSAML/Utils/Config/Metadata.php
@@ -279,4 +279,38 @@ class Metadata
         \SimpleSAML\Logger::popErrorMask();
         return $hidden === true;
     }
+
+
+    /**
+     * This method parses the different possible values of the NameIDPolicy metadata configuration.
+     *
+     * @param mixed $nameIdPolicy
+     *
+     * @return null|array
+     */
+    public static function parseNameIdPolicy($nameIdPolicy)
+    {
+        $policy = null;
+
+        if (is_string($nameIdPolicy)) {
+            // handle old configurations where 'NameIDPolicy' was used to specify just the format
+            $policy = array('Format' => $nameIdPolicy);
+        } elseif (is_array($nameIdPolicy)) {
+            // handle current configurations specifying an array in the NameIDPolicy config option
+            $nameIdPolicy_cf = SimpleSAML_Configuration::loadFromArray($nameIdPolicy);
+            $policy = array(
+                'Format'      => $nameIdPolicy_cf->getString('Format', \SAML2\Constants::NAMEID_TRANSIENT),
+                'AllowCreate' => $nameIdPolicy_cf->getBoolean('AllowCreate', true),
+            );
+            $spNameQualifier = $nameIdPolicy_cf->getString('SPNameQualifier', false);
+            if ($spNameQualifier !== false) {
+                $policy['SPNameQualifier'] = $spNameQualifier;
+            }
+        } elseif ($nameIdPolicy === null) {
+            // when NameIDPolicy is unset or set to null, default to transient as before
+            $policy = array('Format' => \SAML2\Constants::NAMEID_TRANSIENT);
+        }
+
+        return $policy;
+    }
 }
-- 
GitLab