diff options
Diffstat (limited to 'includes/pear/Auth/Container/PEAR.php')
| -rw-r--r-- | includes/pear/Auth/Container/PEAR.php | 165 |
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; + } + + // }}} + +} +?> |
