summaryrefslogtreecommitdiff
path: root/includes/pear/Auth/Container/PEAR.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/pear/Auth/Container/PEAR.php')
-rw-r--r--includes/pear/Auth/Container/PEAR.php165
1 files changed, 165 insertions, 0 deletions
diff --git a/includes/pear/Auth/Container/PEAR.php b/includes/pear/Auth/Container/PEAR.php
new file mode 100644
index 0000000..1de9b82
--- /dev/null
+++ b/includes/pear/Auth/Container/PEAR.php
@@ -0,0 +1,165 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+
+/**
+ * Storage driver for use against PEAR website
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.01 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_01.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Authentication
+ * @package Auth
+ * @author Yavor Shahpasov <yavo@netsmart.com.cy>
+ * @author Adam Ashley <aashley@php.net>
+ * @copyright 2001-2006 The PHP Group
+ * @license http://www.php.net/license/3_01.txt PHP License 3.01
+ * @version CVS: $Id: PEAR.php 289652 2009-10-15 04:42:18Z aashley $
+ * @link http://pear.php.net/package/Auth
+ * @since File available since Release 1.3.0
+ */
+
+/**
+ * Include PEAR HTTP_Client.
+ */
+require_once 'HTTP/Client.php';
+/**
+ * Include Auth_Container base class
+ */
+require_once 'Auth/Container.php';
+
+/**
+ * Storage driver for authenticating against PEAR website
+ *
+ * This driver provides a method for authenticating against the pear.php.net
+ * authentication system.
+ *
+ * Supports two options:
+ * - "url": The base URL with schema to authenticate against
+ * - "karma": An array of karma levels which the user needs one of.
+ * When empty, no karma level is required.
+ *
+ * @category Authentication
+ * @package Auth
+ * @author Yavor Shahpasov <yavo@netsmart.com.cy>
+ * @author Adam Ashley <aashley@php.net>
+ * @author Adam Harvey <aharvey@php.net>
+ * @copyright 2001-2007 The PHP Group
+ * @license http://www.php.net/license/3_01.txt PHP License 3.01
+ * @version Release: @package_version@ File: $Revision: 289652 $
+ * @link http://pear.php.net/package/Auth
+ * @since Class available since Release 1.3.0
+ */
+class Auth_Container_Pear extends Auth_Container
+{
+ // {{{ properties
+
+ /**
+ * URL to connect to, with schema
+ *
+ * @var string
+ */
+ var $url = 'https://pear.php.net/rest-login.php/';
+
+ /**
+ * Array of karma levels the user can have.
+ * A user needs only one of the levels to succeed login.
+ * No levels mean that only username and password need to match
+ *
+ * @var array
+ */
+ var $karma = array();
+
+ // }}}
+ // {{{ Auth_Container_Pear() [constructor]
+
+ /**
+ * Constructor
+ *
+ * Accepts options "url" and "karma", see class docs.
+ *
+ * @param array $data Array of options
+ *
+ * @return void
+ */
+ function Auth_Container_Pear($data = null)
+ {
+ if (!is_array($data)) {
+ PEAR::raiseError('The options for Auth_Container_Pear must be an array');
+ }
+ if (isset($data['karma'])) {
+ if (is_array($data['karma'])) {
+ $this->karma = $data['karma'];
+ } else {
+ $this->karma = array($data['karma']);
+ }
+ }
+
+ if (isset($data['url'])) {
+ $this->url = $data['url'];
+ }
+ }
+
+ // }}}
+ // {{{ fetchData()
+
+ /**
+ * Get user information from pear.php.net
+ *
+ * This function uses the given username and password to authenticate
+ * against the pear.php.net website
+ *
+ * @param string Username
+ * @param string Password
+ * @return mixed Error object or boolean
+ */
+ function fetchData($username, $password)
+ {
+ $this->log('Auth_Container_PEAR::fetchData() called.', AUTH_LOG_DEBUG);
+
+ $client = new HTTP_Client;
+
+ $this->log('Auth_Container_PEAR::fetchData() getting salt.', AUTH_LOG_DEBUG);
+ $code = $client->get($this->url . '/getsalt');
+ if ($code instanceof PEAR_Error) {
+ return $code;
+ }
+ if ($code != 200) {
+ return PEAR::raiseError('Bad response to salt request.', $code);
+ }
+ $resp = $client->currentResponse();
+ $salt = $resp['body'];
+
+ $this->log('Auth_Container_PEAR::fetchData() calling validate.', AUTH_LOG_DEBUG);
+ $postOptions = array(
+ 'username' => $username,
+ 'password' => md5($salt . md5($password))
+ );
+ if (is_array($this->karma) && count($this->karma) > 0) {
+ $postOptions['karma'] = implode(',', $this->karma);
+ }
+
+ $code = $client->post($this->url . '/validate', $postOptions);
+ if ($code instanceof PEAR_Error) {
+ return $code;
+ }
+ if ($code != 200) {
+ return PEAR::raiseError('Bad response to validate request.', $code);
+ }
+ $resp = $client->currentResponse();
+
+ list($code, $message) = explode(' ', $resp['body'], 2);
+ if ($code != 8) {
+ return PEAR::raiseError($message, $code);
+ }
+ return true;
+ }
+
+ // }}}
+
+}
+?>