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