summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/smartattributes/lib/Auth/Process/SmartName.php79
1 files changed, 79 insertions, 0 deletions
diff --git a/modules/smartattributes/lib/Auth/Process/SmartName.php b/modules/smartattributes/lib/Auth/Process/SmartName.php
new file mode 100644
index 0000000..c762371
--- /dev/null
+++ b/modules/smartattributes/lib/Auth/Process/SmartName.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * Filter to set name in a smart way, based on available name attributes.
+ *
+ * @author Andreas Åkre Solberg, UNINETT AS.
+ * @package simpleSAMLphp
+ * @version $Id$
+ */
+class sspmod_smartattribute_Auth_Process_SmartName extends SimpleSAML_Auth_ProcessingFilter {
+
+ /**
+ * Attributes which should be added/appended.
+ *
+ * Assiciative array of arrays.
+ */
+ private $attributes = array();
+
+
+ private function getFullName($attributes) {
+ if (isset($attributes['displayName']))
+ return $attributes['displayName'][0];
+
+ if (isset($attributes['cn'])) {
+ if (count(explode(' ', $attributes['cn'][0])) > 1)
+ return $attributes['cn'][0];
+ }
+
+ if (isset($attributes['sn']) && isset($attributes['givenName']))
+ return $attributes['givenName'][0] . ' ' . $attributes['sn'][0];
+
+ if (isset($attributes['cn']))
+ return $attributes['cn'][0];
+
+ if (isset($attributes['sn']))
+ return $attributes['sn'][0];
+
+ if (isset($attributes['givenName']))
+ return $attributes['givenName'][0];
+
+ if (isset($attributes['eduPersonPrincipalName'])) {
+ $localname = $this->getLocalUser($attributes['eduPersonPrincipalName'][0]);
+ if (isset($localname)) return $localname;
+ }
+
+ return NULL;
+ }
+
+ private function getLocalUser($userid) {
+ if (strpos($userid, '@') === FALSE) return NULL;
+ $decomposed = explode('@', $userid);
+ if(count($decomposed) === 2) {
+ return $decomposed[0];
+ }
+ return NULL;
+ }
+
+ /**
+ * Apply filter to add or replace attributes.
+ *
+ * Add or replace existing attributes with the configured values.
+ *
+ * @param array &$request The current request
+ */
+ public function process(&$request) {
+ assert('is_array($request)');
+ assert('array_key_exists("Attributes", $request)');
+
+ $attributes =& $request['Attributes'];
+
+ $fullname = $this->getFullName($attributes);
+
+ if(isset($fullname)) $request['Attributes']['smartname-fullname'] = array($fullname);
+
+ }
+
+}
+
+?> \ No newline at end of file