Add new ExternalAuth mechanism, Hardcoded
authorAryeh Gregor <simetrical@users.mediawiki.org>
Thu, 10 Dec 2009 01:05:13 +0000 (01:05 +0000)
committerAryeh Gregor <simetrical@users.mediawiki.org>
Thu, 10 Dec 2009 01:05:13 +0000 (01:05 +0000)
This just lets you enter the database by hand in LocalSettings.php, for
testing.  Now other people can actually test ExternalAuth without having
a vBulletin license.  23 lines not counting whitespace/comments/closing
braces, and took me ~20 minutes to write.

includes/AutoLoader.php
includes/extauth/Hardcoded.php [new file with mode: 0644]

index 66fe8dd..3daa08b 100644 (file)
@@ -75,6 +75,7 @@ $wgAutoloadLocalClasses = array(
        'ExternalStoreHttp' => 'includes/ExternalStoreHttp.php',
        'ExternalStore' => 'includes/ExternalStore.php',
        'ExternalUser' => 'includes/ExternalUser.php',
+       'ExternalUser_Hardcoded' => 'includes/extauth/Hardcoded.php',
        'ExternalUser_vB' => 'includes/extauth/vB.php',
        'FatalError' => 'includes/Exception.php',
        'FakeTitle' => 'includes/FakeTitle.php',
diff --git a/includes/extauth/Hardcoded.php b/includes/extauth/Hardcoded.php
new file mode 100644 (file)
index 0000000..4d63f9d
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+# Copyright (C) 2009 Aryeh Gregor
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# http://www.gnu.org/copyleft/gpl.html
+
+/**
+ * This class supports external authentication from a literal array dumped in
+ * LocalSettings.php.  It's mostly useful for testing.  Example configuration:
+ *
+ *   $wgExternalAuthType = 'Hardcoded';
+ *   $wgExternalAuthConf = array(
+ *       'Bob Smith' => array(
+ *           'password' => 'literal string',
+ *           'emailaddress' => 'bob@example.com',
+ *       ),
+ *   );
+ *
+ * Multiple names may be provided.  The keys of the inner arrays can be either
+ * 'password', or the name of any preference.
+ */
+class ExternalUser_Hardcoded extends ExternalUser {
+       private $mName;
+
+       protected function initFromName( $name ) {
+               global $wgExternalAuthConf;
+
+               if ( isset( $wgExternalAuthConf[$name] ) ) {
+                       $this->mName = $name;
+                       return true;
+               }
+               return false;
+       }
+
+       protected function initFromId( $id ) {
+               return $this->initFromName( $id );
+       }
+
+       public function getId() {
+               return $this->mName;
+       }
+
+       public function getName() {
+               return $this->mName;
+       }
+
+       public function authenticate( $password ) {
+               global $wgExternalAuthConf;
+
+               return isset( $wgExternalAuthConf[$this->mName]['password'] )
+                       && $wgExternalAuthConf[$this->mName]['password'] == $password;
+       }
+
+       public function getPref( $pref ) {
+               global $wgExternalAuthConf;
+
+               if ( isset( $wgExternalAuthConf[$this->mName][$pref] ) ) {
+                       return $wgExternalAuthConf[$this->mName][$pref];
+               }
+               return null;
+       }
+
+       # TODO: Implement setPref() via regex on LocalSettings.  (Just kidding.)
+}