mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-28 10:53:39 +01:00
a80ffb6223
using a session for basic auth (not session aware) clients for WebDAV and GroupDAV. The "sessionid" get's constructed from the basic auth credentials and is not random (as the clients dont store them). --> speeds up the use of *DAV --> stops *DAV handlers to created numerious sessions
55 lines
1.8 KiB
PHP
55 lines
1.8 KiB
PHP
<?php
|
|
/**
|
|
* eGroupWare - GroupDAV access
|
|
*
|
|
* Using the PEAR HTTP/WebDAV/Server class (which need to be installed!)
|
|
*
|
|
* @link http://www.egroupware.org
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package api
|
|
* @subpackage groupdav
|
|
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
|
* @copyright (c) 2007-9 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
|
|
* @version $Id$
|
|
*/
|
|
|
|
$starttime = microtime(true);
|
|
|
|
/**
|
|
* check if the given user has access
|
|
*
|
|
* Create a session or if the user has no account return authenticate header and 401 Unauthorized
|
|
*
|
|
* @param array &$account
|
|
* @return int session-id
|
|
*/
|
|
function check_access(&$account)
|
|
{
|
|
if (!isset($_SERVER['PHP_AUTH_USER']) ||
|
|
!($sessionid = $GLOBALS['egw']->session->create($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW'],'text')))
|
|
{
|
|
header('WWW-Authenticate: Basic realm="'.groupdav::REALM.
|
|
// if the session class gives a reason why the login failed --> append it to the REALM
|
|
($GLOBALS['egw']->session->reason ? ': '.$GLOBALS['egw']->session->reason : '').'"');
|
|
header('HTTP/1.1 401 Unauthorized');
|
|
header('X-WebDAV-Status: 401 Unauthorized', true);
|
|
exit;
|
|
}
|
|
return $sessionid;
|
|
}
|
|
|
|
$GLOBALS['egw_info']['flags'] = array(
|
|
'noheader' => True,
|
|
'currentapp' => 'groupdav',
|
|
'autocreate_session_callback' => 'check_access',
|
|
'no_exception_handler' => 'basic_auth', // we use a basic auth exception handler (sends exception message as basic auth realm)
|
|
);
|
|
// if you move this file somewhere else, you need to adapt the path to the header!
|
|
include(dirname(__FILE__).'/header.inc.php');
|
|
|
|
$headertime = microtime(true);
|
|
|
|
$groupdav = new groupdav();
|
|
$groupdav->ServeRequest();
|
|
//error_log(sprintf("GroupDAV %s request took %5.3f s (header include took %5.3f s)",$_SERVER['REQUEST_METHOD'],microtime(true)-$starttime,$headertime-$starttime));
|