summaryrefslogtreecommitdiffstats
path: root/modules/exampleauth/lib/Auth
diff options
context:
space:
mode:
authorOlav Morken <olav.morken@uninett.no>2008-08-18 11:36:30 +0000
committerOlav Morken <olav.morken@uninett.no>2008-08-18 11:36:30 +0000
commitc1c2c004eb46ffabc3a61f3196d31a9600b34edc (patch)
tree413e7949f7aff2d3ebe0b9738c9f2e3af5e55c11 /modules/exampleauth/lib/Auth
parent13384dde48fb2ed589146d16efbf48235d383f15 (diff)
downloadsimplesamlphp-c1c2c004eb46ffabc3a61f3196d31a9600b34edc.zip
simplesamlphp-c1c2c004eb46ffabc3a61f3196d31a9600b34edc.tar.gz
simplesamlphp-c1c2c004eb46ffabc3a61f3196d31a9600b34edc.tar.bz2
Support authentication source modules.
git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@810 44740490-163a-0410-bde0-09ae8108e29a
Diffstat (limited to 'modules/exampleauth/lib/Auth')
-rw-r--r--modules/exampleauth/lib/Auth/Source/Static.php60
-rw-r--r--modules/exampleauth/lib/Auth/Source/UserPass.php93
2 files changed, 153 insertions, 0 deletions
diff --git a/modules/exampleauth/lib/Auth/Source/Static.php b/modules/exampleauth/lib/Auth/Source/Static.php
new file mode 100644
index 0000000..c2a07cc
--- /dev/null
+++ b/modules/exampleauth/lib/Auth/Source/Static.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Example authentication source.
+ *
+ * This class is an example authentication source which will always return a user with
+ * a static set of attributes.
+ *
+ * @author Olav Morken, UNINETT AS.
+ * @package simpleSAMLphp
+ * @version $Id$
+ */
+class sspmod_exampleauth_Auth_Source_Static extends SimpleSAML_Auth_Source {
+
+
+ /**
+ * The attributes we return.
+ */
+ private $attributes;
+
+
+ /**
+ * Constructor for this authentication source.
+ *
+ * @param array $info Information about this authentication source.
+ * @param array $config Configuration.
+ */
+ public function __construct($info, $config) {
+ assert('is_array($info)');
+ assert('is_array($config)');
+
+ /* Call the parent constructor first, as required by the interface. */
+ parent::__construct($info, $config);
+
+
+ /* Parse attributes. */
+ try {
+ $this->attributes = SimpleSAML_Utilities::parseAttributes($attributes);
+ } catch(Exception $e) {
+ throw new Exception('Invalid attributes for authentication source ' .
+ $this->authId . ': ' . $e->getMessage());
+ }
+
+ }
+
+
+ /**
+ * Log in using static attributes.
+ *
+ * @param array &$state Information about the current authentication.
+ */
+ public function authenticate(&$state) {
+ assert('is_array($state)');
+
+ $state['Attributes'] = $this->attributes;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/modules/exampleauth/lib/Auth/Source/UserPass.php b/modules/exampleauth/lib/Auth/Source/UserPass.php
new file mode 100644
index 0000000..98440f5
--- /dev/null
+++ b/modules/exampleauth/lib/Auth/Source/UserPass.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Example authentication source - username & password.
+ *
+ * This class is an example authentication source which stores all username/passwords in an array,
+ * and authenticates users against this array.
+ *
+ * @author Olav Morken, UNINETT AS.
+ * @package simpleSAMLphp
+ * @version $Id$
+ */
+class sspmod_exampleauth_Auth_Source_UserPass extends sspmod_core_Auth_UserPassBase {
+
+
+ /**
+ * Our users, stored in an associative array. The key of the array is "<username>:<password>",
+ * while the value of each element is a new array with the attributes for each user.
+ */
+ private $users;
+
+
+ /**
+ * Constructor for this authentication source.
+ *
+ * @param array $info Information about this authentication source.
+ * @param array $config Configuration.
+ */
+ public function __construct($info, $config) {
+ assert('is_array($info)');
+ assert('is_array($config)');
+
+ /* Call the parent constructor first, as required by the interface. */
+ parent::__construct($info, $config);
+
+ $this->users = array();
+
+ /* Validate and parse our configuration. */
+ foreach ($config as $userpass => $attributes) {
+ if (!is_string($userpass)) {
+ throw new Exception('Invalid <username>:<password> for authentication source ' .
+ $this->authId . ': ' . $userpass);
+ }
+
+ $userpass = explode(':', $userpass, 2);
+ if (count($userpass) !== 2) {
+ throw new Exception('Invalid <username>:<password> for authentication source ' .
+ $this->authId . ': ' . $userpass[0]);
+ }
+ $username = $userpass[0];
+ $password = $userpass[1];
+
+ try {
+ $attributes = SimpleSAML_Utilities::parseAttributes($attributes);
+ } catch(Exception $e) {
+ throw new Exception('Invalid attributes for user ' . $username .
+ ' in authentication source ' . $this->authId . ': ' .
+ $e->getMessage());
+ }
+
+ $this->users[$username . ':' . $password] = $attributes;
+ }
+ }
+
+
+ /**
+ * Attempt to log in using the given username and password.
+ *
+ * On a successful login, this function should return the users attributes. On failure,
+ * it should throw an exception. If the error was caused by the user entering the wrong
+ * username or password, a SimpleSAML_Error_Error('WRONGUSERPASS') should be thrown.
+ *
+ * Note that both the username and the password are UTF-8 encoded.
+ *
+ * @param string $username The username the user wrote.
+ * @param string $password The password the user wrote.
+ * @return array Associative array with the users attributes.
+ */
+ protected function login($username, $password) {
+ assert('is_string($username)');
+ assert('is_string($password)');
+
+ $userpass = $username . ':' . $password;
+ if (!array_key_exists($userpass, $this->users)) {
+ throw new SimpleSAML_Error_Error('WRONGUSERPASS');
+ }
+
+ return $this->users[$userpass];
+ }
+
+}
+
+?> \ No newline at end of file