steffen: server/kolab-horde-framework/kolab-horde-framework/Token/Token file.php, NONE, 1.1 sql.php, NONE, 1.1
cvs at intevation.de
cvs at intevation.de
Fri Oct 14 16:33:15 CEST 2005
- Previous message: steffen: server/kolab-horde-framework/kolab-horde-framework/Token Token.php, NONE, 1.1 package.xml, NONE, 1.1
- Next message: steffen: server/kolab-horde-framework/kolab-horde-framework/Text_Diff/tests .cvsignore, NONE, 1.1 1.txt, NONE, 1.1 2.txt, NONE, 1.1 diff.phpt, NONE, 1.1 unified.phpt, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: steffen
Update of /kolabrepository/server/kolab-horde-framework/kolab-horde-framework/Token/Token
In directory doto:/tmp/cvs-serv28903/kolab-horde-framework/kolab-horde-framework/Token/Token
Added Files:
file.php sql.php
Log Message:
Separated Horde Framework from kolab-resource-handlers
--- NEW FILE: file.php ---
<?php
/**
* Token tracking implementation for local files.
*
* Optional values for $params:
* 'token_dir' The directory where to keep token files.
* 'timeout' The period (in seconds) after which an id is purged.
*
* $Horde: framework/Token/Token/file.php,v 1.14 2004/04/07 17:43:42 chuck Exp $
*
* Copyright 1999-2004 Max Kalika <max at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Max Kalika <max at horde.org>
* @version $Revision: 1.1 $
* @since Horde 1.3
* @package Horde_Token
*/
class Horde_Token_file extends Horde_Token {
/**
* Handle for the open file descriptor.
*
* @var resource $_fd
*/
var $_fd = false;
/**
* Boolean indicating whether or not we have an open file
* descriptor.
*
* @var boolean $_connected
*/
var $_connected = false;
/**
* Create a new file based token-tracking container.
*
* @param optional array $params A hash containing storage parameters.
*/
function Horde_Token_file($params = array())
{
$this->_params = $params;
/* Choose the directory to save the stub files. */
if (!isset($this->_params['token_dir'])) {
$this->_params['token_dir'] = Util::getTempDir();
}
/* Set timeout to 24 hours if not specified. */
if (!isset($this->_params['timeout'])) {
$this->_params['timeout'] = 86400;
}
}
/**
* Deletes all expired connection id's from the SQL server.
*
* @return boolean True on success, a PEAR_Error object on failure.
*/
function purge()
{
// Make sure we have no open file descriptors before unlinking
// files.
if (!$this->_disconnect()) {
return PEAR::raiseError('Unable to close file descriptors');
}
/* Build stub file list. */
if (!($dir = opendir($this->_params['token_dir']))) {
return PEAR::raiseError('Unable to open token directory');
}
/* Find expired stub files */
while (($dirEntry = readdir($dir)) != '') {
if (preg_match('|^conn_\w{8}$|', $dirEntry) && (time() - filemtime($this->_params['token_dir'] . '/' . $dirEntry) >= $this->_params['timeout'])) {
if (!@unlink($this->_params['token_dir'] . '/' . $dirEntry)) {
return PEAR::raiseError('Unable to purge token file.');
}
}
}
closedir($dir);
return true;
}
function exists($tokenID)
{
if (is_a(($result = $this->_connect($tokenID)), 'PEAR_Error')) {
return $result;
}
/* Find already used IDs */
$fileContents = @file($this->_params['token_dir'] . '/conn_' . $this->hexRemoteAddr());
if ($fileContents) {
$iMax = count($fileContents);
for ($i = 0; $i < $iMax; $i++) {
if (chop($fileContents[$i]) == $tokenID) {
return true;
}
}
}
return false;
}
function add($tokenID)
{
if (is_a(($result = $this->_connect($tokenID)), 'PEAR_Error')) {
return $result;
}
/* Write the entry. */
fwrite($this->_fd, "$tokenID\n");
/* Return an error if the update fails, too. */
if (!$this->_disconnect()) {
return PEAR::raiseError('Failed to close token file cleanly.');
}
return true;
}
/**
* Opens a file descriptor to a new or existing file.
*
* @return boolean True on success, a PEAR_Error object on failure.
*/
function _connect($tokenID)
{
if (!$this->_connected) {
// Open a file descriptor to the token stub file.
$this->_fd = @fopen($this->_params['token_dir'] . '/conn_' . $this->hexRemoteAddr(), 'a');
if (!$this->_fd) {
return PEAR::raiseError('Failed to open token file.');
}
$this->_connected = true;
}
return true;
}
/**
* Closes the file descriptor.
*
* @return boolean True on success, false on failure.
*/
function _disconnect()
{
if ($this->_connected) {
$this->_connected = false;
return fclose($this->_fd);
}
return true;
}
}
--- NEW FILE: sql.php ---
<?php
/**
* Token tracking implementation for PHP's PEAR database abstraction
* layer.
*
* Required values for $params:
* 'phptype' The database type (ie. 'pgsql', 'mysql, etc.).
* 'hostspec' The hostname of the database server.
* 'username' The username with which to connect to the database.
* 'password' The password associated with 'username'.
* 'database' The name of the database.
*
* Required by some database implementations:
* 'options' Additional options to pass to the database.
* 'tty' The TTY on which to connect to the database.
* 'port' The port on which to connect to the database.
*
* Optional value for $params:
* 'table' The name of the connections table in 'database'.
* Defaults to horde_tokens.
* 'timeout' The period (in seconds) after which an id is purged.
*
* The table structure for the connections is as follows:
*
* CREATE TABLE horde_tokens (
* token_address VARCHAR(8) NOT NULL,
* token_id VARCHAR(32) NOT NULL,
* token_timestamp BIGINT NOT NULL,
*
* PRIMARY KEY (token_address, token_id)
* );
*
* $Horde: framework/Token/Token/sql.php,v 1.21 2004/03/30 20:54:02 chuck Exp $
*
* Copyright 1999-2004 Max Kalika <max at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Max Kalika <max at horde.org>
* @version $Revision: 1.1 $
* @since Horde 1.3
* @package Horde_Token
*/
class Horde_Token_sql extends Horde_Token {
/**
* Handle for the current database connection.
* @var object DB $_db
*/
var $_db = '';
/**
* Boolean indicating whether or not we're connected to the SQL
* server.
* @var boolean $_connected
*/
var $_connected = false;
/**
* Constructs a new SQL connection object.
*
* @param optional array $params A hash containing connection parameters.
*/
function Horde_Token_sql($params = array())
{
$this->_params = $params;
/* Set timeout to 24 hours if not specified. */
if (!isset($this->_params['timeout'])) {
$this->_params['timeout'] = 86400;
}
}
/**
* Deletes all expired connection id's from the SQL server.
*
* @return boolean True on success, a PEAR_Error object on failure.
*/
function purge()
{
if (is_a(($result = $this->_connect()), 'PEAR_Error')) {
return $result;
}
/* Build SQL query. */
$query = 'DELETE FROM ' . $this->_params['table'] . ' WHERE ';
$query .= 'token_timestamp < ' . (time() - $this->_params['timeout']);
$result = $this->_db->query($query, $this->_db);
/* Return an error if the update fails, too. */
if (is_a($result, 'PEAR_Error')) {
return $result;
}
return true;
}
function exists($tokenID)
{
if (is_a(($result = $this->_connect()), 'PEAR_Error')) {
return false;
}
/* Build SQL query. */
$query = 'SELECT token_id FROM ' . $this->_params['table'];
$query .= ' WHERE token_address = ' . $this->_db->quote($this->hexRemoteAddr());
$query .= ' AND token_id = ' . $this->_db->quote($tokenID);
$result = $this->_db->getOne($query);
if (is_a($result, 'PEAR_Error')) {
return false;
} else {
return !empty($result);
}
}
function add($tokenID)
{
if (is_a(($result = $this->_connect()), 'PEAR_Error')) {
return $result;
}
/* Build SQL query. */
$query = sprintf('INSERT INTO %s (token_address, token_id, token_timestamp)' .
' VALUES (%s, %s, %s)',
$this->_params['table'],
$this->_db->quote($this->hexRemoteAddr()),
$this->_db->quote($tokenID),
time());
$result = $this->_db->query($query);
if (is_a($result, 'PEAR_Error')) {
return $result;
}
return true;
}
/**
* Opens a connection to the SQL server.
*
* @return boolean True on success, a PEAR_Error object on failure.
*/
function _connect()
{
if ($this->_connected) {
return true;
}
$result = Util::assertDriverConfig($this->_params,
array('phptype', 'hostspec', 'username', 'database'),
'token SQL', array('driver' => 'token'));
if (is_a($result, 'PEAR_Error')) {
return $result;
}
if (!array_key_exists('table', $this->_params)) {
$this->_params['table'] = 'horde_tokens';
}
/* Connect to the SQL server using the supplied parameters. */
require_once 'DB.php';
$this->_db = &DB::connect($this->_params,
array('persistent' => !empty($this->_params['persistent'])));
if (is_a($this->_db, 'PEAR_Error')) {
return $this->_db;
}
/* Enable the "portability" option. */
$this->_db->setOption('optimize', 'portability');
$this->_connected = true;
return true;
}
/**
* Disconnect from the SQL server and clean up the connection.
*
* @return boolean True on success, a PEAR_Error object on failure.
*/
function _disconnect()
{
if ($this->_connected) {
$this->_connected = false;
return $this->_db->disconnect();
}
return true;
}
}
- Previous message: steffen: server/kolab-horde-framework/kolab-horde-framework/Token Token.php, NONE, 1.1 package.xml, NONE, 1.1
- Next message: steffen: server/kolab-horde-framework/kolab-horde-framework/Text_Diff/tests .cvsignore, NONE, 1.1 1.txt, NONE, 1.1 2.txt, NONE, 1.1 diff.phpt, NONE, 1.1 unified.phpt, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the commits
mailing list