From 11ffb6d01af812e5071b01b18490ae08d97c2427 Mon Sep 17 00:00:00 2001
From: Olav Morken <olav.morken@uninett.no>
Date: Thu, 19 Jan 2012 08:44:03 +0000
Subject: [PATCH] core: Add AttributeCopy filter.

Thanks to Gyula Szabo for implementing this!

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@3018 44740490-163a-0410-bde0-09ae8108e29a
---
 .../core/lib/Auth/Process/AttributeCopy.php   | 73 +++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 modules/core/lib/Auth/Process/AttributeCopy.php

diff --git a/modules/core/lib/Auth/Process/AttributeCopy.php b/modules/core/lib/Auth/Process/AttributeCopy.php
new file mode 100644
index 000000000..5ebf924fe
--- /dev/null
+++ b/modules/core/lib/Auth/Process/AttributeCopy.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * Attribute filter for renaming attributes.
+ *
+ * @author Gyula Szabo MTA SZTAKI
+ * @package simpleSAMLphp
+ * @version $Id$
+ *
+ * You just follow the 'source' => 'destination' schema. In this example user's  * cn will be the user's displayName.
+ *
+ *    5 => array(
+ *        'class' => 'core:AttributeCopy',
+ *        'cn' => 'displayName',
+ *        'uid' => 'username',
+ *         ),
+ *
+ */
+class sspmod_core_Auth_Process_AttributeCopy extends SimpleSAML_Auth_ProcessingFilter {
+
+	/**
+	 * Assosiative array with the mappings of attribute names.
+	 */
+	private $map = array();
+
+
+	/**
+	 * Initialize this filter, parse configuration
+	 *
+	 * @param array $config  Configuration information about this filter.
+	 * @param mixed $reserved  For future use.
+	 */
+	public function __construct($config, $reserved) {
+		parent::__construct($config, $reserved);
+
+		assert('is_array($config)');
+
+		foreach($config as $source => $destination) {
+
+			if(!is_string($source)) {
+				throw new Exception('Invalid source attribute name: ' . var_export($source, TRUE));
+			}
+
+			if(!is_string($destination)) {
+				throw new Exception('Invalid destination attribute name: ' . var_export($destination, TRUE));
+			}
+
+			$this->map[$source] = $destination;
+		}
+	}
+
+
+	/**
+	 * Apply filter to rename attributes.
+	 *
+	 * @param array &$request  The current request
+	 */
+	public function process(&$request) {
+		assert('is_array($request)');
+		assert('array_key_exists("Attributes", $request)');
+
+		$attributes =& $request['Attributes'];
+
+		foreach($attributes as $name => $values) {
+			if (array_key_exists($name,$this->map)){
+				$attributes[$this->map[$name]] = $values;
+			}
+		}
+
+	}
+}
+
+?>
-- 
GitLab